Пиша малко приложение, което чете 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 за отговор № 1new 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)