Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在整个c驱动器中搜索文件类型_Java_File_Io - Fatal编程技术网

Java 在整个c驱动器中搜索文件类型

Java 在整个c驱动器中搜索文件类型,java,file,io,Java,File,Io,好的,我的程序的一部分在C盘上搜索所有的mp3文件,唯一的问题是它不会进入和子文件夹。这是到目前为止我的代码 public static List<String> ListFiles() { List<String> files = new ArrayList<String>(); File folder = new File("C:/"); File[] listOfFiles = folder.listFiles(); for (

好的,我的程序的一部分在C盘上搜索所有的mp3文件,唯一的问题是它不会进入和子文件夹。这是到目前为止我的代码

public static List<String> ListFiles() {
   List<String> files = new ArrayList<String>();
   File folder = new File("C:/");
   File[] listOfFiles = folder.listFiles();

   for (File file : listOfFiles) {
       if (file.isFile()  && file.toString().contains(".mp3")) {
           String fileS = file.getName();
           files.add(fileS);
       }
   }
   return files;
}
公共静态列表列表文件(){
列表文件=新的ArrayList();
文件夹=新文件(“C:/”);
File[]listOfFiles=folder.listFiles();
对于(文件:listOfFiles){
如果(file.isFile()&&file.toString()包含(“.mp3”)){
String fileS=file.getName();
文件。添加(文件);
}
}
归还文件;
}

测试
文件是否为文件夹。如果是,则将其传递到
列表文件
,并将返回值附加到
文件


为此,您需要更改
ListFiles
以接受
File
对象作为参数,并使用此
文件开始搜索,而不是使用“C:/”

查看
DirectoryStream
类和
Files.isDirectory()
方法。基本上,您要做的是检查每个路径是文件还是目录

如果它是目录,则再次调用方法。否则,继续迭代

也可以使用目录流进行全局绑定。为您节省了大量时间,而无需手动检查文件扩展名


如果希望继续使用方法或目录流,则需要对程序进行一些修改以适应递归。

尝试递归方法。路径是您所在的当前目录。递归地调用每个文件夹,您将访问每个文件

public void walk(String path) {

    File root = new File(path);
    File[] list = root.listFiles();

    if (list == null) return;

    for (File f : list) {
        if (f.isDirectory()) {
            walk(f.getAbsolutePath());
        }
        else {
            //do what you want with files
        }
    }
}

如果你想自己做这件事,你需要让它递归。这就是奥斯瓦尔德的意思。递归方法是一种调用自身的方法。因此,当您搜索文件夹时,对于其中的每个元素,如果是mp3,请将其添加到列表中,如果是文件夹,请再次调用您的方法,将该文件夹作为输入传入。

我知道这是Java问题,但为什么不使用Groovy并像这样做:

static List<String> listMp3s() {
    List<String> files = []
    File rootFolder = new File('C:/')

    rootFolder.eachFileRecurse(FileType.FILES) {
        if (it.name.endsWith('.mp3')) {
            files << it.name
        }
    }

    return files
}
静态列表列表mp3s(){
列出文件=[]
File rootFolder=新文件('C:/'))
rootFolder.eachFileRecurse(FileType.FILES){
if(it.name.endsWith('.mp3')){

文件与其对格式感到抱歉,不如修复格式。您需要迭代或递归解决方案。如果找到的文件是文件夹,请递归调用自己。或者(在某些方面稍微好一点)将文件夹添加到要检查的文件夹列表中。