我正在从 getResourceAsStream 读取资源,将所有文本添加到 StringBuilder 并将内容写入新文件。但是,返回的文本没有换行符。 当我做同样的事情,但在没有 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();
最佳答案
如果您使用的是 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...
关于java - 从 getResourceAsStream 读取文件省略换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428102/