java 输入格式错误_java - java.nio.file.InvalidPathException:使用国家字符时格式不正确输入或输入含有不可映射字符 - SO中文参考 - www.soins...

我试图创建一些目录,其中有国家的象征,如“AOU”等等。不幸的是我得到这个例外,每当正在尝试:

java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: /home/pi/myFolder/löwen

at sun.nio.fs.UnixPath.encode(UnixPath.java:147)

at sun.nio.fs.UnixPath.(UnixPath.java:71)

at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281)

at java.nio.file.Paths.get(Paths.java:84)

at org.someone.something.file.PathManager.createPathIfNecessary(PathManager.java:161)

...

at java.lang.Thread.run(Thread.java:744)

它发生我的代码如下所示:

public static void createPathIfNecessary(String directoryPath) throws IOException {

Path path = Paths.get(directoryPath);

// if directory exists?

if (!Files.exists(path)) {

Files.createDirectories(path);

} else if (!Files.isDirectory(path)) {

throw new IOException("The path " + path + " is not a directory as expected!");

}

}

我搜索了可能的解决方案,最建议设置区域设置为UTF-8,所以我想我会得到这个固定的,如果我在Linux中设置区域设置为UTF-8,但我发现它已是UTF-8的所有当时,尽管新设置它,我仍然有同样的问题。

$ locale

LANG=en_US.UTF-8

LANGUAGE=

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=

我不会在Windows 7上有这个问题,它创建的目录完美,所以我不知道我是否需要提高Java代码来处理这种情况更好,或者改变我的Linux的东西。

我跑它在Linux是一个树莓派2 Raspbian:

$ cat /etc/*-release

PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)"

NAME="Raspbian GNU/Linux"

VERSION_ID="7"

VERSION="7 (wheezy)"

ID=raspbian

ID_LIKE=debian

ANSI_COLOR="1;31"

HOME_URL="http://www.raspbian.org/"

SUPPORT_URL="http://www.raspbian.org/RaspbianForums"

BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

export JAVA_OPTS="-Dfile.encoding=UTF-8 ...:我是一个Tomcat 7服务器上运行我的应用程序(Java版本是1.8,我相信),我setenv.sh开头

是否有人有办法解决这个问题?我需要能够使用在目录/文件名的国家的象征......

编辑:

添加额外的选项后Dsun.jnu.encoding = UTF-8,在我的setenv.sh为Tomcat的启动和重启事情发生了转变。

目前我setenv.sh开始看起来是这样的

export JAVA_OPTS="-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8

好像这个异常消失,并与国家符号的文件夹被创建,但问题似乎没有完全解决,每当我试图创建/写入到该目录中的文件,我现在得到:

java.io.FileNotFoundException: /home/pi/myFolder/löwen/Lowen.tmp (No such file or directory)

at java.io.FileOutputStream.open(Native Method)

at java.io.FileOutputStream.(FileOutputStream.java:206)

at java.io.FileOutputStream.(FileOutputStream.java:156)

at org.someone.something.MyFileWriter.downloadFiles(MyFileWriter.java:364)

...

at java.lang.Thread.run(Thread.java:744)

它发生在哪里的代码如下所示:

// output here

File myOutputFile = new File(filePath);

FileOutputStream out = (new FileOutputStream(myOutputFile));

out.write(bytes);

out.close();

这似乎不能对(新FileOutputStream中(myOutputFile));当它试图初始化与文件对象,它具有从将其从在上述异常的路径和在端部的附加的文件名中检索到的字符串创建的路径的FileOutputStream中。

所以,现在的目录中创建,但是写入或创建任何东西里面仍然导致上述异常,虽然它里面的文件不包含事件国家的象征。

创建路径和文件在他们时,他们没有国家象征的作品完美的,因为它在setenv.sh改变之前所做的,所以它看起来像问题连接到国家符号路径中仍...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值