2016-03-29 7 views
2

私はtxtファイルをStringバッファに読み込み、OutputStreamWriterを使ってその内容をワードドキュメントに書き出しています。書類を書いているときの書式設定

問題は、書式設定がドキュメントに保持されていないことです。スペースと改行はテキストファイルのように保持されません。 txtファイルは、スペース、ページ区切り、およびタブで正しくフォーマットされます。私は単語の文書のtxtを複製したい。どのように同じ書式を保持できるのかをお勧めします。ファイルへのリンクはhttp://s000.tinyupload.com/index.php?file_id=09876662859146558533です。

これはサンプルコードです:

private static String readTextFile() { 
    BufferedReader br = null; 
    String content = null; 
    try { 
     br = new BufferedReader(new FileReader("ORDER_INVOICE.TXT")); 
     StringBuilder sb = new StringBuilder(); 
     String line = br.readLine(); 

     while (line != null) { 
      sb.append(line); 
      line = br.readLine(); 
      sb.append(System.lineSeparator()); 
     } 
     content = sb.toString(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return content; 
} 

private static void createDocument(String docName, String content) { 
    FileOutputStream fout = null; 
    try { 
     fout = new FileOutputStream(docName); 
     OutputStreamWriter out = new OutputStreamWriter(fout); 
     out.write(content); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
+0

OutputStreamWriterは特に「Word」ドキュメントにどのように書き込むのですか? Microsoft Word文書を作成するライブラリを使用していますか、単にファイルに.DOC拡張子を付けるだけですか? – slipperyseal

+1

を開始すると、すべての行がStringBuilderに読み込まれますが、改行は追加されません。 readLine()は、キャリッジリターンまたはラインフィードのない文字列を返します。だから、sb.append(行)を試してみてください。続いてsb。追加( '\ n'); – slipperyseal

+0

public String readLine()throws IOException テキスト行を読み取ります。行は、改行( '\ n')、復帰( '\ r')、改行の直後に続く改行のいずれかで終了すると見なされます。 戻り値: 行の終了文字が含まれていない行の内容を含む文字列。ストリームの終わりに達した場合はnull – Megha

答えて

0

は次のように)(あなたのreadTextFileを変更しようとしてみてください。

BufferedReader br = null; 
    String content = null; 
    try { 
     br = new BufferedReader(new FileReader("ORDER_INVOICE.TXT")); 
     StringBuilder sb = new StringBuilder(); 
     String line = br.readLine(); 
     while(line != null) { 
      content += line + "\n"; 
      line = br.readLine(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return content; 

実際にJava 7を使用している場合は、コード内の行数を減らすためにtry-with-resourcesを使用できます。

+0

実際には、私はすでにsb.append(System.lineSeparator())を行っています。問題は、文書内の行が次の行に移動することです。テキストファイルと同じ書式になるようにしたい。 – Megha

+0

あなたの世話はあなたの言うことを表示しません。 sb.append(System.lineSeparator()) – PHJCJO

0

\ n文字を印刷しないようにしてください。 Windowsの場合は\ r \ nを使用してください - プラットフォーム間で行区切り記号が異なることに注意してください。

より信頼性の高い方法は、コメント欄での議論の後 How to write new line in Java FileOutputStream

を参照してください、PrintWriterを使用することです:

  • ソースファイルは、UNIXの行が出力ファイルは、Windowsを持っていると予想される
  • を壊しています
  • ソースファイルから0x0c(フォームフィード - プリンタの次のページに移動)を削除する必要があります。これは印刷不可能なためです。

    public static void main(String[] args) throws IOException { 
        String content = new String(Files.readAllBytes(Paths.get("f:\\order_invoice.txt"))) 
         .replace("\u000c",""); 
    
        PrintWriter printWriter=new PrintWriter(new FileWriter("f:\\new_order_invoice.txt")); 
    
        for (String line:content.split("\\n")) { 
         printWriter.println(line); 
        } 
    
        printWriter.close(); 
    } 
    

だから:それは

  • がフォームフィード(0x0Cの、ユニコードu000c)を取り除く文字列の中にあるよう

    • は、UNIXで文字列を分割ファイルを読みます改行\ n
    • プラットフォームのデフォルトの行末を使用するPrintWriter、つまりwindows cr-lfを使用して、1行ずつ書き出します。

    実際にこれを行うには、regexpを使ってファイル全体を表す文字列のunix行の終わりを文字列に置き換え、ファイル全体を1つに書き出しますライン。しかし、このプレゼンテーションの解決策は、常にプラットフォームのネイティブラインセパレータを使用するので、おそらくビットです。

    enter image description here

  • +0

    私は\ n文字を使用していません。 – Megha

    +0

    申し訳ありませんが、私の悪い、間違ったスクロール:) PrintWriterを使用して、単純な自己コンテナの例をまとめる。 http://tutorials.jenkov.com/java-io/printwriter.html printlnメソッドを使用して、プラットフォーム固有の改行を含む行を記述します。それは働いています:) –

    +0

    私は問題だと思う私はテキストファイルの内容の前にスペースを比較すると、それはテキストパッドで62バイトであり、ワードドキュメントでも62スペースを示しますが、コンテンツは次の行に行きます。 – Megha