java.io.IOException: система не может найти указанный путь для записи текстового файла

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

//Create the output text file.
File outputText = new File(filePath.getParentFile() + "\\Decrypted.txt");
try
{
    outputText.createNewFile();
}
catch (IOException e)
{
    e.printStackTrace();
}

дает мне это сообщение об ошибке:

java.io.IOException: The system cannot find the path specified
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(Unknown Source)
    at code.Crypto.decrypt(Crypto.java:55)
    at code.Crypto.main(Crypto.java:27)

Из-за этого я не могу писать в файл, потому что его естественно нет. Что я здесь делаю неправильно?


person Inglonias    schedule 27.05.2012    source источник
comment
Как устроено filePath?   -  person hmjd    schedule 28.05.2012
comment
Файл filePath = fc.getSelectedFile();   -  person Inglonias    schedule 28.05.2012
comment
каково значение filePath.getParentFile() непосредственно перед построением outputText?   -  person hmjd    schedule 28.05.2012


Ответы (3)


Если вы уже работаете с классом File, рассмотрите возможность использования всего его потенциала вместо того, чтобы выполнять половину работы самостоятельно:

File outputText = new File(filePath.getParentFile(), "Decrypted.txt");
person Wormbo    schedule 27.05.2012
comment
java.io.FileNotFoundException: ::{031E4825-7B94-4DC3-B131-E946B44C8DD5}\Pictures.library-ms\Decrypted.txt (The system cannot find the path specified) вот что происходит. Имейте в виду, что это библиотека изображений. - person Inglonias; 28.05.2012
comment
Я отмечаю это как ответ, потому что это работает, и сообщения об ошибках, которые я получаю, не являются моей ошибкой, а скорее ошибкой Windows и тем, как обрабатываются библиотеки. Спасибо за вашу помощь, всем! - person Inglonias; 28.05.2012

Каково значение filePath.getParentFile()? Какую операционную систему ты используешь? Возможно, было бы лучше объединить оба пути системно-независимым способом, например так:

filePath.getParentFile() + File.separator + "Decrypted.txt"
person Óscar López    schedule 27.05.2012
comment
Хотя это избавило от сообщения об ошибке, я не вижу файл в каталоге, который я использовал. Где это находится? - person Inglonias; 28.05.2012
comment
Фактически, при дальнейшем изучении это только удалило сообщение об ошибке. я не вижу файл - person Inglonias; 28.05.2012
comment
@Inglonias напишите это в своем коде сразу после создания нового файла: System.out.println(outputText.getCanonicalPath());. Просто чтобы быть уверенным, где находится файл, если он не там, где вы ожидаете, вам нужно будет соответствующим образом исправить путь. - person Óscar López; 28.05.2012
comment
Это будет C:\Users\Joshua (coolguy)\workspace\GUI Steganography MK II\Pictures;Decrypted.txt, который является путем к рабочей области. Что дает? - person Inglonias; 28.05.2012
comment
Измените File.pathSeparator на File.separatorChar или File.separator (любое из них работает), я думаю, вы видели предыдущую правку моего ответа, прежде чем я понял это правильно. - person Óscar López; 28.05.2012
comment
Тогда попробуйте это: filePath.getParentFile().getCanonicalPath() + File.separator + "Decrypted.txt" - person Óscar López; 28.05.2012
comment
Эта вещь невероятно расстраивает! Теперь у меня другое сообщение об ошибке. java.io.IOException: The filename, directory name, or volume label syntax is incorrect Возможно, так как я работаю над файлом из библиотеки изображений (Win 7), это тупо. РЕДАКТИРОВАТЬ: перемещение файла на рабочий стол исправляет все ошибки. - person Inglonias; 28.05.2012
comment
System.out.println() здесь твой лучший друг. Печатайте пути при каждой попытке, пока не получите правильный результат - person Óscar López; 28.05.2012

Он должен быть создан как брат файла, на который указывает filePath.

например, если

File filePath = new File("C:\\\\Test\\\\a.txt");

Затем он должен быть создан в Test dir.

person Dror    schedule 27.05.2012
comment
Рассмотрите возможность использования File.separator вместо этих богом забытых обратных косых черт. - person ryvantage; 03.07.2014