2011-06-06 79 views
1

希望有人以前看過。我試圖將所有目錄內容從源複製到不同的目錄,爲此我開始使用Commons FileUtils.copyDirectorytoDirectory方法(File src,File dest)。該代碼非常簡單:文件複製後的目錄大小不匹配

public static void copyDirtoDir(String src, String dest) { 
    File s = new File(src); 
    File d = new File(dest); 
    try { 
     FileUtils.copyDirectoryToDirectory(s, d); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

在Linux上運行這個測試,我運行的應用程序的JAR和從命令行傳遞的src和dest字符串。問題是,當我在執行後檢查生成的目錄大小時,大小有很大差異(複製目錄的大小是原始大小的兩倍 - 使用'du -sh'進行檢查)。

我然後簡單地試圖與nio.FileChannels,如下:

public static void copyFile(File in, File out) throws IOException { 
    FileChannel source = new FileInputStream(in).getChannel(); 
    FileChannel destination = new FileOutputStream(out).getChannel(); 

     source.transferTo(0, source.size(), destination); 

    source.close(); 
    destination.close(); 
} 

呼喚目錄中的所有文件此方法。由此產生的尺寸也是原來尺寸的兩倍左右。如果我列出目錄的內容,它們是一樣的。

是否有任何缺失的參數或可能導致此大小差異的東西?

+1

你確定你沒有運行兩次測試,在dest目錄下創建重複項(不知何故)? – 2011-06-06 14:01:00

+0

也許在複製操作所在的目錄中存在軟鏈接或硬鏈接,而不僅僅是複製鏈接? – Sven 2011-06-06 14:03:40

+0

@matt b - 我確定:),@Sven - 聽起來可能,現在檢查... – Dan 2011-06-06 14:04:53

回答

1

不知道發生了什麼事,但你可以use diff to diff directories。我相信這將很容易地消除分歧。

+0

此命令報告沒有區別。如果我列出來自兩個文件都是一樣的:( – Dan 2011-06-06 16:27:04

1

javadoc表示copyDirectoryToDirectory將源目錄及其所有內容複製到指定目標目錄中具有相同名稱的目錄中。

沒有看到你的目錄結構,我猜這可能會導致雙重數據。任何你不使用簡單的FileUtils.copyDirectory()的理由?

+0

不是真的,但試着用它也返回相同的結果 – Dan 2011-06-06 16:27:24