【问题标题】:How to fix java when if refused to open a file with special character in filename?如果拒绝打开文件名中带有特殊字符的文件,如何修复java?
【发布时间】:2011-04-14 13:06:15
【问题描述】:

如何打开带有Java拒绝打开的特殊字符的文件?

一开始我猜这是一个字符集编码问题,因为我从日志文件中读取了错误的文件名。但是后来我发现,可能是JVM的一个bug,我需要一个解决方法。

真实的例子胜过文字

import java.io.*;
public class WTF{
        public static void main(String[] s)throws Exception{
                File f2=new File(".");
                for (File subFile : f2.listFiles()) {
                        System.out.println(subFile.getName());
                        System.out.println(subFile.exists());
                        System.out.println(new FileInputStream(subFile));
                }
        }
}

结果

[USER@SERVER ZZZ]$ java -cp . WTF
WTF.class
true
java.io.FileInputStream@732dacd1
WTF.java
true
java.io.FileInputStream@3bad086a
ABC_�%81DEF.txt
false
Exception in thread "main" java.io.FileNotFoundException: ABC_�%81DEF.txt (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at WTF.main(WTF.java:8)

并且文件夹包含

[USER@SERVER ZZZ]$ ls -lb
-rw-r--r-- 1 USER GROUP    8 Apr 14 20:54 ABC_\303%81DEF.txt
-rw-r--r-- 1 USER GROUP 1068 Apr 14 20:58 WTF.class
-rw-r--r-- 1 USER GROUP  554 Apr 14 20:58 WTF.java

【问题讨论】:

  • 您显示的输出真的来自 WTF 类吗?我看起来像是来自另一个“C”类。

标签: java linux file-io


【解决方案1】:

【讨论】:

  • +1 - 解决方法是更改​​操作系统区域设置,使其使用与文件名中的字符兼容的文件编码。
  • 又是一个例子,Sun Micro-system 多年来从未修复错误。接受和同意一个 bug 真的那么难吗?
  • 我在想应该使用什么值 LC_ALL。因为那个错误报告页面永远不会提供任何有用的信息。可能我们所有人都应该向阿德里安学习techgoss.com/Story/3226S14-Dedication-to-open-source.aspx
  • 有人打电话告诉Java7中的NIO2是否修复了错误或错误仍然存​​在?
  • 虽然丹尼斯的确切用例与我的不同,但 java.nio.file 解决了我遇到的相关问题。 stackoverflow.com/questions/3072376/…
【解决方案2】:

一种可能的解决方法是使用系统命令重命名或链接到仅使用标准“友好”字符的文件。看起来很老套,但我认为它会起作用。

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2017-03-06
    • 2021-12-08
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多