Java中复制文件的三种方法 博客分类: Java javaFiles.copy文件复制
程序员文章站
2024-03-19 22:06:40
...
尽管Java提供了java.io.File类来处理Java中文件操作,但是,在Java 7 之前,JDK并没有提供与文件复制相关的方法,而当项目中涉及到与文件相关的操作时,文件复制往往是不可或缺的。下面是几种常见的文件复制方法的。
具体可参考国外哥们写的文章
http://examples.javacodegeeks.com/core-java/io/file/4-ways-to-copy-file-in-java/
1、利用FileStreams复制文件
这是大概是一种比较经典、使用最为广泛的的复制文件的方法了。只要利用FileInputStream从一个文件中读取一定的的字节数,再利用FileOutputStream写入另外一个文件就可以了。
这种方法的弊端在于,当要复制大型文件时,因为要不断的进行读写操作,在效率方面,还是不那么好。
2、 利用Java 7 的新特性:Files.copy
从JDK 1.7 开始,与文件复制有关的工作,终于不用像上面那样做了,Oracle公司终于将这个方法给封装了起来,但是本质上和上面的方法还是一样的。
好奇心驱使,看了下源代码,发现这个方法的最终实现和我们上面的是一样的,有点区别的就是封装的copy方法缓存设置的大了一些,为8192,另外,这种方法是极力推荐的,因为它比其他两种方法效率都高;
3、利用java.nio.channels.FileChannel类进行文件复制
这种方法一般被认为效率是比较高的,但是我查看了下源代码,发现竟然没看懂。幸运的是,该方法使用起来还是相当的简单方便。
具体可参考国外哥们写的文章
http://examples.javacodegeeks.com/core-java/io/file/4-ways-to-copy-file-in-java/
1、利用FileStreams复制文件
这是大概是一种比较经典、使用最为广泛的的复制文件的方法了。只要利用FileInputStream从一个文件中读取一定的的字节数,再利用FileOutputStream写入另外一个文件就可以了。
private static void copyFileUsingFileStreams(File source, File dest) throws IOException { InputStream input = null; OutputStream output = null; try { input = new FileInputStream(source); output = new FileOutputStream(dest); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) > 0) { output.write(buf, 0, bytesRead); } } finally { input.close(); output.close(); } }
这种方法的弊端在于,当要复制大型文件时,因为要不断的进行读写操作,在效率方面,还是不那么好。
2、 利用Java 7 的新特性:Files.copy
从JDK 1.7 开始,与文件复制有关的工作,终于不用像上面那样做了,Oracle公司终于将这个方法给封装了起来,但是本质上和上面的方法还是一样的。
private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); }
好奇心驱使,看了下源代码,发现这个方法的最终实现和我们上面的是一样的,有点区别的就是封装的copy方法缓存设置的大了一些,为8192,另外,这种方法是极力推荐的,因为它比其他两种方法效率都高;
private static long copy(InputStream source, OutputStream sink) throws IOException { long nread = 0L; byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n = source.read(buf)) > 0) { sink.write(buf, 0, n); nread += n; } return nread; }
3、利用java.nio.channels.FileChannel类进行文件复制
这种方法一般被认为效率是比较高的,但是我查看了下源代码,发现竟然没看懂。幸运的是,该方法使用起来还是相当的简单方便。
private static void copyFileUsingFileChannels(File source, File dest) throws IOException { FileChannel inputChannel = null; FileChannel outputChannel = null; try { inputChannel = new FileInputStream(source).getChannel(); outputChannel = new FileOutputStream(dest).getChannel(); outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); } finally { inputChannel.close(); outputChannel.close(); } }
上一篇: 笔试编程题汇总(2)
下一篇: phxpaxos编译 完整流程
推荐阅读
-
Java中复制文件的三种方法 博客分类: Java javaFiles.copy文件复制
-
Xcopy命令复制文件夹下所有文件到指定目录 博客分类: 学习心得 Java编程Blog批处理命令
-
Java追加内容到文件末尾的几种常用方法 博客分类: Java追加内容到文件末尾的几种常用方法 javaio
-
提高文件复制性能之多线程复制文件 博客分类: java基础 ThreadRandomAccessFileFileChannel
-
更正--提高文件复制性能 博客分类: java基础
-
java中载入properties文件的方法 博客分类: core java javaproperties载入文件
-
java中载入properties文件的方法 博客分类: core java javaproperties载入文件
-
java中判断字符串是否为数字的三种方法 博客分类: java java
-
java中判断字符串是否为数字的三种方法 博客分类: java java
-
java复制文件夹中的所有文件和文件夹到另一个文件夹中