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 写入文件的内容。

有谁知道如何解决上述问题?

4

1 回答 1

2

*Writer 类用于文本上下文并根据某些编码进行转换,默认情况下是标准平台编码。因此,您希望使用 a FileOutputStream而不是 a FileWriter来编写二进制文件格式。

此外,出于优化目的,您最终将希望使用 byte[] 缓冲区来读取和写入。

于 2013-10-09T22:50:06.737 回答