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
}