Ошибка Java FileNotFound, даже если файлы существуют и находятся в том же каталоге? как мне устранить?

#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 (). Дайте мне знать, если это сработает 🙂