2011-10-13 66 views
4

我有複製文件的方法如下:無聲錯誤複製文件時

public static void nioCopy(File source, File destination) { 
    FileInputStream fis = null; 
    FileOutputStream fos = null; 
    FileChannel input = null; 
    FileChannel output = null; 
    try { 
     fis = new FileInputStream(source); 
     fos = new FileOutputStream(destination); 

     input = fis.getChannel(); 
     output = fos.getChannel(); 

     input.transferTo(0, input.size(), output); 

    } catch (FileNotFoundException ex) { 
     Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't find either of input/output files.", ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't open either of input/output file for reading/writing", ex); 
    } finally { 
     try { 
      fis.close(); 
      fos.close(); 
      input.close(); 
      output.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Error closing streams", ex); 
     } 

    } 
} 

而且我使用拷貝文件,但有時我得到一個無聲的錯誤或不確定的行爲或者我只是不知道如何解釋一下,這是我所得到的:

這裏是我的源:

-rw-r--r-- 1 nb9 team92 3.1G 2011-10-13 16:31 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz 

這裏是目的地:

-rw-r--r-- 1 nb9 team92 2.0G 2011-10-13 16:49 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz 

我沒有得到任何的異常而執行這個過程,並通過它的外觀一切都應該是成功的,但後來當我開始解包文件獲取:

java.io.EOFException的:意外結束ZLIB輸入流

很明顯,目標是1 gig關閉原始標記。

唯一的特點是這兩個文件都在非常有繁忙的光澤文件系統有可能這是一些有趣的事情嗎?

+0

嘗試趕上一個'Exception',看到什麼出來,因爲現在這不是一個'FileNotFoundException'或任何錯誤的' IOException'將會保持沉默。 – Toomai

+1

另外,'transferTo'具有返回值。覈實。 – Mat

+0

問題:您確定目標文件系統可以處理大於2GB的文件嗎?前一段時間我試着把一個大文件「加密」到一個FAT32 FS,但是拷貝沒有完成,但是我沒有收到任何錯誤。 – Augusto

回答

2

截斷2Gb的事實讓我感到懷疑。我搜索了它,它看起來像一個issue with nio。也可能是目標文件系統允許最大2Gb文件。

Java NIO: Buffers

目前,緩衝器大小被限制爲2GB(可在一個int表示的最大正數。更新的計劃針對Java 7將允許大緩衝器(與大小和索引反正持有長)

,只是要確定:

  • 你可以嘗試將它複製同一文件系統,如果你有SP高手?
  • 你可以試試Apache Commons IO FileUtils.copyFile()?似乎他們fixed this issue
  • 如果你可以升級,嘗試使用Java 7,因爲是出已經
+0

我剛剛查看了FileUtils.CopyFile的來源,它看起來非常健壯。我會嘗試一下,看看問題是否依然存在。 – LordDoskias