我应该如何在不获取 FileNotFoundException 的情况下读取文本文件?
How should I read a text file without getting FileNotFoundException?
我正在为我的计算机科学的期末作业编写一个单词搜索生成器程序 class。
我创建了一个名为 "Words" 的文本文件,其中包含字母表中 26 个字母中每个字母的 10 个单词。我指的是通过读取此文本文件并将单词存储在数组列表中。
我使用了我在此处获得的反馈并进行了一些更改。我已经定义了 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)
首先,您没有在 s.matches("^[a-z]{3," + maxLength + "]$"
.
中正确地关闭括号 { }
很可能文件名没有正确给出。
检查它是否类似于:readWords("C:/Users/Username/Desktop/words.txt")
如果您的文本文件在桌面上。
如果您真正需要做的只是阅读文件中的所有行,那么在更现代的 Java 版本中有一个快捷方式:Files.lines
。
事实上,如果您有一个匹配单词的模式,那么您可以使用 Matcher.results
和 MatchResult.group
一次性完成所有操作:
Files.lines(path)
.map(pattern::matcher)
.flatMap(Matcher::results)
.map(MatchResult::group)
.collect(Collector.toList());
但是我不确定您是否已经研究过流或者您可以使用哪些库。
请注意,我已在此处收集到列表,但收集到集合(假设您不需要了解重复项)或地图(如果是,则以首字母作为键)可能更有意义对单词的使用很重要)。
我正在为我的计算机科学的期末作业编写一个单词搜索生成器程序 class。
我创建了一个名为 "Words" 的文本文件,其中包含字母表中 26 个字母中每个字母的 10 个单词。我指的是通过读取此文本文件并将单词存储在数组列表中。
我使用了我在此处获得的反馈并进行了一些更改。我已经定义了 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)
首先,您没有在 s.matches("^[a-z]{3," + maxLength + "]$"
.
中正确地关闭括号 { }
很可能文件名没有正确给出。
检查它是否类似于:readWords("C:/Users/Username/Desktop/words.txt")
如果您的文本文件在桌面上。
如果您真正需要做的只是阅读文件中的所有行,那么在更现代的 Java 版本中有一个快捷方式:Files.lines
。
事实上,如果您有一个匹配单词的模式,那么您可以使用 Matcher.results
和 MatchResult.group
一次性完成所有操作:
Files.lines(path)
.map(pattern::matcher)
.flatMap(Matcher::results)
.map(MatchResult::group)
.collect(Collector.toList());
但是我不确定您是否已经研究过流或者您可以使用哪些库。
请注意,我已在此处收集到列表,但收集到集合(假设您不需要了解重复项)或地图(如果是,则以首字母作为键)可能更有意义对单词的使用很重要)。