首页 > 编程笔记 > Java笔记 阅读:89

Java FileInputStream和FileOutputStream类的用法(附带实例)

FileInputStream是 Java 中的文件输入流,FileOutputStream 是 Java 中的文件输出流,本节逐个讲解它们的用法。

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 运行结果

相关文章