我写了一个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字节。
答案 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());
}