簡體   English   中英

Java無法讀取帶有“特殊”字符的文件

[英]Java unable to read files with some “special” characters

我寫了一個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字節。

您應該將文件名字符寫為Unicode編碼\\ uxxxx

您的代碼中所有unicode字符都轉換為問號,則文件不存在

嘗試使用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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM