ric*_*ich 926
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);
Run Code Online (Sandbox Code Playgroud)
Files.walk API可从Java 8获得.
try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
paths
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
该示例使用API指南中推荐的try-with-resources模式.它确保无论何种情况都将关闭流.
Dav*_*les 168
File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.isFile()) {
System.out.println(file.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
Jul*_*les 119
在Java 8中,您可以执行此操作
Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这将打印文件夹中的所有文件,同时排除所有目录.如果您需要一个列表,以下内容将:
Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
如果你想返回List<File>而不是List<Path>只是映射它:
List<File> filesInFolder = Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
您还需要确保关闭流!否则,您可能会遇到一个异常,告诉您打开了太多文件.请阅读此处了解更多信息.
Mar*_*tin 23
关于该主题的所有使用新Java 8函数的答案都忽略了关闭流.接受的答案中的例子应该是:
try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
filePathStream.forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
System.out.println(filePath);
}
});
}
Run Code Online (Sandbox Code Playgroud)
从Files.walk方法的javadoc :
返回的流封装了一个或多个DirectoryStream.如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作完成后调用流的close方法.
小智 12
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());
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
San*_*kar 11
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
}
}
Run Code Online (Sandbox Code Playgroud)
在Java 7中,您现在可以这样做 - http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#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);
}
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个过滤器,然后将其传递给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;
}
}
};
Run Code Online (Sandbox Code Playgroud)
其他过滤示例 - http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#glob
使用Files.walkFileTree(Java 7)浏览所有文件
Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("file: " + file);
return FileVisitResult.CONTINUE;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您想要更多选项,可以使用此功能,该功能旨在填充文件夹中存在的文件的arraylist.选项包括:recursivility和匹配模式.
public static ArrayList<File> listFilesForFolder(final File folder,
final boolean recursivity,
final String patternFileFilter) {
// Inputs
boolean filteredFile = false;
// Ouput
final ArrayList<File> output = new ArrayList<File> ();
// Foreach elements
for (final File fileEntry : folder.listFiles()) {
// If this element is a directory, do it recursivly
if (fileEntry.isDirectory()) {
if (recursivity) {
output.addAll(listFilesForFolder(fileEntry, recursivity, patternFileFilter));
}
}
else {
// If there is no pattern, the file is correct
if (patternFileFilter.length() == 0) {
filteredFile = true;
}
// Otherwise we need to filter by pattern
else {
filteredFile = Pattern.matches(patternFileFilter, fileEntry.getName());
}
// If the file has a name which match with the pattern, then add it to the list
if (filteredFile) {
output.add(fileEntry);
}
}
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
最好的,阿德里安
小智 5
一句话根据获取目录中的所有文件。
该方法Files.walk(path)将通过遍历以给定启动文件为根的文件树来返回所有文件。
例如,存在下一个文件树:
\---folder
| file1.txt
| file2.txt
|
\---subfolder
file3.txt
file4.txt
Run Code Online (Sandbox Code Playgroud)
使用java.nio.file.Files.walk(Path):
Files.walk(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
folder\file1.txt
folder\file2.txt
folder\subfolder\file3.txt
folder\subfolder\file4.txt
Run Code Online (Sandbox Code Playgroud)
要仅获取当前目录中的所有文件,请使用java.nio.file.Files.list(Path):
Files.list(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
结果:
folder\file1.txt
folder\file2.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1007705 次 |
| 最近记录: |