#java #eclipse
#java #eclipse
Вопрос:
У меня возникли проблемы с загрузкой данных в мою Java-программу. Программа сообщает, что файл существует, но FileReader выдает исключение FileNotFoundException. Я попробовал полный путь и убедился, что все файлы закрыты. Я использую среду IDE Eclipse. Есть предложения?
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
public class ReadCSV {
public static void main(String[] args) {
String filepath = "/Users/mrodgers/Documents/other/languages/java/eclipse/ReadCSV/src/data.csv";
//String filepath = "~/Desktop/data.csv";
//String filepath = "data.csv";
File mjr = new File(filepath);
System.out.println(mjr.exists());
FileReader fr = new FileReader(mjr);
// BufferedReader br = new BufferedReader(fr);
}
}
Комментарии:
1. Имеете ли вы право читать этот файл? @mjr2000
2. Распечатайте значения
mjr.canRead()
, чтобы проверить, есть ли у вас разрешение на чтение файла, иmjr.isFile()
чтобы убедиться, что это обычный файл, а не каталог или что-то еще.3. Они оба печатают true.
4. Каков точный текст исключения FileNotFoundException ?
5. Да, смотрите мой ответ. Когда вы говорите людям, что у вас есть исключение FileNotFound, они не понимают, что вы имеете в виду, что это ошибка компиляции, они думают, что это ошибка времени выполнения. У вас ошибка компиляции. Вы должны поместить try / catch вокруг этого конструктора, который имеет FileNotFoundException в качестве проверяемого исключения.
Ответ №1:
Это работает на моей машине, с именем файла, установленным на тот, который у меня есть, конечно.
Но мне пришлось обернуть создание FileReader в исключение try / catch для FileNotFound — это то, что вы имеете в виду? Компилятор сообщает вам, что вы должны перехватить FileNotFound, если вы используете этот конструктор FileReader?
Если / пока вы этого не сделаете, eclipse должен (и делает на моей машине) пометить вызов конструктора FileReader как ошибку, поскольку это исключение не перехвачено.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class FilePlay
{
public static void main(String[] args) {
String filepath = "/Users/ralph/Documents/My Chess Database/r-b.pgn";
//String filepath = "~/Desktop/data.csv";
//String filepath = "data.csv";
File mjr = new File(filepath);
System.out.println(mjr.exists());
try
{
FileReader fr = new FileReader(mjr);
BufferedReader br = new BufferedReader(fr);
}
catch (FileNotFoundException fnf)
{
fnf.printStackTrace();
}
}
}
Комментарии:
1. Зачем мне нужен try / catch для загрузки файла? Я пытаюсь загрузить данные. Попытка / перехват не загружает данные.
2. Проверяемое исключение — это исключение, которое, если в предложении «throws» в определении метода, должно быть проверено вызывающим его методом. Многие исключения являются «непроверенными», что означает, что они генерируются, но не должны проверяться вызывающими. Я думаю, что идея проверенных исключений заключалась в том, чтобы гарантировать, что вызывающие абоненты учитывали стандартные условия ошибок и обрабатывали их, а не просто тестировали «счастливый путь» и не рассматривали их. Сейчас модно использовать только непроверенные.
3. Ну, никто не сможет вам помочь, если вы не предоставите достаточно информации. Скопируйте сообщение об ошибке, вместо того, чтобы сообщать нам его имя; если это трассировка стека, нам нужно увидеть все целиком, с номерами строк. Вам также необходимо сообщить нам, чему соответствует номер первой строки в вашем коде. Сократите свою проблему до минимума, который демонстрирует проблему, вы часто узнаете, в чем проблема, самостоятельно делая это в одиночку. Мы готовы помочь, но мы не умеем читать мысли, и на самом деле большинство людей здесь неохотно догадываются об информации, которая не предоставлена.