FileInputStream

FileInputStream()的使用步骤

第一步:
  1:打开流(即创建流)
第二步:
  2:通过流读取内容
第三步:
  3:用完后,关闭流资源

  显然流是Java中的一类对象,要打开流其实就是创建具体流的对象,由于是读取硬盘上的文件,应该使用输入流。所以找到了InputStream类,但是InputStream是抽象类,需要使用它的具体实现类来创建对象就是FileInputStream。通过new 调用FileInputStream 的构造方法来创建对象。发现FileInputStream的构造方法需要指定文件的来源。查看构造方法,可以接受字符串也可以接受File对象。我们通过构建File对象指定文件路径。

  使用流就像使用水管一样,要打开就要关闭。所以打开流和关闭流的动作是比不可少的。如何关闭流?使用close方法即可,当完成流的读写时,应该通过调用close方法来关闭它,这个方法会释放掉十分有限的操作系统资源.如果一个应用程序打开了过多的流而没有关闭它们,那么系统资源将被耗尽.

如何通过流读取内容

查找api文档通过read方法,查看该方法,发现有返回值,并且是int类型的,该方法一次读取一个字节(byte)

输入流读取方式1:

read方法()

一次读取一个字节,读到文件末尾返回-1.

仔细查看api文档发现read方法如果读到文件的末尾会返回-1。那么就可以通过read方法的返回值是否是-1来控制我们的循环读取。

//一次只能读取一个字节
public static void readTest1() throws IOException{
   //找到目标
   File file=new File("E:\\A.txt");
   //建立数据的输入管道
   FileInputStream fileInputStream=new FileInputStream(file);
   //开始读数据
   int context=0;
   while((context=fileInputStream.read())!=-1){
       System.out.println((char)context);//一次只能读一个字节
  }
   //关闭资源
   fileInputStream.close();
}

输入流读取方式2:

使用read(byte[] b) 方法。使用缓冲区(关键是缓冲区大小的确定)

使用read方法的时候,流需要读一次就处理一次,可以将读到的数据装入到字节数组中,一次性的操作数组,可以提高效率。

问题:缓冲区大小?那么字节数组如何定义?定义多大?

通过read方法,往byte数组中存内容,那么该read方法返回的是往数组中存了多少字节。

//使用缓冲 数组 读取 缺点:无法读取完整一个文件的数据
public static void readTest2() throws IOException{
   //找到目标文件
   File file=new File("E:\\A.txt");
   //建立数据的输入通道
   FileInputStream fileInputStream=new FileInputStream(file);
   //建立缓冲字节数组,读取文件的数据
   int length=0;
   //缓冲数组的大小一般是1024的倍数,因为与计算机的处理单位有关
   //理论上,数组越大,效率越高
   byte[] buf=new byte[3];//相当于超市里边的购物车
   while((length=fileInputStream.read(buf))!=-1){
       //如果使用read读取数据传入到了字节数组,数据是存储到字节数组中的,read方法的返回值表示的是 本次读取了几个字节数据到字节数组中。
       String string=new String(buf,0,length);//一定要使用0,length。因为数组采用的是覆盖,不限定范围,就会出现内容错误。
       System.out.print("内容为"+string);
  }
   //关闭资源
   fileInputStream.close();
}
posted @ 2017-02-16 18:24  stsinghua  阅读(174)  评论(0编辑  收藏  举报