1

私は現在、Java でのファイルの読み取りと書き込みに関する 1 つの問題を解決しようとしています。

したがって、タスクは、読み取りたいファイルの InputStream オブジェクトを直接取得し (実際のファイルは InputStream オブジェクトだけではありません)、このオブジェクトから元のファイルを再作成することです。

ファイルからバイト単位でデータを読み取り、別のファイルに同じものを書き込もうとしていました。

ただし、doc、docx、PDF ファイルではなく、.txt ファイルに対してのみ機能します。残りの .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 クラスはテキスト コンテキスト用であり、デフォルトで標準のプラットフォーム エンコーディングである何らかのエンコーディングに従って変換を行います。したがって、 バイナリ ファイル形式を書き込むには、FileOutputStreamではなく を使用する 必要があります。FileWriter

さらに、最終的には byte[] 、最適化のためにバッファを使用して読み書きする必要があります。

于 2013-10-09T22:50:06.737 に答える