2015-10-14 27 views
-1

所以我有一個目錄在我的本地C盤。File數組中的IndexOutOfBoundsException。可能是什麼問題?

C:/搜索文件/文件夾[數字] /hello.txt 內部搜索文件我有一個名爲4個弗爾德斯: 文件夾1個 夾2 文件夾3 文件夾4

內部文件夾1我有AA文件調用hello.txt並在其中包含一些String。

我想要做的是抓住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()); 
} 
} 

這裏是POJO:

package org.raghav.stuff; 

public class XMLMessage { 

private String fileDirectory; 
private String fileName; 
private String fileContent; 

public final String FILE_NAME = "fileName"; 
public final String FILE_DIRECTORY = "fileDirectory"; 



public XMLMessage(String fileDirectory, String fileName, String fileContent) { 
    this.fileDirectory = fileDirectory; 
    this.fileName = fileName; 
    this.fileContent = fileContent; 
} 

public XMLMessage() { 

} 

public String getFileDirectory() { 
    return fileDirectory; 
} 

public void setFileDirectory(String fileDirectory) { 
    this.fileDirectory = fileDirectory; 
} 

public String getFileName() { 
    return fileName; 
} 

public void setFileName(String fileName) { 
    this.fileName = fileName; 
} 

public String getFileContent() { 
    return fileContent; 
} 

public void setFileContent(String fileContent) { 
    this.fileContent = fileContent; 
} 

public String toString(){ 
    String returnString = "File Directory: " + fileDirectory + "\n" + "File Name" + fileName + "\n" + "File Content: " + fileContent; 
    return returnString; 
} 

/*public String createResponseFileName(String fileName){ 

    int lastDot = fileName.lastIndexOf('.'); 
    String responseFileName = fileName.substring(0, lastDot) + "Response" + fileName.substring(lastDot);  
    return responseFileName; 

}*/ 

/*public String createResponseFileContent(String fileContent){ 
    this. 
}*/ 
} 
+1

當你在幾個小時內通過你的代碼時,你的調試顯示了什麼? –

+1

您打電話給'xmlMessageList.get(i)',但您從來沒有填充過'xmlMessageList',據我所知 - 它總是一個空列表。你期望'得到(我)'做什麼? –

+1

@SajanChandran:不,你爲什麼期望? –

回答

1

你永遠填充您的列表。我懷疑你應該有:

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變量。

-1

我認爲Jon Skeet是對的。

你永遠不會填充你的清單。 你應該使用你的構造函數

XmlMessage m = new XMLMessage(fileDirectory, fileName,fileContent) 

xmlMessageList.add(m); 
相關問題