使用read()读取FileInputStream中的字符



我制作了这个程序来计算文件中不包括空格的字符数。但当我在超过一行的输入上测试它时,它开始出现错误。不过,我知道,对于我添加到文件中的每一行,错误都会增加+2。但为什么会发生这种情况呢?

import java.lang.*;
import java.util.*;
import java.io.*;
public class fileread_1
{
public static void main (String args[]) throws IOException
{
try{
FileInputStream fs = new FileInputStream("checkerx.txt");
FileOutputStream f_out = new FileOutputStream("check_twice.txt",false);
PrintStream ps = new PrintStream(f_out);
int i=0,count =0;
while((i=fs.read())!=-(1)){
if(!(((char)i)==(' ')))
count = count +1;
ps.print((char)i);
}
System.out.println(count);
}
catch(FileNotFoundException e)
{
System.out.println("the file was not found");
}
}
}

您正在计算行尾字符,在Linux/UNIX中是ASCII换行符,在Windows/MSDOS中是换行符和回车符。

请注意,该文件还可能包含其他空白字符,如制表符、表单提要等。这些字符应该如何计算?

有关更多信息,请参阅https://stackoverflow.com/a/4510327/1532454

读取char时,还会得到回车(CR,r(和换行(LF,n(。你应该考虑一下它的状况。

替换此:

if(!(((char)i)==(' ')))

有了这个:

char readChar = (char)i;
if(!(readChar==(' ') || readChar==('r') || readChar==('n')))

最新更新