Windows 7 中的 Java 文件 API 问题

发布于 2024-12-25 14:34:08 字数 387 浏览 1 评论 0原文

基本上,我只是尝试使用 Java File 类中的 list 函数运行文件夹中所有文件的列表: artistList = (new File(myPathName)).list();

但是我得到的是一些丢失的文件,即使我在 Windows 7 中“显示隐藏文件”之后也是如此。我想知道这些文件在哪里是。

如果有帮助的话,我正在搜索的路径是像 /media 这样的文件夹,我已将其组织到 /media/artist/album/title.mp3 中以存放我的所有歌曲数据。我最终找到的额外文件是AlbumArt jpeg 文件(我事先使用songbird 版本9 对文件夹进行排序,我只是尝试使用一个小型Java 程序自己重命名匹配的ID3 标签)。

Basically, I'm just trying to run a list of all the files in a folder using the list function from the Java File class:
artistList = (new File(myPathName)).list();

But what I get is some missing files, even after I have "show hidden files" in Windows 7. I'm wondering where these files are.

If it helps, the path I'm searching in is a folder like /media which I have organized into /media/artist/album/title.mp3 for all my song data. The extra files I end up finding up are AlbumArt jpeg files (and I used songbird version 9 beforehand to sort the folders first, I'm just trying to rename the match the ID3 tags myself with a small Java program).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妖妓 2025-01-01 14:34:08

根据您描述的组织,搜索/列表开始的目录 /media 中不会有媒体文件,您必须导航子目录,直到到达 /media/artist/album code> 从那里您可以获取您实际查找的文件。此外,您可能还必须向 list 方法添加一个过滤器,并实现过滤器的接受方法以剔除缩略图和隐藏的元文件。

这是一段可以帮助您的代码(未经测试)

private final static Set<String> mediaExtensions; 

static {
    mediaExtensions = new HashSet<String>();
    mediaExtensions.add(".mp3");
    mediaExtensions.add(".wav");
    mediaExtensions.add(".ogg");
    // and so on
}

public static void list(File file, List<File> result) {
    if(file.isFile()) {
        result.add(file);
    } else if(file.isDirectory()) {
        File files[] = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                boolean accept = false;
                int i = pathname.getName().lastIndexOf('.');
                if(i != -1) {
                    String ext = pathname.getName().substring(i);
                    accept = (! pathname.isHidden()) &&
                        mediaExtensions.contains(ext);  
                }
                return accept;
            }
        });
        if(files != null) {
            for(File f : files) {
                list(f, result);
            }
        }
    }
}

With the organisation you descibed there will be no media files in the directory /media where your search / listing starts, you have to navigate trought subdirectories untill you reach /media/artist/album from there on you can get files that you actualy looking for. Also you might have to add a filter to list method and implement the filter's accept method to kick out thumbnails and hidden meta-files.

Here a piece of code (untested) that could help you

private final static Set<String> mediaExtensions; 

static {
    mediaExtensions = new HashSet<String>();
    mediaExtensions.add(".mp3");
    mediaExtensions.add(".wav");
    mediaExtensions.add(".ogg");
    // and so on
}

public static void list(File file, List<File> result) {
    if(file.isFile()) {
        result.add(file);
    } else if(file.isDirectory()) {
        File files[] = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                boolean accept = false;
                int i = pathname.getName().lastIndexOf('.');
                if(i != -1) {
                    String ext = pathname.getName().substring(i);
                    accept = (! pathname.isHidden()) &&
                        mediaExtensions.contains(ext);  
                }
                return accept;
            }
        });
        if(files != null) {
            for(File f : files) {
                list(f, result);
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文