0
我正在使用SimpleFileVisitor
來搜索文件。它在Windows和Linux上運行良好。但是,當我嘗試在Unix上使用它時,如操作系統它不能按預期工作。我會得到這樣的錯誤:如何在Java中使用SimpleFileVisitor來查找編碼可能不同的文件名?
java.nio.file.NoSuchFileException:
/File/Location/MyFolder/\u0082\u0096\u0096âĜu0099\u0081\u0097K
\u0097\u0099\u0096\u0097\u0085\u0099Ĝu0089\u0085
它看起來像獲取的名稱是在不同的字符編碼,也許這是什麼原因造成的問題。它看起來像在獲取名稱和嘗試獲取文件訪問之間,編碼正在被遺漏。對於每個試圖訪問的文件,這個結果都會調用preVisitDirectory
然後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;
}
通常,當您看到「?」字符時,表示您有一個正在被解釋爲ISO-8859-1或WIN-1252的UTF-8流。 「â」是來自UTF-8的多字節指示,它是錯誤翻譯的。 –