Windows7中的Java文件API问题
基本上,我只是尝试使用Java File类中的list函数运行文件夹中所有文件的列表:Windows7中的Java文件API问题,java,windows,api,fileapi,Java,Windows,Api,Fileapi,基本上,我只是尝试使用Java File类中的list函数运行文件夹中所有文件的列表: artistList=(新文件(myPathName)).list() 但我得到的是一些丢失的文件,即使我在Windows7中“显示隐藏的文件”。我想知道这些文件在哪里 如果有帮助的话,我正在搜索的路径是一个类似于/media的文件夹,我已将其组织到/media/artist/album/title.mp3中,用于查找我的所有歌曲数据。我最终找到的额外文件是AlbumArt jpeg文件(我之前使用了song
artistList=(新文件(myPathName)).list()代码>
但我得到的是一些丢失的文件,即使我在Windows7中“显示隐藏的文件”。我想知道这些文件在哪里
如果有帮助的话,我正在搜索的路径是一个类似于/media
的文件夹,我已将其组织到/media/artist/album/title.mp3
中,用于查找我的所有歌曲数据。我最终找到的额外文件是AlbumArt jpeg文件(我之前使用了songbird版本9对文件夹进行排序,我只是尝试用一个小Java程序重命名匹配ID3标记) 对于您描述的组织,搜索/列表开始的目录/media
中将不会有媒体文件,您必须导航trought子目录,直到您到达/media/artist/album
,从那里您可以获得实际查找的文件。此外,您可能还需要向列表方法添加一个过滤器,并实现过滤器的accept方法来清除缩略图和隐藏的元文件
这里有一段代码(未经测试)可以帮助您
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);
}
}
}
}
私有最终静态集mediaExtensions;
静止的{
mediaExtensions=新的HashSet();
添加(“.mp3”);
添加(“.wav”);
添加(“.ogg”);
//等等
}
公共静态无效列表(文件、列表结果){
if(file.isFile()){
结果.添加(文件);
}else if(file.isDirectory()){
File files[]=File.listFiles(新文件过滤器(){
@凌驾
公共布尔接受(文件路径名){
布尔接受=假;
int i=pathname.getName().lastIndexOf('.');
如果(i!=-1){
字符串ext=pathname.getName().substring(i);
accept=(!pathname.ishiden())&&
mediaExtensions.contains(ext);
}
退货接受;
}
});
如果(文件!=null){
用于(文件f:文件){
清单(f,结果);
}
}
}
}
您是否使用Win 7中的任何“虚拟文件”和/或库文件?我知道我过去遇到过一些问题,因为看起来文件存储的位置与实际存储的位置不同。我不确定你的确切意思,但我认为这些文件不存储在库集中。我把它们放在我自己的个人文件夹里,就在C驱动器外面。对不起,可能误读了你的问题。您是否缺少list()
调用中的文件,或者list调用是否为您提供了在资源管理器中看不到的额外文件?啊,没关系,可能是我写错了问题。当我使用list()时,列表()不仅仅是我打开它时看到的所有文件夹,它还包括一堆我看不到的AlbumArt jpg文件。除了显示隐藏的文件外,您是否尝试过在资源管理器中取消选中“隐藏受保护的操作系统文件”选项?