Как исправить Java, если отказался открыть файл со специальным символом в имени файла? - PullRequest
11 голосов
/ 14 апреля 2011

Как открыть файл со специальным символом, который Java отказался открыть?

В начале я думаю, что это была проблема с кодировкой кодировки, когда я неправильно прочитал имя файла из файла журнала. Но позже я обнаружил, что возможно ошибка в JVM, и мне нужен обходной путь.

Реальный пример лучше слов

import java.io.*;
public class WTF{
        public static void main(String[] s)throws Exception{
                File f2=new File(".");
                for (File subFile : f2.listFiles()) {
                        System.out.println(subFile.getName());
                        System.out.println(subFile.exists());
                        System.out.println(new FileInputStream(subFile));
                }
        }
}

С результатом

[USER@SERVER ZZZ]$ java -cp . WTF
WTF.class
true
java.io.FileInputStream@732dacd1
WTF.java
true
java.io.FileInputStream@3bad086a
ABC_�%81DEF.txt
false
Exception in thread "main" java.io.FileNotFoundException: ABC_�%81DEF.txt (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at WTF.main(WTF.java:8)

А в папке содержится

[USER@SERVER ZZZ]$ ls -lb
-rw-r--r-- 1 USER GROUP    8 Apr 14 20:54 ABC_\303%81DEF.txt
-rw-r--r-- 1 USER GROUP 1068 Apr 14 20:58 WTF.class
-rw-r--r-- 1 USER GROUP  554 Apr 14 20:58 WTF.java

Ответы [ 2 ]

9 голосов
/ 14 апреля 2011
0 голосов
/ 14 апреля 2011

Возможный обходной путь - использовать системную команду для переименования или ссылки на файл, используя только стандартные «дружественные» символы. Кажется, хак, но я думаю, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...