Java FileInputStream和FileOutputStream类的用法(附带实例)
FileInputStream是 Java 中的文件输入流,FileOutputStream 是 Java 中的文件输出流,本节逐个讲解它们的用法。
FileInputStream 类常用的构造方法如下:
通过字节输入流读取数据时,应该首先设定输入流的数据源,然后创建指向这个数据源的输入流,接着从输入流中读取数据,最后关闭输入流。
FileOutputStream 类常用的构造方法如下:
通过字节输出流输出数据时,应该首先设定输出流的目的地,然后创建指向这个目的地输出流,接着向输出流中写入数据,最后关闭输出流。
【实例 1】通过键盘接收一行数据,并写入磁盘的指定文件中。

图 1 运行结果
【实例 2】通过 FileInputStream 类和 FileOutputStream 类复制文件。

图 2 运行结果
Java FileInputStream类
Java 中的 FileInputStream 类继承自 InputStream 类,通过字节的方式读取文件,适合读取所有类型的文件(图像、视频和文本文件等)。FileInputStream 类常用的构造方法如下:
public FileInputStream(File file) throws FileNotFoundException public FileInputStream(String name) throws FileNotFoundException这两个方法分别通过给定的 File 对象和文件名字符串创建 FileInputStream 对象。如果文件不存在或出现其他问题,就会抛出 FileNotFoundException 异常,需要捕获处理。
通过字节输入流读取数据时,应该首先设定输入流的数据源,然后创建指向这个数据源的输入流,接着从输入流中读取数据,最后关闭输入流。
Java FileOutputStream类
FileOutputStream 类是 OutputStream 类的常用子类,通过字节的方式将数据写到文件中,适合所有类型的文件。FileOutputStream 类常用的构造方法如下:
public FileOutputStream(File file) throws IOException public FileOutputStream(String name) throws IOException public FileOutputStream(File file,boolean append) throws IOException public FileOutputStream(String name,boolean append) throws IOException在创建输出流时,如果文件不存在或出现其他问题,就会抛出 IOException 异常,需要捕获处理。
通过字节输出流输出数据时,应该首先设定输出流的目的地,然后创建指向这个目的地输出流,接着向输出流中写入数据,最后关闭输出流。
实例演示
下面通过实例演示 FileInputStream 类和 FileOutputStream 类的应用。【实例 1】通过键盘接收一行数据,并写入磁盘的指定文件中。
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class Example10_8 { public static void main(String[] args) { InputStream in = System.in; System.out.println("请输入一行数据:"); byte[] b = new byte[64]; FileOutputStream out = null; try { // 读入数据,存入字节数组 b 中 in.read(b); // 创建文件字节输出流对象 out,指向指定的文件 out = new FileOutputStream("D:\\chapter10\\fileiotest\\text1.txt"); // 写入输出流中 out.write(b); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } if (out != null) { out.flush(); out.close(); } } catch (IOException e) { e.printStackTrace(); } } } }运行结果如下图所示。在控制台中,通过键盘输入“hello world”,在指定文件 text1.txt 中保存此字符串:

图 1 运行结果
【实例 2】通过 FileInputStream 类和 FileOutputStream 类复制文件。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo{ public static void main(String[] args) throws IOException { // 创建文件输入流用于读取源文件 FileInputStream fis = new FileInputStream( "D:\\chapter\\chapter10\\src\\Example10_9.java"); // 创建文件输出流,复制新文件 FileOutputStream fos = new FileOutputStream( "D:\\chapter10\\back_Example10_9.java"); // 创建一个10KB的缓存区 byte[] data = new byte[1024 * 10]; int len; long s = System.currentTimeMillis(); // 从源文件中循环读取信息并存入新文件中 while ((len = fis.read(data)) != -1) { fos.write(data, 0, len); } // 返回当前时间(以毫秒为单位) long e = System.currentTimeMillis(); // 求复制文件内容花费的时间 System.out.println("复制花费的时间:" + (e - s)); // 关闭输入流 fis.close(); // 关闭输出流 fos.close(); } }运行结果如下图所示。指定的文件夹中出现了复制的文件,复制内容花费 2 毫秒。

图 2 运行结果