我对 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 配置,我将不胜感激接近一步一步的建议。
谢谢大家的时间。