2013-10-09 160 views
1

目前我正在試圖解決一個問題,對於閱讀和寫在Java中的文件。如何複製二進制文件的字節爲字節

所以任務是,我直接從我想要讀取的文件的InputStream對象(我沒有實際的文件只是InputStream對象)並從此對象中重新創建原始文件。

我試圖從文件中逐字節地讀取數據並將其寫入文件中。

但它只適用於.txt文件,不適用於doc,docx,PDF文件。我沒有檢查過非.txt格式的其餘部分,但我希望它適用於所有格式。

對於非txt格式文件正在生成,但其中的內容不可見。

所以我的問題是如何使用InputStream對象爲所有類型的文件格式重新創建文件。

下面是我一直在使用寫入文件的示例代碼。

File file = new File("/home/sumit/Documents/newAbc.docx"); 
    File fileAbc = new File("/home/sumit/Documents/abc.docx"); 
    InputStream inputStream = new FileInputStream(fileAbc); // this is just for this sample code snippet but orginally I already have InputStream object. 
    // if file doesnt exists, then create it 
    if (!file.exists()) { 
     file.createNewFile(); 
    } 

    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
    BufferedWriter bw = new BufferedWriter(fw); 

    int data = inputStream.read(); 
    while(data != -1) { 
     //do something with data... 
     bw.write(data);  
     data = inputStream.read(); 

    } 
    inputStream.close(); 
    bw.close(); 

上面的代碼得到了正確的編譯和執行,但創建的文件沒有正確顯示內容。

搜索時,我發現我不能直接讀取DOC,PDF等從這裏:Reading .docx file in java

http://poi.apache.org/ POI庫我沒有找到任何東西,會告訴我如何寫入使用InputStream的文件。

有誰知道如何的問題上面可以解決?

+1

可能重複的[如何在Java中讀取Doc或Docx文件?](http://stackoverflow.com/questions/7102511/how-read-doc-or-docx-file-in-java) –

+0

它是如何複製與http://stackoverflow.com/questions/7102511/how-read-doc-or-docx-file-in-java它只是讀取文件並將其打印在控制檯中,但我想寫入文件而不是相同原始文件的格式,這不僅適用於doc,docx格式,也適用於其他格式。 – Sumit

+2

* Writer類用於文本上下文,並根據某種編碼進行轉換。因此,您希望使用'FileOutputStream'而不是'FileWriter'。此外,你最終會想使用一個'byte []'緩衝區來讀寫。 – mkl

回答

1

*Writer類用於文本上下文,並根據某種編碼(默認爲標準平臺編碼)進行轉換。 因此,你想用一個FileOutputStream而不是FileWriter攜手譜寫二進制文件格式。

此外,您最終會希望使用一個byte[]緩衝區來讀取和寫入以達到優化目的。

相關問題