我正在使用File.listFiles()
in方法获取文件列表java.io.File
,但它返回一些系统文件,如 (.sys
和etc
).. 我需要在返回列表时排除所有系统相关文件(Windows、Linux、Mac)。任何人都可以解决我的问题吗?
问问题
5510 次
4 回答
3
我将实现一个简单FileFilter
的逻辑来确定文件是否是系统文件,并按照AlexR 在他的答案中显示的方式使用它的实例。像这样的东西(规则 a 仅用于演示目的!):
public class IgnoreSystemFileFilter implements FileFilter {
Set<String> systemFileNames = new HashSet<String>(Arrays.asList("sys", "etc"));
@Override
public boolean accept(File aFile) {
// in my scenario: each hidden file starting with a dot is a "system file"
if (aFile.getName().startsWith(".") && aFile.isHidden()) {
return false;
}
// exclude known system files
if (systemFileNames.contains(aFile.getName()) {
return false;
}
// more rules / other rules
// no rule matched, so this is not a system file
return true;
}
于 2012-10-15T14:50:13.293 回答
2
我不认为有一个通用的解决方案。首先,Linux 和 MacOS 等操作系统没有明确的“系统文件”概念,也没有任何明显的方式来区分系统文件和非系统文件。
我认为您的赌注是确定系统文件的含义,然后编写自己的代码将其过滤掉。
于 2012-10-15T14:37:26.933 回答
2
通常文件列表的过滤是通过使用文件过滤器来完成的。
new java.io.File("dir").listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// add here logic that identifies the system files and returns false for them.
}
});
问题是如何定义系统文件。例如,如果您想过滤掉所有带有扩展名的文件,.sys
这很简单。如果不是,请定义您的标准。如果您在实施标准时遇到困难,请提出具体问题。
于 2012-10-15T14:40:14.590 回答
2
正如其他人指出的那样,某些操作系统没有“系统文件”的定义。
但是,如果您使用的是 Java 7,那么有一个名为NIO.2的新扩展可能会在 Windows 下对您有所帮助:
Path srcFile = Paths.get("test");
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
System.out.println("isSystem? " + dfa.isSystem());
于 2012-10-15T14:43:45.367 回答