IOException - 详细消息所有问号
IOException - detail message all question marks
我想 createNewFile
使用路径,但出现 IOException。问题是,详细信息无法解读,只能看到一堆问号
我用的是Windows10,原来是西班牙文,安装了中文语言包。 java 语言已经设置为 en
并且文件编码 UTF-8
:
java -version
Picked up _JAVA_OPTIONS: -Duser.country=US -Duser.language=en -Dfile.encoding=UTF-8
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
为什么?只有这个异常无法读取。
编辑:试图将语言定义为 zh
,但不起作用。
使用这个主要的class来重现它:
public class PromotionTargetFileHandlerMain {
public static final String uploadingDir = String.join(File.separator,
System.getProperty("user.dir"), "targets_csv");
private static final File destDir = new File(uploadingDir);
public static void main(String[] args) {
createFileDestination("target.csv");
}
public static void createFileDestination(String filename) {
if (!destDir.exists()) {
try {
Files.createDirectory(Path.of(uploadingDir));
} catch (FileAlreadyExistsException e) {
log.trace("File dir already exists: {}", uploadingDir);
} catch (IOException e) {
log.error("Cannot create temp file dir {}", uploadingDir, e);
throw new RuntimeException(e);
}
}
String saveLocation = String.join(File.separator,
uploadingDir, filename
);
File saveFile = new File(saveLocation);
if (saveFile.exists()) saveFile.delete();
try {
saveFile.createNewFile(); // <--------------- here IOException
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
在 try catch blog 和 catch (Exception e) 中编写您的代码,然后如果您的文件对象没有问题,那么您将获得结果
try{
//code
}catch(Exception e){
println("Exception"+e)
}
我可能找到了一个解决方案:在 Windows 10 中为 non-Unicode 应用程序在控制面板中更改语言环境。本来是西班牙文,现在换成中文了,然后就可以看到一些其他IO错误的本地化信息(问题中不能重现同样的错误):
我找到了 this:
...and .NET exception messages will be localized regardless of the intended recipient of the message.
所以这让我相信过程是这样的:
- 原生OS级错误信息始终是中文
- 而且,由于 non-Unicode 的 OS 语言环境设置(为什么 Java 被认为是 non-Unicode 应用程序,我不知道),它想要解释它作为西班牙语,但失败了
- 所以我只能看到??????
在Windows10中,您可以在搜索栏中输入“控制面板”,进入:区域->管理(选项卡)->non-Unicode应用程序语言,设置为中文(或本地语言包中的其他语言),然后重新启动。
当然,它也会影响其他 non-Unicode 应用程序。
我想 createNewFile
使用路径,但出现 IOException。问题是,详细信息无法解读,只能看到一堆问号
我用的是Windows10,原来是西班牙文,安装了中文语言包。 java 语言已经设置为 en
并且文件编码 UTF-8
:
java -version
Picked up _JAVA_OPTIONS: -Duser.country=US -Duser.language=en -Dfile.encoding=UTF-8
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
为什么?只有这个异常无法读取。
编辑:试图将语言定义为 zh
,但不起作用。
使用这个主要的class来重现它:
public class PromotionTargetFileHandlerMain {
public static final String uploadingDir = String.join(File.separator,
System.getProperty("user.dir"), "targets_csv");
private static final File destDir = new File(uploadingDir);
public static void main(String[] args) {
createFileDestination("target.csv");
}
public static void createFileDestination(String filename) {
if (!destDir.exists()) {
try {
Files.createDirectory(Path.of(uploadingDir));
} catch (FileAlreadyExistsException e) {
log.trace("File dir already exists: {}", uploadingDir);
} catch (IOException e) {
log.error("Cannot create temp file dir {}", uploadingDir, e);
throw new RuntimeException(e);
}
}
String saveLocation = String.join(File.separator,
uploadingDir, filename
);
File saveFile = new File(saveLocation);
if (saveFile.exists()) saveFile.delete();
try {
saveFile.createNewFile(); // <--------------- here IOException
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
在 try catch blog 和 catch (Exception e) 中编写您的代码,然后如果您的文件对象没有问题,那么您将获得结果
try{
//code
}catch(Exception e){
println("Exception"+e)
}
我可能找到了一个解决方案:在 Windows 10 中为 non-Unicode 应用程序在控制面板中更改语言环境。本来是西班牙文,现在换成中文了,然后就可以看到一些其他IO错误的本地化信息(问题中不能重现同样的错误):
我找到了 this:
...and .NET exception messages will be localized regardless of the intended recipient of the message.
所以这让我相信过程是这样的:
- 原生OS级错误信息始终是中文
- 而且,由于 non-Unicode 的 OS 语言环境设置(为什么 Java 被认为是 non-Unicode 应用程序,我不知道),它想要解释它作为西班牙语,但失败了
- 所以我只能看到??????
在Windows10中,您可以在搜索栏中输入“控制面板”,进入:区域->管理(选项卡)->non-Unicode应用程序语言,设置为中文(或本地语言包中的其他语言),然后重新启动。
当然,它也会影响其他 non-Unicode 应用程序。