2013-10-09 73 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[]缓冲区来读取和写入以达到优化目的。

相关问题