java - 从 getResourceAsStream 读取文件省略换行符

标签 java

我正在从 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/

相关文章:

Java 文件 I/O - 文本文件 - 如何编辑某些内容?

Java 8 比较来自同一个列表的对象(数组索引越界)

java - Aspectj 匹配切入点而不关心方法级注释参数

java - AWS S3 上传陷入 WAITING 状态

java - 为什么我在 Java 中收到 NoClassDefFoundError 错误?

java - 无法将外部 .jar 库导入 Eclipse 上的 Android 项目

java - 如何使用 java/j2ee 将 rss 转换为 html?

java - Iterable 接口(interface)是否有任何关于多次使用的官方契约(Contract)?

java - 如何通过抽屉导航(android的新支持库)切换 fragment ?

java - 如何消除 JavaFX 中的警报?