2010-03-26 120 views
14

我有兩個java.io.File對象,文件1和文件2。我想將文件1中的內容複製到文件2。有沒有辦法做到這一點沒有我不必創建一個讀取文件1的方法和寫入到file2的Java IO到一個文件複製到另一個

+4

見http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java – TwentyMiles 2010-03-26 00:19:59

回答

24

不,沒有內置的方法來做到這一點。最接近你想要完成的任務是從FileOutputStreamtransferFrom方法,像這樣:

FileChannel src = new FileInputStream(file1).getChannel(); 
    FileChannel dest = new FileOutputStream(file2).getChannel(); 
    dest.transferFrom(src, 0, src.size()); 

而且不要忘了處理異常和關閉一切在finally塊。

+3

哇。你教過我。 – 2010-03-26 00:56:21

+0

此答案的更完整(正確)版本可在此處獲得:http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java/115086#115086。由於http://stackoverflow.com/users/92937/twentymiles上學我們大家。 – vkraemer 2010-03-26 03:20:19

+0

完整而高效的答案:https://gist.github.com/mrenouf/889747 – 2013-05-08 13:58:38

6

號每次長時間的Java程序員都有自己的效用帶,包括這種方法的標準方式。這是我的。

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(); 
    } 
} 
+0

沒有copyFileToInputStream? – 2010-03-26 00:35:21

+0

這是一個*摘錄*。 :) – 2010-03-26 00:56:01

21

如果你想偷懶,僥倖從Apache的IOCommons

寫最少的代碼使用 FileUtils.copyFile(src, dest)
+1

這是要走的路! – 2010-03-26 11:41:04

+1

我是最小代碼的粉絲。不知道爲什麼使用實用程序包是「懶惰」的。我喜歡StringUtils。 – 2014-02-18 20:32:36

6

由於Java 7您可以使用Java標準庫中的Files.copy()

您可以創建一個包裝方法:

public static void copy(String sourcePath, String destinationPath) throws IOException { 
    Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath)); 
} 

,可以通過以下方式使用:

copy("source.txt", "dest.txt"); 
0

的Java 7可以使用Files.copy()而且非常重要的是:待辦事項不要忘記創建新文件後關閉的OutputStream。

OutputStream os = new FileOutputStream(targetFile); 
Files.copy(Paths.get(sourceFile), os); 
os.close(); 
相關問題