2013-03-07 2 views
0

Я делаю это и пишу некоторые материалы к этому файлу.FileNotFoundException, хотя canRead() и exists() возвращает true

fileSymbol = new File("D:\\TempFiles\\SymbolFile.xml"); 
fileSymbol.createNewFile(); 
prSymbol = new PrintWriter(fileSymbol); 
while(//condition goes here){ 
    prSymbol.write(text); 
} 

Тогда я пытаюсь прочитать из этого файла, как,

FileReader fr = new FileReader(fileSymbol); 
BufferedReader br = new BufferedReader(fr); 
String line = br.readLine(); 

Когда я пытаюсь запустить, это дает следующее исключение

java.io.FileNotFoundException: fileSymbol (The system cannot find the file specified) 

Когда я пытаюсь

fileSymbol.canRead(); 
fileSymbol.exists(); 

возвращает true для обоих.

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

PS: Я только что представил фрагмент кода моего кода.

+1

Вы закрыли 'prSymbol'? Он может содержать блокировку файла. – Vulcan

+0

@ Вулкан Да. Я закрыл его перед тем, как открыть его для чтения, например, prSymbol.close(); – Prasanna

+0

Не дубликат. Этот вопрос относится к ошибке компиляции. – dty

ответ

3

java.io.FileNotFoundException: fileSymbol (Система не может найти указанный файл)

Это сообщение, если вы правильно его переписали, может означать только то, что вы re с использованием "fileSymbol" в качестве имени файла, где ранее вы использовали "D:\\TempFiles\\SymbolFile.xml".

NB, вызывающий createNewFile() Строка, прежде чем создавать выходной поток или запись в один и тот же файл, является пустой тратой времени.

4

Добавьте следующее, прежде чем прочитать файл

prSymbol.close(); 

Это не требуется для вызова заподлицо() до близкого .Reference JavaDoc - близко()

+2

Не 'flush()' перед 'close()'. Это избыточно. Это как сказать 'return' после' throw', за исключением того, что java не будет компилировать это. –

+1

@AdrianPronk - да я просто посмотрел его на docs.Will обновить свой ответ – Abi

+0

Я закрыл PrintWriter, как prSymbol.close(); перед доступом к нему с помощью этого FileReader. – Prasanna