gpt4 book ai didi

java - 列出目录中的文件时出错

转载 作者:行者123 更新时间:2023-11-30 06:34:06 24 4
gpt4 key购买 nike

我有一个 java 类用于列出给定目录的文件。它适用于只有文件而没有子目录的目录。但是如果里面有子目录,它会给出 java.lang.StackOverflowError 异常。这是带有 main() 方法的类:

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class DisplayFilesAndFolders {

public static void main(String[] args) {
try {
List<File> files = getFileList();
for(File file : files ){
System.out.println(file);
}
}
catch(Exception e) {
e.printStackTrace();
}
}

public static List<File> getFileList() throws FileNotFoundException{
String sPath = "C:\\Users\\owner\\Desktop\\Screen Shot\\";
File filePath = new File(sPath);
List<File> fileList = new ArrayList<File>();
File[] files = filePath.listFiles();
List<File> fileandFolderList = Arrays.asList(files);
for (File file : fileandFolderList) {
fileList.add(file);
if (file.isDirectory()) {
List<File> innerFileList = getFileList();
fileList.addAll(innerFileList);
}
}

return fileList;

}

}

感谢您的宝贵时间。

最佳答案

您需要将 getFileList 搜索的根目录作为参数,并在每次递归时将子目录作为参数传递。 (目前,您在每次递归调用中都从 C:\Users\owner\Desktop\Screen Shot\ 重新开始。)

尝试以下操作(它在我的系统上按预期工作):

public class Test {

public static void main(String[] args) {
try {
String root = "C:\\Users\\owner\\Desktop\\Screen Shot\\";
List<File> files = getFileList(new File(root));
for(File file : files ){
System.out.println(file);
}
} catch(Exception e) {
e.printStackTrace();
}
}

public static List<File> getFileList(File filePath)
throws FileNotFoundException{

List<File> fileList = new ArrayList<File>();
File[] files = filePath.listFiles();
List<File> fileandFolderList = Arrays.asList(files);
for (File file : fileandFolderList) {
fileList.add(file);
if (file.isDirectory()) {
List<File> innerFileList = getFileList(file);
fileList.addAll(innerFileList);
}
}

return fileList;
}
}

关于java - 列出目录中的文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7403964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com