/ / Получаване на java.io.FileNotFoundException при опит за четене на файл - java, swing, jfilechooser, filenotfoundexception, opencsv

Получаване на java.io.FileNotFoundException при опит за четене на файл - java, swing, jfilechooser, filenotfoundexception, opencsv

Пиша малко приложение, което чете CSV файл и показва съдържанието в JList.

Сегашният ми проблем е, че new FileReader(file) код продължава да ми дава java.io.FileNotFoundException грешка и не съм много сигурна защо.

loadFile.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent actionEvent)
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("~/"));

if (fileChooser.showOpenDialog(instance) == JFileChooser.APPROVE_OPTION)
{
File file = fileChooser.getSelectedFile();
CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
fileLocation.setText(file.getAbsolutePath());

}
}
});

Отговори:

5 за отговор № 1
new File("~/")

~ е пряк път на Shell за домашната директория. Използвайте абсолютен път като

new File("/home/myself/")

Както е посочено от @pickypg, JFileChooser.setCurrentDirectory () настройва домашната директория на потребителя по подразбиране, ако прехвърлената директория е невалидна File() не тълкува ~ както Shell прави, JFileChooser стартира в домашната директория на потребителя - но това важи за всяка несъществуваща директория, например

new File("/Windows")   // JFileChooser would start in "Windows"
new File("/xWindows")   // JFileChooser would start in the user"s home directory

Както се посочва в документацията, домашната директория на потребителя е специфична за системата, но в MS Windows тя обикновено е папката "Моите документи".

Но дори когато използвате такъв несъществуващ път като "~ /", JFileChooser.getSelectedFile() връща правилния път, така че FileReader() не трябва да хвърля FileNotFoundException.


Въз основа на коментарите се оказва, че проблемът не е изключение по време на изпълнение, а грешка при компилиране, когато изключението не се улавя. Добави try{}catch{} блок около вашия FileReader() конструктор:

try {
CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
}catch(FileNotFoundException fnfe) {
// handle exception, e.g. show error message
}

1 за отговор № 2

Ако проблемът всъщност е в тази линия, а не там, където Андреас посочва, тогава конструирайте FileReader директно с file вместо да му дава път:

new FileReader(file)