FileOutputStream 在获取路径中包含日文的文件时抛出 FileNotFoundException

FileOutputStream throw FileNotFoundException when get File with Japanese in path

当使用 Google 驱动器 API 时,我在这里使用此 downloadMetadataFile() 来处理文件:

public void downloadMetadataFile(String fileId, String folderStorePath, String fileName) throws IOException, GeneralSecurityException, GoogleException {
    String path = folderStorePath + "/" + fileName
    java.io.File file = new java.io.File(path);

    try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
        Drive drive = createDrive();
        drive.files().get(fileId)
                .executeMediaAndDownloadTo(fileOutputStream);
    }
}

文件夹存在时使用上述方法 (izakayaTemplate + 居酒屋):

有人可以为我解释一下这种行为吗?

注:

在运行配置文件中,我设置了

-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 \

更新 1: 调试了一段时间后,我发现我创建的新文件的CanonicalPath是错误的,但我不知道为什么会这样。

经过搜索,我找到了解决这个问题的方法:

  • 解决方法:在文件运行
  • 中添加export LANG=ja_JP.UTF-8
  • 说明: canonicalPath 是文件系统认为引用其指向的文件系统对象的规范方式的路径。因此,为了使系统获得正确的 canonicalPath,环境必须像本文档中那样设置正确的语言环境:https://docs.oracle.com/cd/E23824_01/html/E26033/glset.html。在我的问题中,正确的语言环境是ja_JP.UTF-8