当前位置: 首页 > 编程语言 > Java > 正文

Java编程那些事儿87——文件操作之读取文件

时间:2010-03-15 csdn 陈跃峰

11.3.1.3 读取文件

虽然前面介绍了流的概念,但是这个概念对于初学者来说,还是比较抽象的,下面以实际的读取文件为例子,介绍流的概念,以及输入流的基本使用。

按照前面介绍的知识,将文件中的数据读入程序,是将程序外部的数据传入程序中,应该使用输入流——InputStream或Reader。而由于读取的是特定的数据源——文件,则可以使用输入对应的子类FileInputStream或FileReader实现。

在实际书写代码时,需要首先熟悉读取文件在程序中实现的过程。在Java语言的IO编程中,读取文件是分两个步骤:1、将文件中的数据转换为流,2、读取流内部的数据。其中第一个步骤由系统完成,只需要创建对应的流对象即可,对象创建完成以后步骤1就完成了,第二个步骤使用输入流对象中的read方法即可实现了。

使用输入流进行编程时,代码一般分为3个部分:1、创建流对象,2、读取流对象内部的数据,3、关闭流对象。下面以读取文件的代码示例:

import java.io.*;
/**
* 使用FileInputStream读取文件
*/
public class ReadFile1 {
 public static void main(String[] args) {
  //声明流对象
  FileInputStream fis = null;
  try{
   //创建流对象
   fis = new FileInputStream("e:\\a.txt");
   //读取数据,并将读取到的数据存储到数组中
   byte[] data = new byte[1024]; //数据存储的数组
   int i = 0; //当前下标
   //读取流中的第一个字节数据
   int n = fis.read();
   //依次读取后续的数据
   while(n != -1){ //未到达流的末尾
    //将有效数据存储到数组中
    data[i] = (byte)n;
    //下标增加
    i++;
    //读取下一个字节的数据
    n = fis.read();
   }

   //解析数据
   String s = new String(data,0,i);
   //输出字符串
   System.out.println(s);
   }catch(Exception e){
     e.printStackTrace();
   }finally{
       try{
         //关闭流,释放资源
         fis.close();
        }catch(Exception e){}
   }
 }
}

在该示例代码中,首先创建一个FileInputStream类型的对象fis:

fis = new FileInputStream("e:\\a.txt");

这样建立了一个连接到数据源e:\a.txt的流,并将该数据源中的数据转换为流对象fis,以后程序读取数据源中的数据,只需要从流对象fis中读取即可。

读取流fis中的数据,需要使用read方法,该方法是从InputStream类中继承过来的方法,该方法的作用是每次读取流中的一个字节,如果需要读取流中的所有数据,需要使用循环读取,当到达流的末尾时,read方法的返回值是-1。

在该示例中,首先读取流中的第一个字节:

int n = fis.read();

并将读取的值赋值给int值n,如果流fis为空,则n的值是-1,否则n中的最后一个字节包含的时流fis中的第一个字节,该字节被读取以后,将被从流fis中删除。