无法访问目录中的文件

时间:2015-04-23 02:11:01

标签: java

我的目录结构如下:

DB_SET
 -D1
   - DB_1.txt
 -D2
   - DB_2.txt 
 -D3
   - DB_3.txt
 -D4
   - DB_4.txt
 -D5
   - DB_5.txt

我想将所有DB_1.txtDB_2.txtDB_3.txtDB_4.txtDB_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]);
    }
}

3 个答案:

答案 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);
}