在java中读取大量文本文件

时间:2014-12-12 17:20:15

标签: java swing filereader

我有一个应用程序需要只读取文本文件中的特定内容。我必须从文件夹中排列的10,000个不同文本文件中读取文本,并且必须将所有这些文本文件中的内容填充到单个CSV文件中。

我的应用程序运行正常,但它只读取文件号999。没有错误,但是在999之后没有读取文件。

有什么想法吗?

public void calculate(String location) throws IOException{
    String mylocation = location;
    File rep = new File(mylocation);
    File f2 = new File (mylocation + "\\" + "metricvalue.csv");
    FileWriter fw = new FileWriter(f2);
    BufferedWriter bw = new BufferedWriter (fw);

    if(rep.exists() && rep.isDirectory()){
        File name[] = rep.listFiles();

        for(int j = 0; j < name.length; j++){
            if(name[j].isFile()){
                String filename = name[j].getPath();
                String nameinfo = name[j].getName();
                File f1= new File (filename);

                FileReader fr = new FileReader(f1);
                BufferedReader br = new BufferedReader (fr);
                String line = null;

                while((line = br.readLine()) != null){
                    if(line.contains(" |    @1    @2    % Correct")){
                        bw.write(nameinfo + ",");

                        while((line=br.readLine()) != null) {
                            if((line.indexOf("#" ) != -1)){
                                String info[] = line.split("\\s+");

                                String str = info[2] + "," + info[3] + ",";
                                bw.write(str);
                            }
                        }
                    }
                }
                bw.newLine();

                br.close();
            }
        }
    }
    bw.close();
}

3 个答案:

答案 0 :(得分:1)

您平台的文件系统仅限于999个打开的文件。您可能需要明确地增加限制或close() FileReader

fr.close();

答案 1 :(得分:0)

如何调试:

File name[] = rep.listFiles();

处设置断点

当Eclipse暂停时打开变量并检查您的数组是否包含所需的所有文件名。这将告诉您问题是否存在或解析中。

答案 2 :(得分:0)

您需要调试代码。以下是一些可以帮助您入门的指示:

File name[] = rep.listFiles();
for(int j =0;j<name.length; j++) {
        if(name[j].isFile()) {
  1. 阵列的大小是多少?想办法。如果数组中有10000个元素,那么循环将执行多少次迭代,没有其他方法。只是添加 System.out.println(name.length)会为您回答这个问题

  2. 如果数组小于10000,这就是你的答案,你只是错误地计算了你的文件。如果不是,那么你的问题必须是其中一个“文件”实际上不是一个文件(并且if语句的测试失败)。向其中添加else语句,并打印出名称......或者更好的是,删除此if(通常,避免嵌套条件包含外部结构的整个主体,尤其是像这样的巨大的,它使你的代码脆弱,逻辑很难遵循),并用

    替换它
    if(!name[j].isFile()) {
         System.out.println("Skipping " + name[j] + " because it is not a plain file.");
         continue;
     }
    
  3. 这将告诉您正在跳过的10000个文件中的哪一个。如果它没有打印任何东西,那就意味着你确实读了所有10000个文件,正如你所期望的那样,导致你正在调查的症状的实际问题在其他地方。