一、什么是文件流?
文件是指产生的数据保存在硬盘上的容器,文件流就是以流的方式读写文件中的数据。Java提供了几个用于访问文件的流类,包括FileInputStream、FileOutputStream、FileReader和FileWriter。其中FileInputStream和FileOutputStream主要是用来读写二进制文件,而FileReader和FileWriter主要是用来读写文本文件。
二、使用FileInputStream读取文件的内容
FileInputStream类是用来读取文件内容的,它继承自InputStream类,所以它可以使用InputStream类中的方法来读取数据。FileInputStream的构造方法如下:
public FileInputStream(String name) throws FileNotFoundException
public FileInputStream(File file) throws FileNotFoundException
在实例化FileInputStream对象时,必须传递文件名或文件对象作为参数。FileInputStream的read()方法每次读取一个字节,如果返回-1表示读取到文件末尾。使用FileInputStream读取文件的示例代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.txt");
int data;
while ((data = fis.read()) != -1) {
System.out.print((char)data);
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的代码使用FileInputStream读取test.txt文件中的内容,并打印到控制台上。
三、使用BufferedInputStream提高文件读取的效率
如果需要读取大文件中的数据,使用FileInputStream每次只读取一个字节的方式效率会很低,因此可以使用缓冲区提高读取效率。Java提供了BufferedInputStream类,它可以将底层的输入流包装成一个带缓冲区的输入流,从而提高读取数据的效率。
BufferedInputStream有两个构造方法,分别是:
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in, int size)
第一个构造方法会使用默认的缓冲区大小,而第二个构造方法可以指定缓冲区的大小。
使用BufferedInputStream读取文件的示例代码如下:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class BufferedInputStreamDemo {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
int data;
while ((data = bis.read()) != -1) {
System.out.print((char)data);
}
bis.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的代码先使用FileInputStream读取test.txt文件,并将其包装为BufferedInputStream,然后使用BufferedInputStream读取文件中的内容并打印到控制台上。
四、使用FileReader读取文本文件内容
FileReader类是用来读取文本文件内容的,它继承自InputStreamReader类,可以使用InputStreamReader类中的方法来读取数据。
FileReader的构造方法如下:
public FileReader(String fileName) throws FileNotFoundException
public FileReader(File file) throws FileNotFoundException
使用FileReader读取文本文件的示例代码如下:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("test.txt");
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
fr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的代码使用FileReader读取test.txt文件中的内容,并打印到控制台上。
五、使用BufferedReader提高文本文件读取的效率
如果需要读取大文本文件中的数据,使用FileReader每次只读取一个字符的方式效率会很低,因此可以使用缓冲区提高读取效率。Java提供了BufferedReader类,它可以将底层的Reader对象包装成一个带缓冲区的Reader,从而提高读取数据的效率。
BufferedReader有两个构造方法,分别是:
public BufferedReader(Reader in)
public BufferedReader(Reader in, int size)
第一个构造方法会使用默认的缓冲区大小,而第二个构造方法可以指定缓冲区的大小。
使用BufferedReader读取文本文件的示例代码如下:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的代码先使用FileReader读取test.txt文件,并将其包装为BufferedReader,然后使用BufferedReader按行读取文件中的内容并打印到控制台上。
六、小结
本文介绍了Java文件流读取的基本用法,包括使用FileInputStream、BufferedInputStream、FileReader和BufferedReader来读取文件中的数据。其中,使用缓冲区可以提高读取文件的效率。