子文件夹不显示文本文件 - JAVA
SubFolders not showing text files - JAVA
所以我试图通过从文件夹[主文件夹名为 Attendance] 读取文本文件(所有文件都填充了学生姓名)来让学生出勤,该文件夹有 2 个子文件夹,我的程序没有显示任何文本文件,下面是我创建文件的代码,其中保存了主文件夹的路径,然后创建了一个列表来存储所有文件:
File folder = new File("C:\Users\HP\IdeaProjects\AdaptiveJava\src\StudentAttendance\Attendance");
List<File> allFiles = Arrays.asList(folder.listFiles());
所以我有一种方法可以打印主文件夹中的所有文本文件:
public static void printFileNames(List<File> fileList){
for(int i = 0; i < fileList.size();i++){
if(fileList.get(i).isFile()){
System.out.println(fileList.get(i).getName());
}
}
}
但没有打印任何内容,但是当我将文件路径更改为
File folder = new File("C:\Users\HP\IdeaProjects\AdaptiveJava\src\StudentAttendance\Attendance\SubFolder1");
它打印子文件夹内的所有文本文件,反之亦然。
我在这里做错了什么?如何从子文件夹中读取多个文本文件?
您还应该列出子文件夹中的文件,方法listFiles()
仅列出与您所在文件夹相关的文件,因此您可以遍历第一个文件列表,然后列出文件每个子文件夹,这是一种使用 java 8 个流的方法:
List<File> allFiles = Arrays.stream(folder.listFiles())
.filter(File::isDirectory)
.flatMap(f -> Arrays.stream(f.listFiles()))
.collect(Collectors.toList());
您还可以使用 for 迭代第一个 listFiles 调用的结果,并为每个文件调用该方法,首先询问它是否是一个目录,如下所示:
List<File> allFiles = new ArrayList<>();
for (File f : folder.listFiles()) {
if (f.isDirectory()) {
allFiles.addAll(Arrays.asList(f.listFiles()));
}
}
您的代码应该可以工作。如果我使用以下代码,它会打印当前工作目录的子文件夹 filesToPrint 中的所有文件名。
package test.print.files;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class PrintFiles
{
public static void main(String[] args)
{
File folder = new File("./filesToPrint");
List<File> allFiles = Arrays.asList(folder.listFiles());
printFileNames(allFiles);
}
public static void printFileNames(List<File> fileList)
{
for (int i = 0; i < fileList.size(); i++)
{
if (fileList.get(i).isFile())
{
System.out.println(fileList.get(i).getName());
}
}
}
}
示例目录:
c:\filesToPrint\file1.txt
file2.txt
输出:
file1.txt
file2.txt
所以我试图通过从文件夹[主文件夹名为 Attendance] 读取文本文件(所有文件都填充了学生姓名)来让学生出勤,该文件夹有 2 个子文件夹,我的程序没有显示任何文本文件,下面是我创建文件的代码,其中保存了主文件夹的路径,然后创建了一个列表来存储所有文件:
File folder = new File("C:\Users\HP\IdeaProjects\AdaptiveJava\src\StudentAttendance\Attendance");
List<File> allFiles = Arrays.asList(folder.listFiles());
所以我有一种方法可以打印主文件夹中的所有文本文件:
public static void printFileNames(List<File> fileList){
for(int i = 0; i < fileList.size();i++){
if(fileList.get(i).isFile()){
System.out.println(fileList.get(i).getName());
}
}
}
但没有打印任何内容,但是当我将文件路径更改为
File folder = new File("C:\Users\HP\IdeaProjects\AdaptiveJava\src\StudentAttendance\Attendance\SubFolder1");
它打印子文件夹内的所有文本文件,反之亦然。 我在这里做错了什么?如何从子文件夹中读取多个文本文件?
您还应该列出子文件夹中的文件,方法listFiles()
仅列出与您所在文件夹相关的文件,因此您可以遍历第一个文件列表,然后列出文件每个子文件夹,这是一种使用 java 8 个流的方法:
List<File> allFiles = Arrays.stream(folder.listFiles())
.filter(File::isDirectory)
.flatMap(f -> Arrays.stream(f.listFiles()))
.collect(Collectors.toList());
您还可以使用 for 迭代第一个 listFiles 调用的结果,并为每个文件调用该方法,首先询问它是否是一个目录,如下所示:
List<File> allFiles = new ArrayList<>();
for (File f : folder.listFiles()) {
if (f.isDirectory()) {
allFiles.addAll(Arrays.asList(f.listFiles()));
}
}
您的代码应该可以工作。如果我使用以下代码,它会打印当前工作目录的子文件夹 filesToPrint 中的所有文件名。
package test.print.files;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class PrintFiles
{
public static void main(String[] args)
{
File folder = new File("./filesToPrint");
List<File> allFiles = Arrays.asList(folder.listFiles());
printFileNames(allFiles);
}
public static void printFileNames(List<File> fileList)
{
for (int i = 0; i < fileList.size(); i++)
{
if (fileList.get(i).isFile())
{
System.out.println(fileList.get(i).getName());
}
}
}
}
示例目录:
c:\filesToPrint\file1.txt
file2.txt
输出:
file1.txt
file2.txt