由于java.io.File的构造函数需要一个java.lang.String作为参数,所以似乎没有可能告诉它在访问文件系统层时应该期望什么文件名编码。因此,当您通常使用UTF-8作为文件名编码且某个文件名包含以ISO-8859-1编码的变音符号时,您基本上是**。这正确吗?
更新:因为似乎没有人理解,可以自己试试:在创建新文件时,环境变量LC_ALL(在Linux上)确定文件名的编码。 无论您在源代码中做什么都没有关系! 如果您想给出正确的答案,请演示如何使用常规Java手段创建具有正确ISO-8859-1编码的文件,而您的JVM假定LC_ALL = en_US.UTF-8。文件名应该包含像ö、ü或ä这样的字符。
顺便说一句:如果将编码不适合LC_ALL的文件名放入maven的资源路径中,它将被跳过....
更新II。
修复这个:https://github.com/jjYBdx4IL/filenameenc 即使f.exists()语句成为true。
更新III。
解决方案是使用java.nio.*,在我的情况下,必须将File.listFiles()替换为Files.newDirectoryStream()。我已经在github上更新了示例。顺便说一句:maven似乎仍在使用旧的java.io API... mvn clean失败。
更新:因为似乎没有人理解,可以自己试试:在创建新文件时,环境变量LC_ALL(在Linux上)确定文件名的编码。 无论您在源代码中做什么都没有关系! 如果您想给出正确的答案,请演示如何使用常规Java手段创建具有正确ISO-8859-1编码的文件,而您的JVM假定LC_ALL = en_US.UTF-8。文件名应该包含像ö、ü或ä这样的字符。
顺便说一句:如果将编码不适合LC_ALL的文件名放入maven的资源路径中,它将被跳过....
更新II。
修复这个:https://github.com/jjYBdx4IL/filenameenc 即使f.exists()语句成为true。
更新III。
解决方案是使用java.nio.*,在我的情况下,必须将File.listFiles()替换为Files.newDirectoryStream()。我已经在github上更新了示例。顺便说一句:maven似乎仍在使用旧的java.io API... mvn clean失败。
file.encoding
确定在 读取文本文件 时使用的默认字符集。它与文件名无关。 - fge