如何通过Java读取文件夹中的所有文件?这与哪个API无关。
当前回答
防止listFiles()函数的nullpointerexception,并递归地从子目录中获取所有文件。
public void listFilesForFolder(final File folder,List<File> fileList) {
File[] filesInFolder = folder.listFiles();
if (filesInFolder != null) {
for (final File fileEntry : filesInFolder) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry,fileList);
} else {
fileList.add(fileEntry);
}
}
}
}
List<File> fileList = new List<File>();
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
其他回答
上面有很多很好的答案,这里有一种不同的方法:在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");
void getFiles(){
String dirPath = "E:/folder_name";
File dir = new File(dirPath);
String[] files = dir.list();
if (files.length == 0) {
System.out.println("The directory is empty");
} else {
for (String aFile : files) {
System.out.println(aFile);
}
}
}
一个注释根据获得目录中的所有文件。 方法files .walk(path)将通过遍历以给定起始文件为根的文件树来返回所有文件。
例如,下面有一个文件树:
\---folder
| file1.txt
| file2.txt
|
\---subfolder
file3.txt
file4.txt
使用java.nio.file.Files.walk(路径):
Files.walk(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
给出如下结果:
folder\file1.txt
folder\file2.txt
folder\subfolder\file3.txt
folder\subfolder\file4.txt
要获取当前目录下的所有文件,请使用java.nio.file.Files.list(Path):
Files.list(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
结果:
folder\file1.txt
folder\file2.txt
File directory = new File("/user/folder");
File[] myarray;
myarray=new File[10];
myarray=directory.listFiles();
for (int j = 0; j < myarray.length; j++)
{
File path=myarray[j];
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String s = "";
while (br.ready()) {
s += br.readLine() + "\n";
}
}
关于这个主题的所有使用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方法在流操作完成后调用。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- 如何在Python中获得所有直接子目录
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder