Java无法读取带有某些“特殊”字符的文件

时间:2016-01-28 17:24:30

标签: java linux

我写了一个java程序来打印Java中的文件长度

  import java.io.File;
  import java.io.IOException;
  import java.nio.charset.Charset;
  import java.nio.file.Files;

  public class FTPTest {
          public static void main(String args[]) throws IOException {
                  File dirFile = new File("/home/chandakv/Desktop/test/vishal");
                  File[] ab = dirFile.listFiles();
                  for (int i = 0; i < ab.length; i++) {
                          System.out.println(ab[i].getName() + "\t" + ab[i].length());
                  }
          }
  }

它适用于普通文件但有一个文件名为

的文件

bjliretimessitb_u.'192.168.200.38'?Ïμ? ?Ú²????? (Y)的.lnk

无法读取该文件。如果我重命名该文件(甚至删除任何有效字符),它将按预期工作。到现在为止,我能够发现 .lnk 不是问题,在重命名文件时,Linux资源管理器会将编码转换为ASCII,以便正在处理文件。

但是,如何正常处理文件而不修改其名称。

仅供参考,运行上述计划

file.isFile() -> Returns false
file.isReadable() -> Returns false
file.length() -> Returns 0

在linux上,“ls -l”将文件大小显示为207字节。

2 个答案:

答案 0 :(得分:0)

您应该将文件名字符编写为unicode编码\ uxxxx

在您的代码中,所有unicode字符都转换为问号,然后该文件不存在

答案 1 :(得分:0)

尝试使用UTF8编码创建新的PrintStream(不要使用默认的System.out PrintStream)。

PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(unicodeText);

您的代码如下所示:

import java.io.PrintStream;

File dirFile = new File("/home/chandakv/Desktop/test/vishal");
File[] ab = dirFile.listFiles();
PrintStream out = new PrintStream(System.out, true, "UTF-8");
for (int i = 0; i < ab.length; i++) {
    out.println(ab[i].getName() + "\t" + ab[i].length());
}