java filereader : 将文件读入 char 数组
java filereader : reading a file into a char array
我在将文件读入字符数组然后将每个字符与随机字母进行比较时遇到问题,比方说 'e'。
到目前为止,这是我的代码,我认为 cbuf 是空的,但我不明白,我认为这应该是将文件的内容读入其中。
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();
}
}
}
}
您将 CharBuffer cbuf 声明为 null 然后尝试使用它,这给您一个空指针异常。如下声明 cbuf,将 1024 更改为适合您使用的文件大小的适当大小:
CharBuffer cbuf = CharBuffer.allocate(1024);
您还需要更改线路
if (cbuf.charAt(i) == 'e')
至
if (cbuf.get(i) == 'e')
您几乎回答了您的问题。
cbuf
正在初始化为空。谁在分配给这个变量?那么,fr.read(cbuf)
应该把字符写到哪里呢?
另外,您没有给出您遇到的实际问题!我希望 read()
行在读取中被标记为 NPE。
由此看来,你的这番话正是在说明原因。
只是缺少认识到 null 不会神奇地消失而是需要显式赋值。
这就是您的代码所缺少的。初始化 cbuf
!
然后您应该阅读 read()
方法的语义,
因为您的代码仍然缺少读取整个文件的循环。 (注意,文件可能比您的缓冲区大!)
我在将文件读入字符数组然后将每个字符与随机字母进行比较时遇到问题,比方说 'e'。
到目前为止,这是我的代码,我认为 cbuf 是空的,但我不明白,我认为这应该是将文件的内容读入其中。
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();
}
}
}
}
您将 CharBuffer cbuf 声明为 null 然后尝试使用它,这给您一个空指针异常。如下声明 cbuf,将 1024 更改为适合您使用的文件大小的适当大小:
CharBuffer cbuf = CharBuffer.allocate(1024);
您还需要更改线路
if (cbuf.charAt(i) == 'e')
至
if (cbuf.get(i) == 'e')
您几乎回答了您的问题。
cbuf
正在初始化为空。谁在分配给这个变量?那么,fr.read(cbuf)
应该把字符写到哪里呢?
另外,您没有给出您遇到的实际问题!我希望 read()
行在读取中被标记为 NPE。
由此看来,你的这番话正是在说明原因。
只是缺少认识到 null 不会神奇地消失而是需要显式赋值。
这就是您的代码所缺少的。初始化 cbuf
!
然后您应该阅读 read()
方法的语义,
因为您的代码仍然缺少读取整个文件的循环。 (注意,文件可能比您的缓冲区大!)