File.listFiles()
のメソッドを使用してファイルのリストを取得してjava.io.File
いますが、(.sys
およびetc
). などのシステム ファイルが返されます。リストを返すときに、システム関連のすべてのファイル (Windows、Linux、Mac) を除外する必要があります。誰でも私の問題を解決できますか?
4 に答える
FileFilter
ファイルがシステムファイルであるかどうかを判断するロジックを備えた単純なものを実装し、AlexRが彼の回答で示した方法でそのインスタンスを使用します。このようなもの (ルールはデモンストレーションのみを目的としています!):
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;
}
これに対する一般的な解決策はないと思います。まず、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 で役立つNIO.2という新しい拡張機能があります。
Path srcFile = Paths.get("test");
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
System.out.println("isSystem? " + dfa.isSystem());