Java 访问名称为未知编码的文件
在浏览linux机器(可能还有其他Unix)的文件树时,我会遇到使用不同于Java默认字符集(charset.defaultCharset())返回的编码的文件或目录名。 这是因为用户可以更改自己的区域设置,并编写一个文件或目录,该文件或目录的名称由用户的自定义区域设置编码 我希望遍历整个文件系统(例如使用Files.walkFileTree),并且对于遇到的每个文件/dir,始终能够存储一些内容,以便以后可以成功地创建指向该文件/dir的新路径对象 但是,如果我遇到一个文件/dir,其名称用未知编码编码,我将无法再次访问该文件 为了说明这个问题,在RHEL6机器上,我在“/home/languages”下有一个dir,其名称用编码he_IL.iso88598编码,系统的区域设置也是he_IL.iso88598 以下代码使用平台的默认编码对名称进行一次解码,并将其解码为UTF-8:Java 访问名称为未知编码的文件,java,encoding,filenames,nio,Java,Encoding,Filenames,Nio,在浏览linux机器(可能还有其他Unix)的文件树时,我会遇到使用不同于Java默认字符集(charset.defaultCharset())返回的编码的文件或目录名。 这是因为用户可以更改自己的区域设置,并编写一个文件或目录,该文件或目录的名称由用户的自定义区域设置编码 我希望遍历整个文件系统(例如使用Files.walkFileTree),并且对于遇到的每个文件/dir,始终能够存储一些内容,以便以后可以成功地创建指向该文件/dir的新路径对象 但是,如果我遇到一个文件/dir,其名称用未
Path source = Paths.get("/home/languages");
Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
String badName = new String(dir.toString().getBytes("UTF8"));
String name = dir.toString();
Files.exists(Paths.get(name));
Files.exists(Paths.get(badName))
return FileVisitResult.CONTINUE;
}
Java能够访问文件/目录,即使它们的编码在walkFileTree中未知一次,那么为什么我不能再次访问这些路径呢
谢谢请参阅以下讨论:
这是:
文件库中已知的旧错误
使用java.nio.file包(文件和路径)的建议参见以下讨论:
这是:
文件库中已知的旧错误
建议使用java.nio.file包(文件和路径)谢谢@guillome的回复,但是我认为我没有使用file或任何其他java.io库。我更新了问题,使之更具体。感谢@guillaume的回复,但是我认为我没有使用File或任何其他java.io库。我更新了问题,使之更加具体。
Exception in thread "main" java.nio.file.InvalidPathException: Malformed input or input contains unmappable chacraters: /home/languages/?¢??¨??×