按目录和子目录获取文件名

时间:2014-08-11 09:24:23

标签: java file path directory

我需要通过提供目录和子目录来获取所有文件名 从某种原因,它不起作用,我不知道是什么问题

这就是我所做的:

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

}

3 个答案:

答案 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;
}