Передача файла в качестве параметра в другой класс в Java приводит к ошибке «Файл или каталог не найден» - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь передать файл из метода main в другой класс, который должен его обрабатывать, но, хотя файл распознается в основном классе, он выдает эту ошибку во втором.

Exception in thread "main" java.io.FileNotFoundException: file:/home/giovanni/Desktop/spring-course/exercises-part2/word-inspection/target/classes/words.txt (File o directory non esistente)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.util.Scanner.<init>(Scanner.java:639)
    at com.vanny96.WordInspection.<init>(WordInspection.java:16)
    at com.vanny96.App.main(App.java:13)

Путь к файлу правильный, и файл там, так что я понятия не имею, почему он не работает.

Я пытался найти решение, но не смог его найти, и тот факт, что файл работает нормально в основном методе, а не в другом, меня сильно смутил, если вы могли бы указать мне на поток, где это решил, что будет достаточно!

Вот код:

Главное приложение

package com.vanny96;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL;

public class App {
    public static void main(String[] args) throws FileNotFoundException
    {
        URL fileUrl = App.class.getClassLoader().getResource("words.txt");
        File file = new File(fileUrl.toString());

        WordInspection inspector = new WordInspection(file);        
    }
}

WordInspection class

package com.vanny96;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class WordInspection {
  private File file;
  private Scanner reader;

  public WordInspection(File file) throws FileNotFoundException {

    this.file = file;
    this.reader = new Scanner(this.file);
  }
}

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, что Сканер не может разрешить файл как URL, но может разрешить его как URI.

Если вы измените строку:

File file = new File(fileUrl.toString());

до

File file = new File(fileUrl.toURI());

Ваш сканер должен иметь возможность разрешить файл (я проверял его). Вам нужно будет добавить дополнительный класс throws для метода toUri().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...