6

我正在使用File.listFiles()in方法获取文件列表java.io.File,但它返回一些系统文件,如 (.sysetc).. 我需要在返回列表时排除所有系统相关文件(Windows、Linux、Mac)。任何人都可以解决我的问题吗?

4

4 回答 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 回答