如何通过Java读取文件夹中的所有文件?这与哪个API无关。


当前回答

关于这个主题的所有使用Java 8新函数的答案都忽略了关闭流。接受的答案中的例子应该是:

try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
    filePathStream.forEach(filePath -> {
        if (Files.isRegularFile(filePath)) {
            System.out.println(filePath);
        }
    });
}

从文件的javadoc。走路的方法:

返回的流封装了一个或多个directorystream。如果 需要及时处理文件系统资源 应该使用Try-with-resources构造来确保 流的close方法在流操作完成后调用。

其他回答

package com.commandline.folder;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class FolderReadingDemo {
    public static void main(String[] args) {
        String str = args[0];
        final File folder = new File(str);
//      listFilesForFolder(folder);
        listFilesForFolder(str);
    }

    public static void listFilesForFolder(String str) {
        try (Stream<Path> paths = Files.walk(Paths.get(str))) {
            paths.filter(Files::isRegularFile).forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void listFilesForFolder(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                System.out.println(fileEntry.getName());
            }
        }
    }

}

上面有很多很好的答案,这里有一种不同的方法:在maven项目中,您放在resources文件夹中的所有内容都会默认复制到target/classes文件夹中。查看在运行时可用的内容

 ClassLoader contextClassLoader = 
 Thread.currentThread().getContextClassLoader();
    URL resource = contextClassLoader.getResource("");
    File file = new File(resource.toURI());
    File[] files = file.listFiles();
    for (File f : files) {
        System.out.println(f.getName());
    }

现在要从一个特定的文件夹中获取文件,假设你的资源文件夹中有一个名为“res”的文件夹,只需替换:

URL resource = contextClassLoader.getResource("res");

如果你想访问你的com.companyName包,那么:

contextClassLoader.getResource("com.companyName");
public static List<File> files(String dirname) {
    if (dirname == null) {
        return Collections.emptyList();
    }

    File dir = new File(dirname);
    if (!dir.exists()) {
        return Collections.emptyList();
    }

    if (!dir.isDirectory()) {
        return Collections.singletonList(file(dirname));
    }

    return Arrays.stream(Objects.requireNonNull(dir.listFiles()))
        .collect(Collectors.toList());
}
import java.io.File;


public class ReadFilesFromFolder {
  public static File folder = new File("C:/Documents and Settings/My Documents/Downloads");
  static String temp = "";

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Reading files under the folder "+ folder.getAbsolutePath());
    listFilesForFolder(folder);
  }

  public static void listFilesForFolder(final File folder) {

    for (final File fileEntry : folder.listFiles()) {
      if (fileEntry.isDirectory()) {
        // System.out.println("Reading files under the folder "+folder.getAbsolutePath());
        listFilesForFolder(fileEntry);
      } else {
        if (fileEntry.isFile()) {
          temp = fileEntry.getName();
          if ((temp.substring(temp.lastIndexOf('.') + 1, temp.length()).toLowerCase()).equals("txt"))
            System.out.println("File= " + folder.getAbsolutePath()+ "\\" + fileEntry.getName());
        }

      }
    }
  }
}
import java.io.File;


public class Test {

public void test1() {
    System.out.println("TEST 1");
}

public static void main(String[] args) throws SecurityException, ClassNotFoundException{

    File actual = new File("src");
    File list[] = actual.listFiles();
    for(int i=0; i<list.length; i++){
        String substring = list[i].getName().substring(0, list[i].getName().indexOf("."));
        if(list[i].isFile() && list[i].getName().contains(".java")){
                if(Class.forName(substring).getMethods()[0].getName().contains("main")){
                    System.out.println("CLASS NAME "+Class.forName(substring).getName());
                }

         }
    }

}
}

只要传递你的文件夹,它就会告诉你关于方法的主类。