我的目录结构如下:
DB_SET
-D1
- DB_1.txt
-D2
- DB_2.txt
-D3
- DB_3.txt
-D4
- DB_4.txt
-D5
- DB_5.txt
我想将所有DB_1.txt
,DB_2.txt
,DB_3.txt
,DB_4.txt
,DB_5.txt
存储在ArrayList
中。我怎样才能做到这一点?
我的部分代码:
File folder = new File("./WebContent/datasets/DB_Set/");
File[] listOfFiles = folder.listFiles();
System.out.println("listofFiles: "+listOfFiles);
ArrayList<File> sub_dir = new ArrayList<File>();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
}
else if (listOfFiles[i].isDirectory()) {
sub_dir.add(listOfFiles[i]);
}
}
答案 0 :(得分:0)
创建一个实现接受的FileFilter,类似于
boolean accept(File pathname) {
returns pathname != null && pathname.isFile();
}
然后使用过滤器
调用listFiles()File[] files = folder.listFiles(my_file_filter);
和文件应仅包含文件。如果你需要确保文件名都以.txt结尾(因为目录中可能有其他文件),那么添加一个文件名的字符串检查。
答案 1 :(得分:0)
你需要进入两个层次。
File folder = new File("./WebContent/datasets/DB_Set/");
File[] listOfSubDirectories = folder.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory();
}
});
ArrayList<File> filesList = new ArrayList<File>();
for (File dir : listOfSubDirectories) {
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isFile();
}
});
for (File f : files) {
filesList.add(f);
}
}
答案 2 :(得分:0)
另一种方法是递归累积文件:
private static List<String> addFiles (File dir) {
List<String> result = new ArrayList<String>();
for (File f : dir.listFiles()) {
if (f.isDirectory()) {
restult.addAll(addFiles(f));
} else if (f.isFile()) {
result.add(f.getName());
} else { // Just in case it's not a file or directory
// log or something
}
}
}
public static void main (String[] args) {
File folder = new File("./WebContent/datasets/DB_Set/");
List<File> files = addFiles(folder);
}