文档章节

java文件的读写

猴亮屏
 猴亮屏
发布于 2014/06/04 16:32
字数 1110
阅读 82
收藏 9
/**
 * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
 */ 
public class ReadFromFile { 
    public static void readFileByBytes(String fileName) {
    File file = new File(fileName);
    InputStream in = null;
    try {
        System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节
        in = new FileInputStream(file);
        int tempbyte;
        while ((tempbyte = in.read()) != -1) {
            System.out.print(tempbyte);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace(); 
        return; 
    } 
    try { 
        System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节
        byte[] tempbytes = new byte[100]; 
        int byteread = 0; 
        in = new FileInputStream(fileName); 
        ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 
        while ((byteread = in.read(tempbytes)) != -1) { 
            System.out.print(tempbytes, 0, byteread); 
        } 
    } catch (Exception e1) { 
        e1.printStackTrace(); 
    } finally { 
        if (in != null) { 
            try { 
                in.close(); 
            } catch (IOException e1) { 
            } 
        } 
    } 
}
/**
   * 以字符为单位读取文件,常用于读文本,数字等类型的文件
   */
  public static void readFileByChars(String fileName) {
      File file = new File(fileName);
      Reader reader = null;
      try {
          System.out.println("以字符为单位读取文件内容,一次读一个字符:");
          // 一次读一个字符
          reader = new InputStreamReader(new FileInputStream(file));
          int tempchar;
          while ((tempchar = reader.read()) != -1) {
              // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
              // 但如果这两个字符分开显示时,会换两次行。
              // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
              if (((char) tempchar) != '\r') {
                  System.out.print((char) tempchar);
              }
          }
          reader.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
      try {
          System.out.println("以字符为单位读取文件内容,一次读多个字符:");
          // 一次读多个字符
          char[] tempchars = new char[30];
          int charread = 0;
          //由于要以字符来读取,所以需要套上字符流
          reader = new InputStreamReader(new FileInputStream(fileName));
          // 读入多个字符到字符数组中,charread为一次读取字符数
          while ((charread = reader.read(tempchars)) != -1) {
              // 同样屏蔽掉\r不显示
              if ((charread == tempchars.length)
                      && (tempchars[tempchars.length - 1] != '\r')) {
                  System.out.print(tempchars);
              } else {
                  for (int i = 0; i < charread; i++) {
                      if (tempchars[i] == '\r') {
                          continue;
                      } else {
                          System.out.print(tempchars[i]);
                      }
                  }
              }
          }
 
      } catch (Exception e1) {
          e1.printStackTrace();
      } finally {
          if (reader != null) {
              try {
                  reader.close();
              } catch (IOException e1) {
                  e.printerror();
              }
          }
      }
  }
/**
   * 以行为单位读取文件,常用于读面向行的格式化文件
   */
  public static void readFileByLines(String fileName) {
      File file = new File(fileName);
      BufferedReader reader = null;
      try {
          System.out.println("以行为单位读取文件内容,一次读一整行:");
          reader = new BufferedReader(new FileReader(file));
          String tempString = null;
          int line = 1;
          // 一次读入一行,直到读入null为文件结束
          while ((tempString = reader.readLine()) != null) {
              // 显示行号
              System.out.println("line " + line + ": " + tempString);
              line++;
          }
          reader.close();
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          if (reader != null) {
              try {
                  reader.close();
              } catch (IOException e1) {
              }
          }
      }
  }
/**
*将一个文件的内容写入另一个文件(按行来写)
*/
public class FileTest {
public static void main(String[] args)   {
    File  file=new File("c:\\test.txt");
    BufferedReader read=null;
    BufferedWriter writer=null;
    
    try {
      writer=new BufferedWriter(new  FileWriter("c:\\zwm.txt"));
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    
    try {
      read=new BufferedReader(new  FileReader(file));
      String tempString = null;
      
      while((tempString=read.readLine())!=null){
          writer.append(tempString);
          writer.newLine();//换行
          writer.flush();//需要及时清掉流的缓冲区,万一文件过大就有可能无法写入了
      }
      
      read.close();
      writer.close();
      System.out.println("文件写入完成...");
    } catch (IOException e) {
      e.printStackTrace();
    }
}
}

  • IO流的分类:
    1、根据流的数据对象来分:
    高端流:所有的内存中的流都是高端流,比如:InputStreamReader 
    低端流:所有的外界设备中的流都是低端流,比如InputStream,OutputStream 
    如何区分:所有的流对象的后缀中包含Reader或者Writer的都是高端流,反之,则基本上为低端流,不过也有例外,比如PrintStream就是高端流

  • 2、根据数据的流向来分:
    输出流:是用来写数据的,是由程序(内存)--->外界设备
    输入流:是用来读数据的,是由外界设备--->程序(内存)
    如何区分:一般来说输入流带有Input,输出流带有Output

  • 3、根据流数据的格式来分:
    字节流:处理声音或者图片等二进制的数据的流,比如InputStream 
    字符流:处理文本数据(如txt文件)的流,比如InputStreamReader 
    如何区分:可用高低端流来区分,所有的低端流都是字节流,所有的高端流都是字符流

  • 4、根据流数据的包装过程来分:
    原始流:在实例化流的对象的过程中,不需要传入另外一个流作为自己构造方法的参数的流,称之为原始流。
    包装流:在实例化流的对象的过程中,需要传入另外一个流作为自己构造方法发参数的流,称之为包装流。
    如何区分:所以的低端流都是原始流,所以的高端流都是包装流

IO流对象的继承关系(如下图):

\


本文转载自:http://www.2cto.com/kf/201312/266161.html

共有 人打赏支持
猴亮屏

猴亮屏

粉丝 35
博文 525
码字总数 57346
作品 4
北京
Android工程师
私信 提问
Android Serializable与Parcelable原理与区别

一、序列化、反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。 对象的反序列化:把字节序列恢复为Java对象的过程。 (2) 序列化详细解释 ...

KingMing
2015/04/16
0
0
通过jstack日志分析和问题排查

简介 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁...

谢思华
06/29
0
0
java 读写大文件用nio出错了

最近在学习java io 试了下java读写大文件(2G+的一部电影)。单纯使用io,花费了259秒如下: 使用ByteBuffer,花费98秒: 浏览jdk文档的时候发现TransferFrom 和TransferTo能够把直接把两个通道相...

chen1922
2012/01/11
724
1
amoeba-mysql 的安装使用和读写分离

amoeba真的是不错的稳定而灵活的数据库解决方案,阿里巴巴的技术陈思儒开始的一个开源项目,它是分布式数据库Proxy解决方案。 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Cli...

红薯
2010/08/11
2.2K
1
JAVA NIO编程入门(一)

JAVA NIO编程入门(一) 一、前言 笔者之前接触的NIO编程比较少,所以对这一块的基础也比较弱,NIO作为java编程中一个重要的模块,不能很好的掌握它,感觉自己在java方面就掌握的不够,所以,...

木木匠
09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux脚本中父shell与子shell 执行的几种方式

本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell 1. source filename or . filename 不创建sub...

问题终结者
14分钟前
1
0
安装jdk和Tomcat

12月12日任务 16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat Tomcat介绍 Tomcat是apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由apache、Sun和其他一些...

robertt15
15分钟前
3
0
Beetl 免费视频

来自 https://my.oschina.net/gking?q=Beetl ,Beetl终于有人录制视频了 项目git地址:https://gitee.com/gavink/beetl-blog 视频地址:下载下来会更清晰,视频比较长,可使用倍速看 百度网盘...

闲大赋
27分钟前
0
0
isEmpty和null的区别

isEmpty和null的区别: 1.一个是对象为空(IsNull),一个是值为空(IsEmpty) 2.IsNull指任务类型变量是否为空包括对象类型的变量。 IsNull函数: 功能:返回Boolean的值,指明表达是否不包...

DemonsI
54分钟前
3
0
Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025 官网下载安装mysql-server 依次使用下面三个命令安装 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r......

Yao--靠自己
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部