Исключение FileNotFound, но существует файл (Java Eclipse) - PullRequest
0 голосов
/ 13 января 2020

Я не могу избавиться от этой ошибки FileNotFound, хотя файл существует. Любые идеи? (Есть сотни строк кода, так что я просто собираюсь вставить кусок вокруг ошибки, если это проблема, я могу выложить больше)

// method start
                System.out.println(System.getProperty("user.dir"));
                File names = new File("src/guiProject/nameList");
                System.out.println(names.getAbsolutePath());
                //                                !!!! V ERROR OCCURS HERE V !!!!
                BufferedReader br = new BufferedReader(new FileReader(names));
                try {
                    StringBuilder sb = new StringBuilder();
                    String line = br.readLine();

                    while (line != null) {
                        sb.append(line);
                        line = br.readLine();
                    }
                    String allNames = sb.toString();
                    userListArea.setText(allNames);
                } catch (IOException o) {
                    o.printStackTrace();
                } finally {
                    try {
                        br.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
//method end

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Может быть, вы находитесь не в той папке, о которой вы думаете.

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

0 голосов
/ 13 января 2020

Возможно, ваш Windows не показывает расширения файлов; nameList.txt? В противном случае рабочий каталог не находится в каталоге проекта с подкаталогом sr c.

A FileReader использует Charset по умолчанию, поэтому файл не является переносимым. Если вы запускаете приложение на другой платформе, чем у разработчика, кодировка неправильная. Лучше всего использовать UTF-8, полный Unicode.

Тогда чтение обрезает конец строки:

                while (line != null) {
                    sb.append(line).append("\r\n");
                    line = br.readLine();
                }

Вы можете сделать:

            Path names = Paths.get("src/guiProject/nameList.txt"); // File
            Path names = Paths.get(
                MyClass.class.getResource("/guiProject/nameList.txt").toURI()); // Resource

            String allNames = new String(Files.readAllBytes(names), StandardCharsets.UTF_8);
            userListArea.setText(allNames);

Если это чтение только файл, хранящийся в jar-файле приложения, это ресурс , а не диск файл .

...