【问题标题】:java filereader : reading a file into a char arrayjava filereader:将文件读入char数组
【发布时间】:2016-04-11 20:43:00
【问题描述】:

我在将文件读入 char 数组,然后将每个 char 与随机字母进行比较时遇到问题,比如说“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();
            }
        }

    }

}

【问题讨论】:

    标签: java filereader


    【解决方案1】:

    您几乎回答了您的问题。

    cbuf 正在初始化为 null。谁在分配这个变量?因此,fr.read(cbuf) 应该将字符写到哪里?

    另外,您没有给出您遇到的实际问题!我希望 read() 行在读取中被标记为 NPE。

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

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

    【讨论】:

    • 谢谢。起初我不明白为什么 cbuf 为空,因为我认为当我写的时候从我的文件阅读器中读取它是为了使它不为空:fr.read(cbuf);
    【解决方案2】:

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

    CharBuffer cbuf = CharBuffer.allocate(1024);
    

    你还需要换行

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 2012-10-20
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2010-09-22
      相关资源
      最近更新 更多