FileInputStream FileNotFound AIX中的异常,文件名带有特殊字符

时间:2018-01-25 12:10:13

标签: java

我在IBM Integration Bus中运行了一个小型Java应用程序,它安装在AIX服务器中,字符编码设置为ISO-8959-1。

我的应用程序正在创建一个ZIP文件,其中接收的文件名作为参数。我在文件系统中有一个名为“WebsërvícèsGuide.pdf”的文件,我想要压缩,但我不能。

这是我的代码:

String zipFilePath = "/tmp/EventAttachments_2018.01.25.11.39.34.zip";

// Streams buffer
int BUFFER = 2048;

// Open I/O Buffered Streams
BufferedInputStream origin = null;
FileOutputStream dest = new FileOutputStream(zipFilePath);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
byte data[] = new byte[BUFFER];

// Oprn File Stream to my file
Path currentFilePath = Paths.get("/tmp/Websërvícès Guide.pdf");
InputStream fi = Files.newInputStream(currentFilePath, StandardOpenOption.READ);

origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry("Websërvícès Guide.pdf");
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1) {
       out.write(data, 0, count);
}
origin.close();
out.close();

Files.newInputStream 行中抛出“找不到文件”异常。 我已经读过,当检查存在特殊字符的文件时,Java无法正常工作等等。我无法在JVM参数中执行更改,因为代码在IBM JVM中执行。

有关如何解决此问题并在ZIP中正确打包文件的想法吗?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以尝试在运行Java程序时将以下标志传递给

-Dsun.jnu.encoding=UTF-8

答案 1 :(得分:0)

首先:在您的代码中,您没有处理可能引发的任何异常。我建议处理方法的异常或使方法抛出异常并在更高级别处理它。但在某处你需要处理异常。 也许这已经成了问题。 (见https://stackoverflow.com/a/155655/8896833

第二:根据ISO-8959-1,应涵盖文件名中使用的所有字符。在您尝试访问该文件时,您是否确定您的程序正在运行的路径?

答案 2 :(得分:0)

尝试使用URLDecoder类方法decode(String string, String encoding); 例如:

String path = URLDecoder.decode("Websërvícès Guide.pdf", "UTF-8"));