SimpleFileVisitor
ファイルの検索に使用しています。Windows と Linux で問題なく動作します。ただし、オペレーティング システムのような Unix で使用しようとすると、期待どおりに動作しません。次のようなエラーが発生します。
java.nio.file.NoSuchFileException:
/File/Location/MyFolder/\u0082\u0096\u0096âĜu0099\u0081\u0097K
\u0097\u0099\u0096\u0097\u0085\u0099Ĝu0089\u0085
取得した名前の文字エンコーディングが異なるようで、それが問題の原因である可能性があります。名前を取得してからファイルへのアクセスを取得しようとしている間に、エンコーディングが失われているようです。これにより、アクセスしようとするファイルごとにpreVisitDirectory
1 回呼び出すことになります。メソッドがそれを行うvisitFileFailed
理由がわかりません。walkFileTree
何か案が?
コードの使用はSimpleFileVisitor
次のようになります。
Files.walkFileTree(serverLocation, finder);
私SimpleFileVisitor
のクラス:
public class Finder extends SimpleFileVisitor<Path> {
private final PathMatcher matcher;
private final List<Path> matchedPaths = new ArrayList<Path>();
private String usedPattern = null;
Finder(String pattern) {
this.usedPattern = pattern;
matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
}
void match(Path file) { //Compare pattern against file or dir
Path name = file.getFileName();
if (name != null && matcher.matches(name))
matchedPaths.add(file);
}
// Check each file.
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
match(file);
return CONTINUE;
}
// Check each directory.
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
match(dir);
return CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException e) {
System.out.println("Issue: " + e );
return CONTINUE;
}