FileInputStream&FileOutputStream用法示例

FileReader、FileWriter只能够用来处理文本文件,但对于非文本文件(图片、视频、音乐等),这两个类就没有能力处理了。对于非文本文件,我们需要使用xxxInputStream、xxxOutputStream这些类来处理。

复制图片

try (
    FileInputStream fileInputStream = new FileInputStream("dir/1.jpg");
    FileOutputStream fileOutputStream = new FileOutputStream("dir/1_copyed.jpg")
) {
    byte[] bytes = new byte[1024];
    int len;
    while ((len = fileInputStream.read(bytes)) > -1) {
        fileOutputStream.write(bytes, 0, len);
    }
} catch (IOException e) {
    e.printStackTrace();
}

通用的文件复制功能

该方法可以复制任意类型的文件,不管是文本文件或其他类型的文件。原因:底层存储都是二进制。

public class FileUtil {

    public static void copy (File src, File dst) throws IOException {
        try (
                FileInputStream fileInputStream = new FileInputStream(src);
                FileOutputStream fileOutputStream = new FileOutputStream(dst)
        ) {
            byte[] bytes = new byte[1024];
            int len;
            while ((len = fileInputStream.read(bytes)) > -1) {
                fileOutputStream.write(bytes, 0, len);
            }
        } catch (IOException e) {
           throw e;
        }
    }
}

测试代码如下:

@Test
void test8 ()
{
    File src = new File("C:\迅雷下载\海贼王-480.mp4");
    File dst = new File("dir/1.mp4");

    long start = System.currentTimeMillis();

    try {
        FileUtil.copy(src, dst);
    } catch (IOException e) {
        e.printStackTrace();
    }

    System.out.println(System.currentTimeMillis() - start);  // 1857
}
Posted in: IO