获取目录及其子目录中所有txt文件的列表并将其添加到一个List中。

3
尝试获取目录/子目录中所有文本文件的列表并将其添加到List中。
结构:
sampleDirFolder->testDirFolder->test.txt,test1.txt

代码:

import java.io.File;
import java.io.IOException;
import java.util.*;

public class testClass {

//Method to read dir/sub-dir and get list of .java files
public static List<String> listFiles(String path)

{
    File folder = new File(path);
    File[] files = folder.listFiles();
    for (File file : files)
    { if (file.isFile() && file.getName().endsWith(".txt"))
    {
        System.out.println(file.getName());
    }
    else if (file.isDirectory())
    {
        listFiles(file.getAbsolutePath());
    }
    }
    return listOfFiles;
}

public static void main(String [] args) throws IOException {
    listFiles("path/Desktop/sampledir");
}
}

OP:

test.txt
test1.txt

这段代码可以用来打印文件列表,你有什么建议如何将它添加到一个List<String>中?

  1. 创建一个列表。
  2. 每次找到一个文件,将其添加到列表中。
  3. 返回列表。
  4. 将返回的列表中的所有元素添加到列表中。
- Amongalen
@Amongalen 当我尝试在函数中将文件名添加到列表中时,它只返回一个空列表。 - Swavig
2
你应该向我们展示你尝试过的内容。当前的代码甚至无法编译,因为没有 listOfFiles 变量。 - Amongalen
你可以使用Java 7的Files#walkFileTree功能。如果你是Java新手,可能有点难以理解,但它是一个非常紧凑的解决方案:https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#walkFileTree(java.nio.file.Path,%20java.nio.file.FileVisitor) - Janos Vinceller
1个回答

0

试试这个:

import java.io.File;
import java.io.IOException;
import java.util.*;

public class testClass {

//Method to read dir/sub-dir and get list of .java files
public static void listFiles(String path, List<String> filesList)

{
    File folder = new File(path);
    File[] files = folder.listFiles();
    for (File file : files)
    { if (file.isFile() && file.getName().endsWith(".txt"))
    {
        //System.out.println(file.getName());
        filesList.add(file.getName());
    }
    else if (file.isDirectory())
    {
        listFiles(file.getAbsolutePath(), filesList);
    }
    }
    //return listOfFiles;
}

public static void main(String [] args) throws IOException {
    List<String> filesList = new ArrayList<>();
    listFiles("path/Desktop/sampledir", filesList);
    System.out.println(filesList);
}
}

else部分错了,代码编译不通过。你正调用listFiles(file.getAbsolutePath());,但是并没有一个单参数的方法。你需要同时将列表传递进去。 - Amongalen
是的,我正在遇到评论中描述的确切错误。 - Swavig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接