WedX - журнал о программировании и компьютерных науках

Исключение в потоке main java.io.FileNotFoundException: (система не может найти указанный файл) при запросе пути к файлу

У меня есть java-программа, в которой мне нужно попросить пользователя ввести путь к файлу csv на своем компьютере, который затем должен запросить определенную строку в файле, найти ее, а затем распечатать все строки с этой строкой .

Программа работает просто отлично, когда я жестко закодирую путь к файлу в строку, например String path = "C:\Users\Shinky\IdeaProjects\Enumeration\src\Salmon.csv", но как только я вручную ввожу путь к файлу, я получаю: Exception in thread main java.io.FileNotFoundException: java.io.FileInputStream@1b6d3586 (система не может найти указанный файл)

Я пытался сохранить файл непосредственно под моим проектом, а также в папке src, но каждый раз получаю одну и ту же ошибку. На данный момент я не знаю, что делать, или было бы проще запросить путь к файлу за пределами моей IDE в целом, любая помощь будет принята с благодарностью.

Код:

import java.io.*;

public class StageReport {

    private static StageReport run;         //StageReport object
    private static FileInputStream path;    //Object path for csv file
    private Stage stage;                    //Object stage
    private static String choice;           //String choice for input
    private static String file;             //String inFile for csv file path input

    /**
     * constructor
     */
    public StageReport(Stage stage){
        this.stage = stage;
    }//end StageReport


    /**
     * finds and outputs correct mortality rates of fish
     */
    public void reader() throws Exception{

        //String path = "C:\\Users\\Shinky\\Desktop\\Salmon.csv";
        String line;

        BufferedReader br = new BufferedReader(new FileReader(String.valueOf(path)));//BufferedReader reads csv file

        //switch for enum Stage class
        switch (stage) {
            case FISH:
                while ((line = br.readLine()) != null) {
                    String[] values = line.split(",");//csv file lines split from ,
                    //searches through file to find stages that correspond with user input and outputs correct year, stage and mortality rate
                    if(values[1].equalsIgnoreCase("Fish Entry")){
                        System.out.println(values[0]+" "+values[1]+" "+values[2]);
                    }

                }
                break;

            case GROW:
                while ((line = br.readLine()) != null) {
                    String[] values = line.split(",");//csv file lines split from ,
                    //searches through file to find stages that correspond with user input and outputs correct year, stage and mortality rate
                    if(values[1].equalsIgnoreCase("Grow-out")){
                        System.out.println(values[0]+" "+values[1]+" "+values[2]);
                    }

                }
                break;

            case HARVESTING:
                while ((line = br.readLine()) != null) {
                    String[] values = line.split(",");//csv file lines split from ,
                    //searches through file to find stages that correspond with user input and outputs correct year, stage and mortality rate
                    if(values[1].equalsIgnoreCase("Harvesting")){
                        System.out.println(values[0]+" "+values[1]+" "+values[2]);
                    }

                }

                break;

            default:
                System.out.println("No valid entries found");//prompt for no entries found in csv file
                break;
        }

    }//end reader

    /**
     * constructor
     */
    public static void main(String[] args) throws Exception{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//BufferedReader declared
        System.out.print("Enter input file path and name: ");
        file = br.readLine();
        System.out.println("You entered: " + file);
        path = new FileInputStream(file);

        System.out.print("Enter the stage you would like to see: ");
        choice = br.readLine();


        //checks if user input matches enum Stage strings
        if (choice.equalsIgnoreCase(String.valueOf(Stage.FISH))) {
            run = new StageReport(Stage.FISH);
            run.reader();
        } else if (choice.equalsIgnoreCase(String.valueOf(Stage.GROW))) {
            run = new StageReport(Stage.GROW);
            run.reader();
        } else
            run = new StageReport(Stage.HARVESTING);
        run.reader();

    }//end main

}//end StageReport

enum Stage{ FISH("Fish Entry"), GROW("Grow-out"), HARVESTING("Harvesting");

    private String name;        //String name for enum names


    /**
     * Sets String names
     * @param name the names of the Strings in the enum classs
     */
    Stage(String name) {
        this.name = name;
    }//end Stage

    @Override
    public String toString() {
        return name;
    }//end String

}//end Stage


  • попробуйте использовать прямые slshes 13.10.2020
  • Я пробовал оба, к сожалению, ничего не работает, даже когда я пробую одинарное или двойное движение вперед или назад. 13.10.2020
  • Красный флаг кажется String.valueOf(path) - path уже не String ? 13.10.2020
  • Вы пытаетесь использовать FileInputStream в качестве имени файла. Посмотрите на свой код - путь, который работал, представляет собой строку, теперь вы изменили путь на FileInputStream. Удалите String.valueOf() и просто передайте путь конструктору FileReader. 13.10.2020
  • Измените FileInputStream path на File path, измените String.valueOf(path) только на path и измените path = new FileInputStream(file) на path = new File(file) в main(String[] args) 13.10.2020
  • Большое спасибо, теперь наконец-то это работает. Не могли бы вы объяснить мне разницу между fileinputstream и просто файлом? Я понимаю, где я ошибся во всем остальном. 13.10.2020
  • Файл представляет собой именованное место в файловой системе, которое может существовать или не существовать. FileInputStream — это последовательность байтов, которую вы получаете при чтении данных, содержащихся в файле (который, очевидно, должен существовать). 13.10.2020

Ответы:


1

Попробуйте это, данный файл находится в папке src.

 InputStream stream = this.getClass().getResourceAsStream(file);
 BufferedReader br = new BufferedReader(new InputStreamReader(stream));//BufferedReader 
 reads csv file
13.10.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]