我在将文件读入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();
}
}
}
}
答案 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()
方法的语义,
因为你的代码仍然缺少一个循环来读取整个文件。 (介意,文件可能比你的缓冲区大!)