不包括java中file.lists()中的系统文件

不包括java中file.lists()中的系统文件,java,file-io,Java,File Io,我在java.io.file中使用方法file.listFiles()获取文件列表,但它返回一些系统文件,如(.sys和等)。。我需要在返回列表时排除所有与系统相关的文件(Windows、Linux、Mac)。有人能解决我的问题吗?我认为没有一个通用的解决方案。首先,Linux和MacOS等操作系统没有明确的“系统文件”概念,也没有任何明显的方法来区分系统文件和非系统文件 我认为你的赌注是决定你所说的系统文件是什么意思,然后编写你自己的代码来过滤掉它们。通常,文件列表的过滤是通过使用文件过滤器来

我在
java.io.file
中使用方法
file.listFiles()
获取文件列表,但它返回一些系统文件,如(
.sys
)。。我需要在返回列表时排除所有与系统相关的文件(Windows、Linux、Mac)。有人能解决我的问题吗?

我认为没有一个通用的解决方案。首先,Linux和MacOS等操作系统没有明确的“系统文件”概念,也没有任何明显的方法来区分系统文件和非系统文件


我认为你的赌注是决定你所说的系统文件是什么意思,然后编写你自己的代码来过滤掉它们。

通常,文件列表的过滤是通过使用文件过滤器来完成的

    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
的文件,这很简单。如果没有,请定义您的标准。如果您在实施标准方面有困难,请提出具体问题

正如其他人所指出的,一些操作系统没有“系统文件”的定义

但是,如果您使用的是Java 7,则有一个名为的新扩展可能会在Windows下帮助您:

Path srcFile = Paths.get("test");
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
System.out.println("isSystem? " + dfa.isSystem());

我将实现一个简单的
FileFilter
,用逻辑来确定一个文件是否是系统文件,并以此方式使用它的一个实例。类似这样的内容(规则a仅用于演示目的!):

公共类IgnoreSystemFileFilter实现FileFilter{
Set systemfilename=newhashset(Arrays.asList(“sys”、“etc”);
@凌驾
公共布尔接受(文件aFile){
//在我的场景中:每个以点开头的隐藏文件都是一个“系统文件”
if(aFile.getName().startsWith(“.”)和&aFile.ishiden()){
返回false;
}
//排除已知系统文件
if(systemFileNames.contains(aFile.getName()){
返回false;
}
//更多规则/其他规则
//没有匹配的规则,因此这不是系统文件
返回true;
}

如何定义“系统文件”?您不能自己筛选结果列表以排除不需要的文件吗?
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;
 }