java - 如何使用BufferedReader一次又一次地读取同一个txt文件?

标签 java eclipse hashmap bufferedreader readfile

    String fileName="words.txt"; //words.txt file contains 25,000 words
    String word;

    try {

    FileReader fileReader=new FileReader(fileName);
    BufferedReader bufferReader;

    ArrayList<String> arrBag;

    int count;
    bufferReader=new BufferedReader(fileReader);

    for (int i=1;i<=maxWordLength;i++)  //maxWordLength is 22
    {
        arrBag = new ArrayList<String> (); // arrBag contains all words with same length and then store to hash map.

        count=0;

        bufferReader.mark(0);               
        while((word=bufferReader.readLine())!=null)
        {
            if (word.length()==i)
            {
                arrBag.add(word);
                count++;
            }
        }

        System.out.println("HashMap key : "+i+" has bag count : "+count);
        mapBagOfTasks.put(Integer.toString(i), arrBag);  //mapBagOfTasks is HashMap where key is length of word and value is ArrayList of words with same length.   

        bufferReader.reset();

    }
    if (fileReader!=null)
    {
        fileReader.close();
    }



}
catch (FileNotFoundException e) {
    System.out.println("Input file not found");
    e.printStackTrace();
}
catch (IOException e) {
    System.out.println("Error while reading File '"+fileName+"'");
    e.printStackTrace();
}

我有一个包含 25,000 个单词的“words.txt”文件。我想将所有具有相同长度的单词存储到一个ArrayList中,然后将其存储到 HashMap 中,键:单词长度和值是数组列表。

我面临的问题是我的程序第一次读取文件,但不再读取相同的文件。我尝试使用 mark() 和 reset() 函数,但再次面临同样的问题。您可以查看输出以了解理由。我该如何解决这个问题?

我的程序输出是: 文件中的最大字长:22
HashMap key : 1 has bag count : 26//(意味着找到了长度为1的26个单词)
HashMap 键:2 包数:0
HashMap 键:3 包数:0
HashMap 键:4 包数:0
HashMap key : 5 包数 : 0
HashMap key : 6 包数 : 0
HashMap 键:7 包数:0
HashMap key : 8 包数 : 0
HashMap 键:9 包数:0
HashMap key : 10 包数 : 0
HashMap 键:11 包数:0
HashMap 键:12 包数:0
HashMap 键:13 包数:0
HashMap 键:14 包数:0
HashMap 键:15 包数:0
HashMap 键:16 包数:0
HashMap 键:17 包数:0
HashMap 键:18 包数:0
HashMap 键:19 包数:0
HashMap key : 20 包数 : 0
HashMap 键:21 包数:0
HashMap 键:22 包数:0

最佳答案

与处理内存中的数据相比,从磁盘读取数据是一项昂贵的操作,因此您应该只读取该文件一次。我建议你做这样的事情:

    Map<Integer, List<String>> lengthToWords = new HashMap<>();
    while ((word = bufferReader.readLine()) != null) {
        int length = word.length();
        if (length < maxWordLength) {
            if (!lengthToWords.containsKey( length ))
                lengthToWords.put( length, new ArrayList<>() );
            lengthToWords.get( length ).add( word );
        }
    }

关于java - 如何使用BufferedReader一次又一次地读取同一个txt文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52863424/

相关文章:

java - 通过 webclient 调用 https IP 时无法解析主机

java - 绘制圆角矩形

java - 启动 struts 应用程序的 Tomcat 问题

java - 确定 persistence.xml 的位置

Java HashMap ,其中一个的键作为另一个的值

java - 当值保持不变时,向 ComboBox 添加更改监听器

java - maven - java编译器版本自动设置为旧版本

c - Eclipse System-Workbench (Win 10 v4.6.3) 在包含 .h 文件时忽略大小写

java - 如果查找键是字符串,则 EnumMap 或 HashMap

java - 当两个线程尝试修改/访问 Concurrenthashmap 中的同一个键时会发生什么?