当我使用workWithFileReader()方法时,尝试获取此文档中的字符数,并得到结果:547。 当我使用workWithBufferedReader()方法时,尝试获取此文档中的字符数,并得到结果:526。
我不确定哪个正确,所以我用单词来获取字符(包括空格),并得到答案:526。
请帮助举例说明它们之间的区别。
public static void workWithFileReader() {
int i;
long len; //
int countChar = 0; //read byte +1
int countLine = 0; //get char(10) +1
File file = new File("/Users/wayne/Downloads/Sample.txt");
len=file.length();
try {
FileReader fr = new FileReader(file);
//len = fr.available();
while((i=fr.read()) != -1) {
System.out.print((char)i);
countChar++;
if((char) i == 10) {
countLine++;
}
}
System.out.println("----------------------");
System.out.println("共有"+len+"個位元組");
System.out.println("共有"+countChar+"個字元");
System.out.println("共有"+countLine+"列資料");
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void workWithBufferedReader() {
String str;
long len;
int countChar = 0;
int countLine = 0;
File file = new File("/Users/wayne/Downloads/Sample.txt");
len = file.length();
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
while((str=br.readLine()) != null) {
System.out.println(str);
countChar += str.length();
countLine++;
}
System.out.println("----------------------");
System.out.println("共有"+len+"個位元組");
System.out.println("共有"+countChar+"個字元");
System.out.println("共有"+countLine+"列資料");
br.close();
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
workWithFileReader()
计算所有字符,包括换行符“ \ n” 和“ \ r” 。
在 Windows 中,操作系统文件行以两个字符“ \ r”和“ \ n”终止 您缺少的字符是那些。
在基于 unix 的OS Linux,Mac,BSD等行中,仅以“ \ n”终止 您需要意识到这种细微的差别。
workWithFileReader()
仅计算行中包含的字符,不包含终止字符“ \ r”和“ \ n”
还请注意,当到达第一个“ \ n” 时,计数必须从1而不是0 开始。
您可以使用以下内容作为参考:
package io;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class IO {
public static void main(String[] args) throws IOException {
String path = "C:\\1.txt";
List<String> readAllLines = Files.readAllLines(Paths.get(path));
System.out.println("lines: " + readAllLines.size());
byte[] bytes = Files.readAllBytes(Paths.get(path));
String s = new String(bytes);
System.out.println("characters:" + s.length());
}
}
答案 1 :(得分:0)
我检查了JAVADOC并获得了阅读专线,
就是说...此方法将以下内容识别为行终止符:
\ u000D,后跟\ u000A,回车,后跟LINE FEED \ u000A,LINE FEED \ u000D,回车
所以,我验证一下...
if((char) i == 10) {
countLine++;
lineTerminators++;
}
if((char) i == 13) {
countLine++;
lineTerminators++;
}
是的! lineTerminators得到21,547-526 = 21。