2011-09-15 20 views
4

getResourceAsStreamからリソースを読み込み、すべてのテキストをStringBuilderに追加して新しいファイルに書き出します。しかし、テキストは改行なしで戻ってきます。 私は同じことをするが、getResourceAsStreamを使わないでファイルを読むと、完全に動作する。getResourceAsStreamからファイルを読み込むと改行が省略されます

コードは、次のようになります。

 InputStream styleFile = this.getClass().getResourceAsStream(
      "/path/path/path/some.css"); 

    BufferedReader bufRead = new BufferedReader(new InputStreamReader(styleFile)); 


    StringBuilder builder = new StringBuilder(); 
    int nextchar; 
    while ((nextchar = bufRead.read()) != -1) 
    { 
     builder.append((char)nextchar); 

    } 
    FileWriter outFile; 
    try 
    { 
     outFile = new FileWriter(newStyleFile); 
    } 
    catch (IOException e) 
    { 
     //Log 
    } 

    PrintWriter out = new PrintWriter(outFile); 
    out.write(builder.toString()); 
    out.close(); 
+1

をあなたはどの 'styleFile'変数を使用することはありません'getResourceAsStream'を使用して取得します。これはおそらくあなたが投稿したスニペットのエラーです。 – dm3

+0

ああ、そうです。今すぐ修正しました – Nik

+0

あなたは文字単位の読み方を行単位で置き換えようとしました: '(nextLine = bufRead.readLine())!= null'? –

答えて

2

おはBufferedReader.readLineを使用している場合は、()には、新しい行の文字件まですべてを読み込みます。改行文字は、取得した文字の末尾に追加されません。 BufferedReader.read()のように、新しい行の文字をトークン化するようになりました。私は新しい行がスキップされる理由をあまり確かめません。 JDKのソースはこのようなものがあります:あなたのケースのためにとにかく

public int read() throws IOException { 
synchronized (lock) { 
    ensureOpen(); 
    for (;;) { 
    if (nextChar >= nChars) { 
     fill(); 
     if (nextChar >= nChars) 
     return -1; 
    } 
    if (skipLF) { 
     skipLF = false; 
     if (cb[nextChar] == '\n') { 
     nextChar++; 
     continue; 
     } 
    } 
    return cb[nextChar++]; 
    } 
} 
} 

..改行を出力するプログラムを書くことはそのシンプルな...

BufferedReader br=new BufferedReader(new InputStreamReader(styleFile)); 
StringBuilder builder = new StringBuilder(); 
String line=null; 
while((line=br.readline())!=null){ 
    builder.append(line).append("\n"); 
} 

// then write to the new file... 
関連する問題