2011-09-15 32 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...