Как я должен прочитать текстовый файл, не получая FileNotFoundException? - PullRequest
0 голосов
/ 02 января 2019

Я пишу программу Word Search Generator для окончательного задания на моем уроке информатики.

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

Я использовал отзывы, которые получил здесь, и внес некоторые изменения. Я определил, что такое fileName, и вставил точное местоположение моего текстового файла.

Вот мой обновленный код:

public static List<String> readWords () throws IOException {

        String fileName = ("C:\\Users\\Dell\\workspace\\Final Summative\\src\\Words.txt");

        int maxLength = Math.max(rows, cols);

        List<String> words = new ArrayList<>(); // The words from the Words text file will be stored in this array list

        try (Scanner sc = new Scanner(new FileReader(fileName))) {      

            while (sc.hasNextLine()) {

                String s = sc.next().trim().toLowerCase();

                if (s.matches("^[a-z]{3," + maxLength + "}$")) { // We will pick only words with length = 3 and max. length, and [a-z] inside

                    words.add(s.toUpperCase());

                }//end of if

            }//end of while loop

        } catch (IOException e) {

            // Manage the error!

            e.printStackTrace();

        }//end of catch

        return words;

    }//end of readWords(fileName)

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

java.io.FileNotFoundException: C:\Users\Dell\workspace\Final Summative\src\Words.txt (The system cannot find the file specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)
    at WordSearch.readWords(WordSearch.java:76)

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если все, что вам действительно нужно сделать, это прочитать все строки в файле, то в более современных версиях Java есть ярлык: Files.lines.

На самом деле, если у вас есть шаблон, который соответствует словам, вы можете использовать Matcher.results и MatchResult.group, чтобы сделать все это за один раз:

Files.lines(path)
    .map(pattern::matcher)
    .flatMap(Matcher::results)
    .map(MatchResult::group)
    .collect(Collector.toList());

Однако я не уверен, изучали ли вы потоки или какие библиотеки вам разрешено использовать.

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

0 голосов
/ 02 января 2019

Прежде всего, вы не правильно закрыли скобки {} в s.matches("^[a-z]{3," + maxLength + "]$".
И, скорее всего, имя файла указано неправильно.
Проверьте, что-то вроде: readWords("C:/Users/Username/Desktop/words.txt") на случай, если ваш текстовый файл находится на рабочем столе.

...