Java 文件数组中的IndexOutOfBoundsException。可能是什么问题?
因此,我在本地C驱动器中有一个目录 C:/Search Files/Folder[number]/hello.txt 在搜索文件中,我有四个文件夹,分别命名为: 文件夹1 文件夹2 文件夹3 文件夹4 在文件夹1中,我有一个名为hello.txt的文件,其中包含一些字符串 我要做的是获取fileDirectory、fileName和fileContent,并将其放入XMLMessage对象列表中。我已经粘贴了我的主类和XMLMessage POJO。当我运行它时,我得到一个indexOutOfBoundsException。我已经被困了几个小时了。我需要另一双眼睛来观察这件事 谢谢Java 文件数组中的IndexOutOfBoundsException。可能是什么问题?,java,xml,indexoutofboundsexception,Java,Xml,Indexoutofboundsexception,因此,我在本地C驱动器中有一个目录 C:/Search Files/Folder[number]/hello.txt 在搜索文件中,我有四个文件夹,分别命名为: 文件夹1 文件夹2 文件夹3 文件夹4 在文件夹1中,我有一个名为hello.txt的文件,其中包含一些字符串 我要做的是获取fileDirectory、fileName和fileContent,并将其放入XMLMessage对象列表中。我已经粘贴了我的主类和XMLMessage POJO。当我运行它时,我得到一个indexOutOfB
package org.raghav.stuff;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class GetFile {
public static void main(String[] args) throws IOException {
File[] files = new File("C:\\Search Files").listFiles();
showFiles(files);
}
public static void showFiles(File[] files) throws IOException {
String line = null;
List<XMLMessage> xmlMessageList = new ArrayList<XMLMessage>();
int i = 0;
//XMLMessage folderFile = new XMLMessage();
try {
for (File file : files) {
if (file.isDirectory()) {
String fileName = file.getName();
System.out.print(fileName);
xmlMessageList.get(i).setFileName(fileName);
//folderFile.setFileName(fileName);
showFiles(file.listFiles()); // Calls same method again.
} else {
xmlMessageList.get(i).setFileDirectory(file.getName() + file.toString());
//folderFile.setFileDirectory(file.getName() + file.toString());
System.out.print("\tFile: " + file.getName()
+ file.toString());
// System.out.println("Directory: " + file.getName());
BufferedReader in = new BufferedReader(new FileReader(file));
while ((line = in.readLine()) != null) {
xmlMessageList.get(i).setFileContent(line);
// folderFile.setFileContent(line);
System.out.print("\t Content:" + line);
}
in.close();
System.out.println();
}
i++;
}
} catch (NullPointerException e) {
e.printStackTrace();
}
System.out.println(xmlMessageList.toString());
}
}
你永远不会填充你的列表。我想你应该有:
for (File file : files) {
XMLMessage message = new XMLMessage();
xmlMessageList.add(message);
if (file.isDirectory()) {
String fileName = file.getName();
System.out.print(fileName);
message.setFileName(fileName);
//folderFile.setFileName(fileName);
showFiles(file.listFiles()); // Calls same method again.
} else {
... etc, using message instead of xmlMessageList.get(i)
}
}
那么您根本不需要
i
变量。我认为Jon Skeet是对的
你从不填写你的列表。
您应该使用构造函数
XmlMessage m = new XMLMessage( fileDirectory, fileName,fileContent)
xmlMessageList.add(m);
在这两个小时内,当您逐步完成代码时,调试显示了什么?您正在调用
xmlMessageList.get(i)
,但据我所知,您从未填充xmlMessageList
——它始终是一个空列表。你期望get(i)
做什么?@SajanChandran:不,为什么你会期望呢?xmlMessageList.get(i)将返回IndexOutOfBoundsExceptionxmlMessageList为空,但你可以访问它的元素xmlMessageList.get(i).setFileName(fileName);。我打赌这是你的例外情况的根源。
XmlMessage m = new XMLMessage( fileDirectory, fileName,fileContent)
xmlMessageList.add(m);