当前位置: 首页 > 知识库问答 >
问题:

java-递归地获取带有文件的directorys的路径

饶滨海
2023-03-14
|   |-->Foo2 --> lore.java
|Foo|
|   |-->Foo3 --> Foo4 --> ipsum.java
|
|   |--> Foo2 --> lore.java
|   |
|Foo|         | --> ipsum.java
|   |--> Foo3 |
|   |         | --> Foo4 --> rosae.java

在本例中,我希望保存foo/foo2、foo/foo3和foo/foo3/foo4。有什么想法吗?谢了!

共有1个答案

卞浩漫
2023-03-14

公共类ListAllFIlesClassic{

public static void main(String[] args) {

    File folder = new File(
            "java\\com\\javaprogramto\\w3schools\\programs");

    List<String> fileNamesList = new ArrayList<>();

    traverseDirectory(".*\\.java", folder, fileNamesList);

    for (String fileName : fileNamesList) {
        System.out.println(fileName);
    }
}

public static void traverseDirectory(final String pattern, final File folder, List<String> fileNamesList) {
    for (final File f : folder.listFiles()) {

        if (f.isDirectory()) {
            traverseDirectory(pattern, f, fileNamesList);
        }

        if (f.isFile()) {
            if (f.getName().matches(pattern)) {
                fileNamesList.add(f.getAbsolutePath());
            }
        }

    }
}

}

---使用Java 8 walk()

public static void main(String[] args) {
    String directory = "java\\com\\javaprogramto\\w3schools\\programs";

    // Finding only files.
    System.out.println("File Names : ");
    printFileNames(directory);

    // Finding only directories
    System.out.println("Folder Names : ");
    printFolderNames(directory);

    // Filtering file names by a pattern.
    System.out.println("Filtering name by a pattern \"Line\": ");
    filterByPattern(directory);

}

private static void printFileNames(String directory) {

    // Reading the folder and getting Stream.
    try (Stream<Path> walk = Files.walk(Paths.get(directory))) {

        // Filtering the paths by a regualr file and adding into a list.
        List<String> fileNamesList = walk.filter(Files::isRegularFile).map(x -> x.toString())
                .collect(Collectors.toList());

        // printing the file nams
        fileNamesList.forEach(System.out::println);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static void printFolderNames(String directory) {

    // Reading the folder and getting Stream.
    try (Stream<Path> walk = Files.walk(Paths.get(directory))) {

        // Filtering the paths by a folder and adding into a list.
        List<String> folderNamesList = walk.filter(Files::isDirectory).map(x -> x.toString())
                .collect(Collectors.toList());

        // printing the folder names
        folderNamesList.forEach(System.out::println);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static void filterByPattern(String directory) {

    // Reading the folder and getting Stream.
    try (Stream<Path> walk = Files.walk(Paths.get(directory))) {

        // Filtering the paths by a folder and adding into a list.

        List<String> fileNamesList = walk.map(x -> x.toString()).filter(f -> f.contains("Line"))
                .collect(Collectors.toList());

        // printing the folder names
        fileNamesList.forEach(System.out::println);

    } catch (IOException e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 问题内容: 我的功能有点问题。我想在许多目录中获取所有文件。目前,我可以检索传入参数的文件中的文件。我想检索作为参数传递的文件夹中每个文件夹的html文件。我会解释,如果我把参数“测试”我检索“测试”的文件,但我想找回“测试/ 1 / * HTML。”,“测试/ 2 / /。 html的”: 结果:[1,2,3] 谢谢 ! 问题答案: 看起来npm软件包会为您提供帮助。这是一个如何使用它的示例:

  • 问题内容: 我想以编程方式访问将包含在我的项目文件夹中的特定文件。有没有办法做到这一点?如果是这样,我将文件放在项目文件夹中的什么位置,获取文件路径的一些简单代码是什么? 问题答案: 将文件放在项目的根文件夹中。然后获取文件URL,路径和其他详细信息,如下所示: 编辑: 替代方法(如果文件在您的类路径中,例如,将文件放在“ src”文件夹中,并确保编译后将其移入“ bin”或“ classes”文

  • 本文向大家介绍java递归读取目录下所有文件的方法,包括了java递归读取目录下所有文件的方法的使用技巧和注意事项,需要的朋友参考一下 java递归读取目录下的所有文件(包含子目录下的所有文件)大概思路如下:通过file.listFiles()方法获取目录下的所有文件(包含子目录下的所有文件),得到files[]数组,然后遍历得到的所有文件,通过isFile(文件)和isDirectory(文件夹

  • 我正在尝试获取一个字符串集合,该集合为我提供所有类成员的字段名,以

  • 问题内容: 我正在尝试使用FileInputStream打开名称中包含空格的文件。 例如: 结果是抛出了FileNotFoundException。我试图对filePath进行硬编码,以仅查看是否应该转义空格字符,但它似乎没有用。关于这个问题有什么建议吗? 编辑:只是与每个人都在同一个页面上查看此问题…打开名称中没有空格的文件有效,具有空格的文件将失败。权限既不是这里的问题,也不不是文件夹分隔符。