一、文件流概述
在Java中,文件是指包含数据的持久性存储。当我们想要读取或写入文件时,就需要使用文件流。文件流是一种用于读写文件数据的IO流,是字节流和字符流的衍生。
文件输入流用于从文件读取数据,文件输出流用于将数据写入文件。Java提供了FileInputStream和FileOutputStream类作为文件流的实现,它们的用法和字节流、字符流的操作方式非常相似。
//读取文件数据 FileInputStream fis = new FileInputStream("test.doc"); byte[] bytes = fis.readAllBytes(); String data = new String(bytes); //写入文件数据 FileOutputStream fos = new FileOutputStream("output.doc"); String data = "这是要写入文件的数据"; byte[] bytes = data.getBytes(); fos.write(bytes);
二、字节流读取文件
字节流(InputStream和OutputStream)是按照字节(二进制数据)方式进行读写操作的IO流。使用字节流读取文件时,会读取每个字节并将它们转换成Java的原始类型。
其中,FileInputStream类是字节流输入类,它继承自InputStream类。FileInputStream实现了一个文件输入流,可以从文件系统中的文件读取字节。
下面是一个使用字节流读取文件的示例:
FileInputStream fis = new FileInputStream("test.txt"); int data; while((data = fis.read()) != -1) { System.out.print((char) data); } fis.close();
在该示例中,我们首先创建一个FileInputStream对象来读取test.txt文件。然后使用while循环来不断读取文件中的数据,并将每个字节转换成char类型输出。最后使用fis.close()关闭输入流。
三、字符流读取文件
字符流是按照字符(Unicode字符集)方式进行读写操作的IO流。使用字符流读取文件时,会将字节数据转换成字符数据。
其中,FileReader是字符流读取类,它继承自InputStreamReader类。FileReader可以从文件中读取字符流数据。
下面是一个使用字符流读取文件的示例:
FileReader fr = new FileReader("test.txt"); int data; while((data = fr.read()) != -1) { System.out.print((char) data); } fr.close();
在该示例中,我们首先创建一个FileReader对象来读取test.txt文件。然后使用while循环来不断读取文件中的数据,并将每个字符输出。最后使用fr.close()关闭输入流。
四、BufferedReader读取文件
BufferedReader是Java中经常使用的高效字符缓冲流,使用它读取文件可以减少系统的IO操作次数,提高程序的执行效率。
在Java中,我们通常使用BufferedReader.readLine()方法读取文件中的一行数据。
下面是一个使用BufferedReader读取文件的示例:
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();
在该示例中,我们首先创建一个FileReader对象,然后使用BufferedReader作为输入流,使用readLine()方法读取文件中的一行数据并输出,直到文件结束。最后使用br.close()和fr.close()关闭输入流。
五、FileInputStream和BufferedInputStream读取文件
FileInputStream是Java中常用的字节流,而BufferedInputStream是常用的高效缓冲字节流。
使用BufferedInputStream读取文件时,可以提高程序的执行效率,避免过多的IO操作。
下面是一个使用FileInputStream和BufferedInputStream读取文件的示例:
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();
在该示例中,我们首先创建一个FileInputStream对象,然后使用BufferedInputStream作为输入流,使用read()方法读取文件中的字节数据,并将每个字节转换成char类型输出,直到文件结束。最后使用bis.close()和fis.close()关闭输入流。
六、小结
本文介绍了Java中文件流的基本概念,以及使用FileInputStream、FileReader、BufferedReader、BufferedInputStream等类来实现对文件的读取。
在实际开发中,我们可以根据需求来选择合适的流来读取文件。如果需要读取二进制文件,则使用字节流会更加合适;如果需要读取文本文件,则使用字符流和缓冲流会提高程序性能。