java filereader:将文件读入char数组

时间:2016-04-11 20:43:01

标签: java filereader

我在将文件读入char数组时遇到问题,然后将每个字符与一个随机字母进行比较,让我们说'e'。

到目前为止,这是我的代码,我认为cbuf为null,但我不明白,我认为这应该是将文件内容读入其中。

    import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;

public class CountCharacter {
    public static void main(String[] args) {
        FileReader fr = null;
        int c;
        int countOfLetter = 0;

        try {
            fr = new FileReader("C:\\Users\\User\\Desktop\\text.txt");
            CharBuffer cbuf = null;
            fr.read(cbuf);

            for (int i = 0; i < cbuf.length(); i++) {
                if (cbuf.charAt(i) == 'e')
                    countOfLetter++;
            }
            System.out
                    .println("The number of times 'e' occurred in this file is: "
                            + countOfLetter);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

2 个答案:

答案 0 :(得分:1)

您将CharBuffer cbuf声明为null,然后尝试使用它,这会给您一个空指针异常。按如下方式声明cbuf,将1024更改为适合您正在使用的文件大小的大小:

CharBuffer cbuf = CharBuffer.allocate(1024);

您还需要更改行

if (cbuf.charAt(i) == 'e')

if (cbuf.get(i) == 'e')

答案 1 :(得分:1)

你几乎回答了你的问题。

cbuf被初始化为null。是谁分配给这个变量?那么,fr.read(cbuf)应该在哪里写字符?

此外,您没有提供您遇到的实际问题!我希望在读取中标记read()行的NPE。

从这一点来看,你的评论正是确切的原因 只是缺少认识到null不会神奇地消失但需要明确的分配 这就是您的代码所缺少的。初始化cbuf

然后你应该阅读read()方法的语义,  因为你的代码仍然缺少一个循环来读取整个文件。 (介意,文件可能比你的缓冲区大!)