Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > имя файла в java.io.FileNotFoundException


Автор: saneea 14.9.2011, 11:23
Если какие-либо стандартные средства Java не могут открыть файл, то летит java.io.FileNotFoundException. Это исключение предоставляет "монолитную" строку с именем файла и причиной типо того: "F5010.dat (The system cannot find the file specified)". Мне же нужно имя проблемного файла и причину в двух разных строках, неужели для этого придется парсить эту "монолитную" строку?
Спасибо!

p.s.: для сравнения, в .Net есть аналогичный System.IO.FileNotFoundException, но он предоставляет свойство FileName.

Автор: Skipy 14.9.2011, 13:14
Передавайте стандартным средствам объект типа java.io.File, они его, как правило, принимают наравне со строкой. Из такого объекта можно всё получить.

Автор: saneea 14.9.2011, 13:29
Возможно я плохо объяснил, возможно я плохо понял ответ, потому что не понимаю как java.io.File может мне помочь. Я хочу чтобы было примерно так:

Код

try
{
    //какой-то код работающий с файлом(и)
}
catch(java.io.FileNotFoundException e)
{
    String sFileName = e.getFileName();//вот такого метода getFileName() мне не хватает
    System.out.println("problem with file \"" + sFileName + "\"");
}


Т.е. по сути имеем только объект типа java.io.FileNotFoundException и больше ничего.

Автор: COVD 14.9.2011, 14:26
Код

String sFileName = null;
try
{
    sFileName = .....
    //какой-то код работающий с файлом(и)
}
catch(java.io.FileNotFoundException e)
{
    System.out.println("problem with file \"" + sFileName + "\"");
}

Автор: saneea 14.9.2011, 17:03
Цитата(COVD @ 14.9.2011,  14:26)
Код

String sFileName = null;
try
{
    sFileName = .....
    //какой-то код работающий с файлом(и)
}
catch(java.io.FileNotFoundException e)
{
    System.out.println("problem with file \"" + sFileName + "\"");
}

К сожалению так тоже меня не устроит, потому что "//какой-то код работающий с файлом(и)" - это код, который вызывает функцию, которая может ещё вызвать кого-то и т.д., т.е. ловить исключение мне нужно в одном месте, а кинуться оно может во многих местах, соответственно имя проблемного файла в try{} мы знать не можем.

Автор: COVD 14.9.2011, 19:30
Цитата

ловить исключение мне нужно в одном месте

Наверное, логично FileNotFoundException ловить именно в том месте, где имя файла определяется. Тогда такая конструкция вполне приемлема. А в секции catch можно создать и выбросить наверх новое исключение, если требуется все исключения обрабатывать в одном месте. Можно же создать свой класс, типа MyFileNotFoundException, в котором определить все необходимые поля и методы доступа. 

Автор: Nofate 14.9.2011, 19:31
Т.е. вы хотите вызвать некоторую чужую библиотеку, которая неизвестно что делает с неизвестным вам набором файлов, и в случае экспшена в ней получить название файла?

Автор: Farmazon 15.9.2011, 05:59
new File(sFileName).getName() не катит?

Автор: saneea 15.9.2011, 08:43
Цитата(COVD @ 14.9.2011,  19:30)
Цитата

ловить исключение мне нужно в одном месте

Наверное, логично FileNotFoundException ловить именно в том месте, где имя файла определяется. Тогда такая конструкция вполне приемлема. А в секции catch можно создать и выбросить наверх новое исключение, если требуется все исключения обрабатывать в одном месте. Можно же создать свой класс, типа MyFileNotFoundException, в котором определить все необходимые поля и методы доступа.

Ну вот по видимому так и придется делать... хотя это слегка раздует код + нужно не забыть сделать такую "обёртку" во всех местах + не забывать делать такую "обёртку" при появлении таких новых мест.

Цитата

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

нет, код свой, но не хотелось его перелопачивать, но по видимому придётся.

Цитата

new File(sFileName).getName() не катит?

Не понимаю как это можно использовать. У меня ведь нет sFileName, если я просто поймал java.io.FileNotFoundException.

Всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)