gpt4 book ai didi

java - 扫描仪抛出 FileNotFoundException 但使用 bufferedreader 和 inputstream 不会?

转载 作者:行者123 更新时间:2023-12-01 21:11:04 25 4
gpt4 key购买 nike

我正在尝试为猜词游戏编写代码,当我结合使用 bufferedreader 和 inputstream 时效果很好。但是当我使用扫描仪尝试它时,它找不到该文件,即使在这两种情况下该文件都位于同一文件夹中。它位于我的项目文件夹中 src 文件夹下名为 res 的文件夹中(我正在 eclipse 中编码)。

import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;

public class WordGen {

private final String filename = "/res/words.txt";
File file = new File(filename);
Scanner input = null;
private ArrayList<String> list = new ArrayList<>();

public WordGen() {
try {
input = new Scanner(file);

while (input.hasNextLine()) {
String w = input.nextLine();
list.add(w);
}
} catch (Exception ex) {
System.out.println("File not found.");
}
}

public String getword() {
if (list.isEmpty()) {
return "NOTHING";
}
return list.get((int) (Math.random() * list.size()));
}
}

public class test {

public static void main(String[] args) {
WordGen wordgen = new WordGen();
System.out.println(wordgen.getword());
}

}

我尝试寻找这个问题,但在这里找不到。我猜这是一个非常小的错误,我无法弄清楚。谢谢并致以问候。

编辑:这是其他有效的代码(其他一切与以前相同):

public WordGenerator() 
{
try(InputStream input = getClass().getResourceAsStream(fileName);
BufferedReader bfreader = new BufferedReader(new InputStreamReader(input)))
{
String line = "";
while ((line = bfreader.readLine()) != null)
words.add(line);
}
catch (Exception e)
{
System.out.println("Couldn't find file");
}
}

最佳答案

扫描仪正在尝试加载文件 - 并且您提供了绝对文件名/res/words.txt

为了创建 InputStream,您需要加载一个资源,并为其指定一个绝对资源名称,即使您已经调用变量fileName:

getClass().getResourceAsStream(fileName)

这是可行的,因为它可以从类路径加载名为/res/words.txt的资源,但它不会加载具有文件名的文件/res/words.txt 的 em>。

如果您从 src 目录运行代码,则可以使用文件名 res/words.txt...或者您可以坚持使用 getResourceAsStream,这可能是一个更好的主意,因为它不依赖于您的工作目录,并且即使您的代码和资源打包到 jar 文件中也将继续工作。

如果您确实想使用 Scanner,您始终可以使用 new Scanner(input) - 有一个 Scanner 构造函数接受 >输入流

关于java - 扫描仪抛出 FileNotFoundException 但使用 bufferedreader 和 inputstream 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com