Java:为什么在读取文本文件的情况下\n 被认为是 2 个字符?

标签 java file count character reader

import java.io.*;

public class xxx {

public static void main(String[] args) throws IOException {
    FileReader fs = new FileReader("xxx.txt");
    int t = fs.read();
    int count = 0;

    while (t!=-1) {
        count++;
        t = fs.read();
    }
    System.out.println(count);

}

考虑到 xxx.txt 包含:

a
b b
cccd

我只是对为什么“下一行”被认为是 2 个字符感到困惑?我手动计算了 10 个字符(包括空格),但结果是 12。

谢谢。

最佳答案

  • 这是因为 windows 使用 2 个字符 \r\n 去换行即 \r(回车)和\n(换行符)
  • *nix(类 Unix)系统,如 BSD、Linux 仅使用 \n 换行
  • Mac 仅使用 \r

回车将光标移动到行首,而 \n 将光标移动到下一行。

引自维基百科(https://en.wikipedia.org/wiki/Newline):

  • LF: Multics, Unix and Unix-like systems (Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, and others
  • CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Oberon, Mac OS up to version 9, and OS-9
  • RS: QNX pre-POSIX implementation
  • 0x9B: Atari 8-bit machines using ATASCII variant of ASCII (155 in decimal)
  • CR+LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM OSes
  • LF+CR: Acorn BBC and RISC OS spooled text output.

因此得出结论,行编码因操作系统系列而异。

关于Java:为什么在读取文本文件的情况下\n 被认为是 2 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36760209/

相关文章:

mysql - mysql统计字段值的方法

Excel:如果n个单元格连续满足条件,有没有办法对n+1个单元格求和?

java - 64位操作系统中Jvm从哪里获取堆内存?

java - 如何创建文件目录并包含文件数组中的文件

java - 文件 API 导致 ANR

c++ - 将宏用于 fstream 文件输入作为类的一部分

java - 列出不同的元素,包括 Java Streams 的计数

JAVA:虚拟鼠标

java - 为什么这个按位运算不起作用?

java - 使用 IntelliJ IDE 设置 Maven '-Denvironment'