我在Solaris10 with Chinese
上运行Java应用程序。现在,目录中有一些带有中文文件名的文件。当我files = new File(dir).list()
其中“dir”是包含该中文文件的父目录时,我得到结果文件名files[0]
为 ????? (一些垃圾字符)。
现在的交易是我的程序 file.encoding 属性已经设置为 GBK ,我也做Charset.isSupported("GBK")
并且它也返回true。那么问题出在哪里呢?我的想法已经不多了。
注意:我不打算在任何地方打印文件名或复制文件或其他内容。我只是打开一个流,如下所示:
files = new File(dir).list();
new FileInputStream(files[0]);
现在这给了我一个FileNotFoundExcpetion,所以我调试只是为了找到文件[0]中的值是“??????”。
答案 0 :(得分:1)
不确定这是否是一种很好的做法。 使用以下命令尝试设置charset:java -Dfile.encoding =“”...
答案 1 :(得分:0)
好的,你可以试试吗
//String[] files = new File(dir).list();
File[] files = new File(dir).listFiles(); //use 'File' references instead.
FileInputStream fos = new FileInputStream(files[0]);
这将删除对文件名的依赖性,并直接使用File对象。
答案 2 :(得分:0)
听起来你可能遇到与http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4866151
相同的问题通常这是在使用一种编码创建文件然后尝试通过另一种编码进行读取时引起的。