Java 文件数组中的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

因此,我在本地C驱动器中有一个目录

C:/Search Files/Folder[number]/hello.txt 在搜索文件中,我有四个文件夹,分别命名为: 文件夹1 文件夹2 文件夹3 文件夹4

在文件夹1中,我有一个名为hello.txt的文件,其中包含一些字符串

我要做的是获取fileDirectory、fileName和fileContent,并将其放入XMLMessage对象列表中。我已经粘贴了我的主类和XMLMessage POJO。当我运行它时,我得到一个indexOutOfBoundsException。我已经被困了几个小时了。我需要另一双眼睛来观察这件事

谢谢

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);