#java
#java
Вопрос:
Я пытаюсь прочитать некоторые числа из текстового файла на java, чтобы определить некоторые фигуры и отобразить их в окне графического интерфейса, однако каждый раз, когда я пытаюсь запустить код и импортировать значения в текстовый файл, он выдает исключение FileNotFoundException, даже если файл находится в том же каталоге и существует и открывается нормально.
Код, вставленный ниже, и файловая структура для проекта.
Пожалуйста, есть идеи о том, как это решить? Заранее признателен.
Я проверил, что файл действительно существует, что он и делает, и если файл открывается и показывает данные, которые он также показывает, и что файл не поврежден, что это не так.
public static void addShapes(){
BounceBox box = new BounceBox(700,500);
FileInputStream fileIn = new FileInputStream("ex3.txt");
Scanner scan = new Scanner(fileIn);
box.start();
}
Комментарии:
1. вы знаете, что это в той же папке, но java этого не знает. Вы должны поместить свой код в try / catch, чтобы показать, что вы готовы справиться, если что-то пойдет не так.
2. @JustAFellowCoder Да, точно. И ex3.txt находится в той же папке, что и файл класса, и да, файл класса находится в пакете. Все та же проблема.
3. @NikosTzianas привет, может решить выбросить ее, хотя это не очень хорошая практика.
4. Работает ли окружение в try / catch? Если это так, то Мадху Бхат правильно ответил на вопрос.
5. Также попробуйте указать путь к файлу, начиная с пакета, в пакете или игнорируя пакет. Итак, если это находится в пакете com.bif и в папке rsc, тогда попробуйте «com/bif/rsc/ex3.txt «или просто «rsc/ex3.txt » (извините за спам)
Ответ №1:
Если вы видите ошибку, она гласит
Некомпилируемый исходный код — незарегистрированное исключение java.io.FileNotFoundException; должно быть перехвачено или объявлено выброшенным
Это означает, что это не исключение во время выполнения, когда файл не найден, но это исключение во время компиляции. Это связано с приведенной ниже строкой:
FileInputStream fileIn = new FileInputStream("ex3.txt");
Это означает, что в этой строке есть возможность FileNotFoundException
, и что ее следует либо добавить в сигнатуру метода, как показано ниже:
public static void addShapes() throws FileNotFoundException {
BounceBox box = new BounceBox(700,500);
FileInputStream fileIn = new FileInputStream("ex3.txt");
Scanner scan = new Scanner(fileIn);
box.start();
}
или строка должна быть окружена try-catch
блоком, перехватывающим FileNotFoundException
, как показано ниже:
public static void addShapes(){
BounceBox box = new BounceBox(700,500);
try {
FileInputStream fileIn = null;
fileIn = new FileInputStream("ex3.txt");
Scanner scan = new Scanner(fileIn);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
box.start();
}
Комментарии:
1. Пробовал оба, но проблема все та же. Есть другие идеи?
2. Если вы пробовали оба, @MahmoudYassine, то ошибка, которую вы получаете, не будет такой же. Не могли бы вы подтвердить, получаете ли вы другую ошибку после добавления моего предложения?
3. Только что запустил код со второй правкой, и ошибка выглядит следующим образом: run: java.io.FileNotFoundException: ex3.txt (Система не может найти указанный файл) в java.io.FileInputStream.open0 (собственный метод) в java.io.FileInputStream.open(FileInputStream.java:195) в java.io.FileInputStream.<init>(FileInputStream.java:138) в java.io.FileInputStream.<init>(FileInputStream.java: 93) в bounceboxapp.Main.addShapes(Main.java:131) в bounceboxapp.Main.main(Main.java:37)
4. @MahmoudYassine да, теперь файл не найден, если вы видите, что это ошибка, отличная от предыдущей.
5. Просто снова запустил код и ввел полный путь к файлу, и все сработало!!! Спасибо за вашу помощь!!
Ответ №2:
public static void addShapes() {
BounceBox box = new BounceBox(700,500);
try {
FileInputStream fileIn = new FileInputStream("ex3.txt");
Scanner scan = new Scanner(fileIn);
} catch(FileNotFoundException e) {
e.printStackTrace();
}
box.start();
}
Комментарии:
1. Просто совет, @JuanRomo, вам нужно добавить объяснение к ответу, поскольку, просто взглянув на фрагмент кода, OP может не понять аргументацию, лежащую в основе ответа. Добавление объяснения помогает. И добро пожаловать в StackOverflow 🙂
Ответ №3:
Вы получаете «Незарегистрированное исключение», что означает, что ваш код может генерировать исключение (которое является FileNotFound Exception), и вы его не перехватываете. Поэтому окружите свой код try-catch.
FileInputStream fileIn = null;
try {
fileIn = new FileInputStream("ex3.txt");
} catch (FileNotFoundException ex) {
// catch your exception here.
}
Scanner scan = new Scanner(fileIn);
Ответ №4:
Сегодня я столкнулся с той же проблемой, и мне потребовалось около двух часов, чтобы частично разобраться с ней. Это было так раздражающе. В зависимости от того, как структурирован код вашего класса, Java не позволяет вам читать текстовый файл в определении метода. Попробуйте прочитать это в методе main, затем примите этот объект (FileInputStream) в качестве входных данных для вашего метода addShapes (). Дайте мне знать, если это сработает 🙂