0

我对 JAVA 相当陌生(看起来像这样)。使用 eclipse 我编写了一个程序来读取大约 150k 个文件,然后我将每个文件的内容打印到控制台。

有趣的是(至少对我而言),在读取 64116 个文件后,程序会抛出一个没有任何 StackTrace 的 ArrayIndexOutOfBoundException。我试图手动捕获异常并找出异常的原因,但它返回 null。另外,我试着打电话

   System.gc() 

释放内存,以防它被对象重载但没有运气。 在此处输入图像描述

我正在使用 -64Bit -16GB RAM -Core-i7 - 3.60GHz -Ubuntu 14.04 -Eclipse IDE -OpenJDK-7

这是我正在运行的代码 -

  try {
        for(File file : fileList){
            String fileName = file.getPath();
            ExtractorFromFile extr = new ExtractorFromFile();
            DemoClass obj = extr.extract(fileName);
            Map<String, Integer> wordListforCurrent = obj.uniqueWordList();
            for (Map.Entry<String, Integer> entry : wordListforCurrent.entrySet()) {
                String key = entry.getKey();
                Integer value = entry.getValue();
                if( !universalWordList.containsKey( entry.getKey() ) ){
                    universalWordList.put(key, 1);
                }
                else {
                    Integer newVal = universalWordList.get(key);
                    newVal++;
                    universalWordList.put(key, newVal);
                }
            }
            count ++;

            if(count == 50000){
                System.gc();
                //break;
            }
        }           
    }catch(Exception e){
        System.out.println("Count:" +count);
        System.out.println(e.getCause());
        e.printStackTrace();
    }

如果你想看看,这里是 extract() 方法 -

    public Test extract(String fileName) {
    // TODO Auto-generated constructor stub
    Test test = new Test();

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = 
            new FileReader(fileName);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = 
            new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null) {
            //System.out.println(line);
            //some String processing here
        }

        // Always close files.
        bufferedReader.close();         
    }
    catch(FileNotFoundException ex) {
        System.out.println(
            "Unable to open file '" + 
            fileName + "'");                
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file '" 
            + fileName + "'");                  
        // Or we could just do this: 
        // ex.printStackTrace();
    }
    return test;
}

谁能让我知道我做错了什么?如何使用 JAVA 读取任意数量的文本文件而不会出现任何错误或异常?我从未编辑过任何 JVM 配置文件。因此,如果涉及到编辑 JVM 配置,我将不胜感激接近一步一步的建议。

谢谢大家的时间。

4

0 回答 0