Файл Java не может открыть определенные файлы - PullRequest
2 голосов
/ 09 марта 2012

Я пытаюсь открыть файлы изнутри Java с помощью чего-то вроде этого:

java.awt.Desktop.getDesktop().open(new File("c:\\coolfile.txt");

Конечно, в большинстве случаев все работает нормально и прекрасно.

ОДНАКО!

Когда у меня есть файл с символом Unicode u3000, я не могу его открыть!Даже если файл существует.

Например:

java.awt.Desktop.getDesktop().open(new File("c:\\coolfile\u3000withweirdname.txt");

Я получаю исключение, ДАЖЕ КОГДА ФАЙЛ СУЩЕСТВУЕТ

[java] java.io.IOException: Failed to open file:/E:/_prog/test%E3%80%80.txt. Error message: The system cannot find the path specified.

Пожалуйста, помогите мне, я очень старалсявсе.Это сводит меня с ума: /

Редактировать:

Чтобы дать больше информации:

Я могу легко создать файл с этим именем из Java.

Кажется, это как-то связано с пробелами

Я не знаю, относится ли это к другим персонажам;Я еще не нашел.Но, конечно, если есть 1, то легко может быть 100.

Я почти уверен, что не могу читать из файла или писать в него из Java, но я не проверял это, так как это не такмоя главная забота.

Ответы [ 3 ]

1 голос
/ 09 марта 2012
java.awt.Desktop.getDesktop().open(new File("c:\\coolfile\u3000withweirdname.txt");

Это не компилируется. Очевидно, это не ваш настоящий код.

[java] java.io.IOException: не удалось открыть Файл: / E: / _ прог / тест% E3% 80% 80.txt

И есть доказательства. Очевидно, что вы передали URL для нового FileInputStream(). Он не принимает строку URL, он принимает имя файла.

1 голос
/ 10 марта 2012

Хорошо, я думаю, что на самом деле нашел какое-то решение своего вопроса, и я публикую его здесь, чтобы помочь людям, у которых могут быть похожие проблемы.

Это исправление работает только для Windows (XP и выше, я думаю)НО я даже не знаю, существует ли эта проблема в других ОС.И даже если это возможно, подобное исправление должно быть возможным.

Я использую следующий код для успешного открытия файла с символом:

Process p = new ProcessBuilder ("cmd", "/ c start \ "\" \ "E: \ _ prog \ test \ u3000.txt \" "). start ();

, который открывает файл 'E: _prog \ testu3000.txt'

0 голосов
/ 09 марта 2012

Насколько я знаю, \ u3000 - идеографический космический персонаж. Для проверки вашего кода я создал файл с именем CompanyAlt + 3000Address.

Примечание: когда вы нажимаете Alt + 3000, окна создадут символ идеографического пространства. Затем я скопировал имя файла в свою Java-программу, и она сработала для меня.

Desktop.getDesktop().open(new File("C:\\Users\\Chandru\\Desktop\\Company╕Address.txt")); 
...