我应该如何在不获取FileNotFoundException的情况下读取文本文件?

时间:2019-01-02 01:52:37

标签: java file-io computer-science filenotfoundexception file-read

我正在为我的计算机科学课的最终作业编写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 :(得分:0)

首先,您没有在s.matches("^[a-z]{3," + maxLength + "]$"中正确地将括号{}括起来。
而且很可能没有正确给出文件名。
检查是否类似:readWords("C:/Users/Username/Desktop/words.txt"),以防文本文件位于桌面上。

答案 1 :(得分:0)

如果您真正需要做的就是读取文件中的所有行,则Java的更现代版本中有一个快捷方式:Files.lines

实际上,如果您有一个匹配单词的模式,则可以使用Matcher.resultsMatchResult.group一次完成所有操作:

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

但是我不确定您是否已经研究了流或允许使用哪些库。

请注意,尽管这里收集到一个列表(假设您不需要了解重复项)或地图(如果对单词的使用)。