为什么我将\ r \ n \ n \ n作为换行符而不是\ r \ n作为Windows中的换行符

时间:2012-12-27 18:13:25

标签: java readfile

我有以下readfile()java函数来读取.htm文件

private String readfile(String inputDoc) throws IOException {
    FileInputStream fis = null;
    InputStreamReader isr = null;
    String text = null;
    //open input stream to file
    fis = new FileInputStream(inputDoc);
    isr = new InputStreamReader(fis, "UTF-8");
    StringBuffer buffer = new StringBuffer();
    int c;
    while( (c = isr.read()) != -1 ) {
        buffer.append((char)c);
    }
    text = buffer.toString();
    isr.close();
    return text;
}

以下是输入文档

的示例代码段
<?xml version="1.0" encoding="utf-8"?><html>

<head>

由于某种原因,从readfile()返回的文本字符串是<?xml version="1.0" encoding="utf-8"?><html>\r\r\n<head>

但我希望它是 <?xml version="1.0" encoding="utf-8"?><html>\r\n<head>

在Windows \ r \ n

中列出了here新行字符

我在Windows 7上的IntelliJ Idea中运行了上述功能。(IDEA默认编码设置为UTF-8)

有谁知道为什么我从换行的readfile(String inputDoc)函数得到这个奇怪的结果

2 个答案:

答案 0 :(得分:6)

当您编写\n时,它会在Windows上扩展为\r\n以便于移植。这样,无论您运行什么操作系统,都可以获得正确的结果而无需其他代码:Windows上的\r\n或Unix上的\n。看起来您正在以二进制模式读取输入(在文本模式下,相反的扩展发生在相反的情况:输入中的任何\r\n变为\n,因此您再次不必担心操作系统),所以你看到了\r。然后,当您编写\n时,它会扩展为\r\n,留下两个\r

答案 1 :(得分:3)

你得到这个,因为它在输入文件中是这样的。尝试在十六进制编辑器中打开输入文件以进行验证。