2015-03-31 86 views
0

我一直試圖從NFS掛載以Java方式遞歸複製一個目錄到本地文件系統。我首先嚐試在Apache Utils中使用FileUtils。遺憾的是,它沒有遞歸複製(遍歷子目錄等),所以我不得不回到繪圖板。我聽說其中的一些操作在跨設備時很「挑剔」。當時我建議嘗試使用Linux命令,所以我試着這樣做:無法從Java中的NFS掛載複製目錄

Process process = new ProcessBuilder() 
        .command("cp -R " + source.getAbsolutePath() + " " + dest.getAbsolutePath()) 
        .start(); 

process.waitFor(); 

可悲的是拋出「沒有這樣的文件或目錄」的響應,我耳光一些調試在那裏,再次嘗試。即使我得到「沒有這樣的文件或目錄」,我的調試表明,源目錄和目標目錄都存在,以及在手動檢查它們是否存在之後。

+0

如果任一路徑有空格,可能會遇到問題。儘管這樣做有點麻煩,但您可以將引號添加到每個路徑參數的周圍。我可以看到導致沒有這樣的文件或目錄錯誤。或者,轉義空格和其他特殊字符。不過,我會找到比使用命令更好的東西。 – 2015-03-31 04:46:04

+0

目錄或文件中沒有空格。 – Mazen 2015-03-31 04:47:55

回答

0

好的,所以我決定寫我自己的實現,奇怪的是它的工作。可悲的是,我很少知道爲什麼這對FileUtils有效。這是我寫的:

private void copy(File source, File destination) throws IOException { 
    if (source.isDirectory()) { 
     if (!destination.exists()) { 
      destination.mkdir(); 
     } 

     if (destination.isFile()) { 
      destination.delete(); 
      destination.mkdir(); 
     } 

     for (File src : source.listFiles()) { 
      File dest = new File(destination, src.getName()); 

      copy(src, dest); 
     } 
    } else { 
     destination.createNewFile(); 

     FileInputStream input = new FileInputStream(source); 
     FileOutputStream out = new FileOutputStream(destination); 
     byte[] buffer = new byte[2048]; 
     int l; 

     while ((l = input.read(buffer)) > 0) { 
      out.write(buffer, 0, l); 
     } 

     input.close(); 
     out.close(); 
    } 
} 
相關問題