Java 从多个文本文件读取数据

Java 从多个文本文件读取数据,java,file-read,Java,File Read,我是Java编程新手,我尝试打印名称,从文件夹中读取多个文本文件,并计算每个文本文件的字频,当我读取文件夹时,所有文本文件都打印出来了,但没有读取,请查看代码 import java.io.*; import java.util.StringTokenizer; import java.util.TreeMap; public class foldersearch { public static void main(String[] args) { // Dir

我是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/2b.txt/etc。

尝试:

File textFile = new File(folder.getAbsolutePath() + File.separator + files);

程序员需要学习的第一件事是如何自己弄清楚当一个人出错时会发生什么。因此,我们仅仅给出答案并不会对您有多大帮助(尽管我看到我们已经给出了答案)

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

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

鉴于以上三点,我的建议如下:

  • 将代码拆分为一个方法,该方法接受一个文件(或表示文件名的字符串),并计算该文件中的字频。另一种方法是查找并循环所有要读取的文件,对每个文件调用第一个方法
  • 分别测试这两种方法,这将有助于跟踪错误
  • 查看FileFilter接口
  • 仔细阅读File.name()方法的Javadoc

此外,请学习如何格式化代码以使其可读,即在何处放置换行符以及如何缩进代码。这里有一个指南:为什么这是“投票结束-不是一个真正的问题”?除了格式问题,这是一个合理而正确的问题。你能告诉我怎么做吗,我对java是新手。?简单的字符串操作-
files=path+File.separator+listOfFiles[i].getName()Java的文件API虽然不完美,但有一些方法可以为您做到这一点。但是在这种情况下,如果您遵循sje397的建议,就没有必要了。OUTPUT:'nokia.txt/home/sumeet/Documents/text files/nokia.txt(没有这样的文件或目录){}在您发表评论之前只需阅读一次代码,我先打印名称,然后再阅读..似乎您在什么地方弄错了,我照你说的做了,我是java的新手,谢谢!!非常好。谢谢你的建议。我会记住的。。。。
File textFile = new File(folder.getAbsolutePath() + File.separator + files);