java IO to copy one File to another
我有两个java.io.file对象file1和file2。我想把内容从文件1复制到文件2。有没有一种标准的方法可以做到这一点,而不需要我创建一个读取file1并写入file2的方法
不,没有内置的方法可以做到这一点。最接近您想要完成的是来自
1 2 3 | FileChannel src = new FileInputStream(file1).getChannel(); FileChannel dest = new FileOutputStream(file2).getChannel(); dest.transferFrom(src, 0, src.size()); |
不要忘记处理异常并关闭
如果你想懒惰地写最少的代码
FileUtils.copyFile(src, dest)
不,每个长时间的Java程序员都有自己的实用程序带,包括这样的方法。这是我的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public static void copyFileToFile(final File src, final File dest) throws IOException { copyInputStreamToFile(new FileInputStream(src), dest); dest.setLastModified(src.lastModified()); } public static void copyInputStreamToFile(final InputStream in, final File dest) throws IOException { copyInputStreamToOutputStream(in, new FileOutputStream(dest)); } public static void copyInputStreamToOutputStream(final InputStream in, final OutputStream out) throws IOException { try { try { final byte[] buffer = new byte[1024]; int n; while ((n = in.read(buffer)) != -1) out.write(buffer, 0, n); } finally { out.close(); } } finally { in.close(); } } |
自Java 7以来,您可以使用Java标准库中的EDCOX1 4。
可以创建包装方法:
1 2 3 | public static void copy(String sourcePath, String destinationPath) throws IOException { Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath)); } |
可通过以下方式使用:
1 | copy("source.txt","dest.txt"); |
在Java 7中,可以使用EDCOX1 OR 4,并且非常重要的是:在创建新文件之后,不要忘记关闭OuttoSt流。
1 2 3 | OutputStream os = new FileOutputStream(targetFile); Files.copy(Paths.get(sourceFile), os); os.close(); |
或者使用Google的guava库中的files.copy(file1,file2)。