2

我在Solaris10 with Chinese. 现在目录中有一些文件是中文文件名。当我执行files = new File(dir).list()where "dir" 是包含该中文文件的父目录时,我得到的结果文件名files[0]????? (一些垃圾字符)。

现在的交易是我的程序file.encoding属性已经设置为GBK,我也这样做Charset.isSupported("GBK")了,它也返回 true。那么问题可能出在哪里。我的想法不多了。

注意:我不想在任何地方打印文件名或复制文件或其他东西。我只是为它打开一个流,如下所示:

files = new File(dir).list();
new FileInputStream(files[0]);

现在这给了我一个 FileNotFoundExcpetion,所以我调试只是为了发现 files[0] 中的值是“??????”。

4

3 回答 3

1

不确定这是否是一个好习惯。尝试在启动 jvm 时设置字符集: java -Dfile.encoding="" ...

于 2010-03-11T11:02:09.943 回答
0

听起来您可能遇到与http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4866151相同的问题

通常这是在使用一种编码创建文件然后尝试通过另一种编码读取时引起的。

于 2010-12-20T03:42:55.643 回答
0

好的,你可以试试这个吗

//String[] files = new File(dir).list(); 
File[] files = new File(dir).listFiles(); //use 'File' references instead.
FileInputStream fos = new FileInputStream(files[0]);

这消除了对文件名的依赖并直接使用 File 对象。

于 2010-03-11T11:18:01.187 回答