使用read()从FileInputStream读取字符

时间:2018-08-06 18:08:35

标签: java 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");
        }

    }
}

2 个答案:

答案 0 :(得分:0)

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

请注意,文件中还可以包含其他空格字符,例如制表符,换页符等。应该如何计算这些空格?

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

答案 1 :(得分:0)

当您阅读char时,还将获得回车符(CR,\r)和换行符(LF,\n)。您应该考虑它的状况。

替换此:

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

与此:

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