我需要通过提供目录和子目录来获取所有文件名 从某种原因,它不起作用,我不知道是什么问题
这就是我所做的:
import java.io.File;
public class Main
{
public static void main(String[] args) {
String root = "C:\\eclipse";// root directory
String[] filename = null;
filename = getFfileNamesAndInsertToArray(root, filename);
printFileNames(filename);
}
public static void printFileNames(String[] filenames) {
for (int i = 0; i < filenames.length; i++) {
System.out.println(filenames[i]);
}
}
public static String[] getFfileNamesAndInsertToArray(String root, String[] filenames) {
String[] files = filenames;
java.io.File dir = new java.io.File(root);
for (java.io.File file : dir.listFiles()) {
// String path = file.getAbsolutePath(); // get path of file
if (file.isDirectory() == false) {
files[files.length + 1] = file.getName();
}
else {
root = file.getAbsolutePath();
getFfileNamesAndInsertToArray(root, files);
}
}
return files;
}
}
答案 0 :(得分:2)
您不必手动执行此操作。您可以将Files.walkFileTree
用于此
Path path = Paths.get("your/directory/path");
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
// this is called for each file
}
});
答案 1 :(得分:0)
您必须初始化具有特定大小的任何数组,如:
String[] files = new String[20];
因此,如果您不了解特定大小(例如您的情况),则可以使用ArrayList。 如果您没有初始化字符串数组并希望在位置长度+ 1处保存字符串,则程序将失败,因为您的数组在该点没有长度。并且它不会动态分配新内存,因此无法增长并变大。 如果您使用String类型的ArrayList,您可以调用arraylist.add方法添加新元素,并且每次都会附加列表,因此您不必担心它的大小。
答案 2 :(得分:0)
可以这样做:
public static List<String> getListOfFiles(String root) throws IOException {
final List<String> fileNames = new ArrayList<>();
Files.walkFileTree(Paths.get(root), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (attrs.isRegularFile()) {
fileNames.add(file.getFileName().toString());
}
return super.visitFile(file, attrs);
}
});
return fileNames;
}