Java JFile选择器决定是否选择了目录或文件

Java JFile选择器决定是否选择了目录或文件,java,file,jfilechooser,directory-traversal,Java,File,Jfilechooser,Directory Traversal,我的主要目标是: 如果用户选择一个目录,它会扫描整个文件夹中的mp3文件并返回它们。如果他选择了一些mp3文件,它就会返回它们 返回选定的文件很容易,但扫描目录中的mp3并不像我最初想象的那么容易。 我认为要做到这一点,我首先要确定用户是否选择了一个文件或目录,但如何选择呢?由于我可以使用getSelectedFiles()获取这两个文件,因此您可以使用File.isDirectory()和File.isFile()分别确定a是目录还是普通文件。因为您希望用户只选择一个目录,所以您需要自己查找m

我的主要目标是:

如果用户选择一个目录,它会扫描整个文件夹中的mp3文件并返回它们。如果他选择了一些mp3文件,它就会返回它们

返回选定的文件很容易,但扫描目录中的mp3并不像我最初想象的那么容易。
我认为要做到这一点,我首先要确定用户是否选择了一个文件或目录,但如何选择呢?由于我可以使用
getSelectedFiles()

获取这两个文件,因此您可以使用
File.isDirectory()
File.isFile()
分别确定a是目录还是普通文件。

因为您希望用户只选择一个目录,所以您需要自己查找mp3文件

您可以递归遍历目录,查找以“.mp3”结尾的文件


如果文件不是目录,并且没有以“mp3”结尾,则for循环将引发空指针异常。如果您提供一些反馈,指示我们的答案是否有用,我们将不胜感激。
public static void findMp3s(File root, List<File> toBuildUp) {
    // if the File is not a directory, and the name ends with mp3
    // we will add it to our list of mp3s
    if (!root.isDirectory() && root.getName().endsWith("mp3")) {
        toBuildUp.add(root);
        return;
    }
    if (!file.isDirectory())
        return;
    // Now, we know that root is a Directory
    // We will look through every file and directory under root,
    // and recursively look for more mp3 files
    for (File f: root.listFiles()){
        findMp3s(f, toBuildUp);
    }
}
List<File> allMp3s = new ArrayList<File>();
findAllMp3s(selectedDirectory, allMp3s);