Java에서 폴더의 모든 파일을 읽는 방법은 무엇입니까?

Java를 통해 폴더의 모든 파일을 읽는 방법은 무엇입니까?



답변

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

final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);

Files.walk API는 Java 8에서 사용 가능합니다.

try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
    paths
        .filter(Files::isRegularFile)
        .forEach(System.out::println);
} 

이 예제는 API 안내서에서 권장하는 자원 사용 가능 패턴을 사용합니다. 상황에 관계없이 스트림이 닫히도록합니다.


답변

File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}


답변

Java 8에서는이 작업을 수행 할 수 있습니다

Files.walk(Paths.get("/path/to/folder"))
     .filter(Files::isRegularFile)
     .forEach(System.out::println);

모든 디렉토리를 제외하고 폴더의 모든 파일을 인쇄합니다. 목록이 필요하면 다음을 수행하십시오.

Files.walk(Paths.get("/path/to/folder"))
     .filter(Files::isRegularFile)
     .collect(Collectors.toList())

지도 List<File>대신에 돌아가려면 다음을 수행 List<Path>하십시오.

List<File> filesInFolder = Files.walk(Paths.get("/path/to/folder"))
                                .filter(Files::isRegularFile)
                                .map(Path::toFile)
                                .collect(Collectors.toList());

또한 스트림을 닫아야합니다! 그렇지 않으면 너무 많은 파일이 열려 있음을 알리는 예외가 발생할 수 있습니다. 자세한 내용은 여기 를 읽으 십시오 .


답변

새로운 Java 8 기능을 사용하는이 주제에 대한 모든 대답은 스트림을 닫는 것을 무시합니다. 허용되는 답변의 예는 다음과 같습니다.

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

Files.walk메소드 의 javadoc에서 :

리턴 된 스트림은 하나 이상의 DirectoryStream을 캡슐화합니다. 파일 시스템 자원을 적시에 폐기해야하는 경우, 스트림 조작이 완료된 후 스트림의 close 메소드가 호출되도록 try-with-resources 구문을 사용해야합니다.


답변

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

      }
    }
  }
}


답변

private static final String ROOT_FILE_PATH="/";
File f=new File(ROOT_FILE_PATH);
File[] allSubFiles=f.listFiles();
for (File file : allSubFiles) {
    if(file.isDirectory())
    {
        System.out.println(file.getAbsolutePath()+" is directory");
        //Steps for directory
    }
    else
    {
        System.out.println(file.getAbsolutePath()+" is file");
        //steps for files
    }
}


답변

Java 7 이상에서는 listdir 을 사용할 수 있습니다

Path dir = ...;
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
    for (Path file: stream) {
        System.out.println(file.getFileName());
    }
} catch (IOException | DirectoryIteratorException x) {
    // IOException can never be thrown by the iteration.
    // In this snippet, it can only be thrown by newDirectoryStream.
    System.err.println(x);
}

newDirectoryStream위 의 방법 으로 전달할 수있는 필터를 만들 수도 있습니다.

DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
    public boolean accept(Path file) throws IOException {
        try {
            return (Files.isRegularFile(path));
        } catch (IOException x) {
            // Failed to determine if it's a file.
            System.err.println(x);
            return false;
        }
    }
};

다른 필터링 예는 [설명서 참조] ( http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#glob )