-4

我是Java编程新手,我正在尝试打印名称,从文件夹中读取多个文本文件并计算每个单词文件的词频,当我阅读文件夹时,所有文本文件都被打印但没有被读取,请看看代码。

import java.io.*;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class foldersearch
{
    public static void main(String[] args) 
    {
        // Directory path here
        String path = "/home/sumeet/Documents/text files"; 

        String files;
        File folder = new File(path);
        File[] listOfFiles = folder.listFiles(); 

        for (int i = 0; i < listOfFiles.length; i++) 
        {
            if (listOfFiles[i].isFile()) 
            {
                files = listOfFiles[i].getName();
                if (files.endsWith(".txt") || files.endsWith(".TXT"))
                {
                    System.out.println(files);
                    TreeMap<String, Integer> frequencyMap = new TreeMap<String, Integer>(); 

                    String currentLine="";

                    File textFile = new File(files); // SOME CHANGE IS REQUIRED HERE..?
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(textFile)); 

                        while ((currentLine = br.readLine()) != null) { 
                            currentLine = currentLine.toLowerCase(); 
                            StringTokenizer parser = new StringTokenizer(currentLine, " \t\n\r\f.,;:!?'"); 
                            while (parser.hasMoreTokens()) { 
                                String currentWord = parser.nextToken(); 
                                Integer frequency = frequencyMap.get(currentWord); 
                                if (frequency == null) { 
                                    frequency = 0; 
                                } 
                                frequencyMap.put(currentWord, frequency + 1); 
                            } 
                        }
                        br.close(); 
                    } catch (FileNotFoundException e) {
                        System.out.println(e.getMessage());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(frequencyMap);
                }
            }
        }
    }
}

输出:

nokia.txt
nokia.txt (No such file or directory)
{}
MainClass.txt
MainClass.txt (No such file or directory)
{}
2b.txt
2b.txt (No such file or directory)
{}
cn exercise 2.txt
cn exercise 2.txt (No such file or directory)
{}
2c.txt
2c.txt (No such file or directory)
{}
dummy.txt
dummy.txt (No such file or directory)
{}
readme.txt
readme.txt (No such file or directory)
{}
Kb.txt
Kb.txt (No such file or directory)
{}
all.txt
all.txt (No such file or directory)
{}
1b.txt
1b.txt (No such file or directory)
{}
todo.txt
todo.txt (No such file or directory)
{}
1c.txt
1c.txt (No such file or directory)
{}
2a.txt
2a.txt (No such file or directory)
{}
USE CASE.txt
USE CASE.txt (No such file or directory)
{}
4

3 回答 3

1

在尝试打开它之前,您需要将目录的名称添加到文件名中。它目前正在尝试打开 nokia.txt/2b.txt/etc。从当前目录。

于 2011-12-16T14:23:37.630 回答
1

尝试:

File textFile = new File(folder.getAbsolutePath() + File.separator + files);
于 2011-12-16T14:34:58.963 回答
1

程序员需要学习的第一件事就是如何自己弄清楚当一个错误发生时会发生什么。所以我们不会仅仅通过给出答案来帮助你(虽然我看到我们已经有了)。

所有程序员都需要掌握的另一项核心技能是将复杂性分解为可管理的块。即使对于多年来一直使用 Java 编程的人来说,也需要努力弄清楚您发布的代码中发生了什么。

随着您进一步进步,一项非常重要的技能是了解标准库并尽可能使用它。这通常可以使您免于重新发明轮子。

综合以上3点,我的建议是:

  • 将您的代码拆分为一种方法,该方法采用文件(或表示文件名的字符串),并计算该文件中的词频。另一种方法是查找并循环遍历您要读取的所有文件,并在每个文件上调用第一个方法。
  • 分别测试您的两种方法,这将帮助您追踪错误。
  • 查看 FileFilter 界面。
  • Carefully read the Javadoc of the File.name() method.
于 2011-12-16T14:40:33.210 回答