当前位置: 首页 > 知识库问答 >
问题:

从同一个包中读取文件

湛同
2023-03-14

我一直在努力阅读java项目中的文本文件,我一整天都在寻找解决方案,我尝试了很多方法,但没有一个有效。其中一些:(另外,我必须使用文件和扫描程序类)

String file = "fileTest.txt";
var path = Paths.get("test", file);
System.out.println(path);
System.out.println(Files.readString(path));

异常线程"main"java.nio.file.NoSuchFileExc0019: test\fileTest.txt

    URL url = ClassLoader.class.getResource("fileTest.txt");
    File file = null;
    file = new File(url.toURI());
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(" ");

    while(scanner.hasNext()) {
        System.out.println(scanner.toString());
    }

异常线程"main"java.lang.NullPointerExc0019

    File file = new File("../test/fileTest.txt");
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(" ");

    while(scanner.hasNext()) {
        System.out.println(scanner.toString());
    }

    scanner.close();

线程“main”java中出现异常。木卫一。FileNotFoundException:。。\test\fileTest。txt(系统找不到指定的路径)

共有3个答案

侯涵煦
2023-03-14

使用BufferReader读取文件,使用try with resource在处理终止时自动关闭资源。

请参见Javatry-with-Resources:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

编辑:确保已将文件夹作为资源包含在生成路径中。如何在Eclipse中将资源文件夹添加到Java项目中

String inputFile = "test/fileTest.txt";
List<String> lines = new ArrayList<>();

try(BufferedReader bufferedReader = new BufferedReader(new FileReader(inputFile))) {

    String line = bufferedReader.readLine();

    while(line != null){
        lines.add(line);
        line = bufferedReader.readLine();
    }

} catch (IOException e) {
    e.printStackTrace();
}
贝镜
2023-03-14

所有关于相对路径的答案都将起作用或不起作用,这取决于运行程序时您的工作目录是什么。如果您真的希望您的文件位于类路径中,您要做的是将其用作资源,并查看如何在运行时加载资源。另一方面,如果你想像对待任何其他文件一样对待它,如果你期望任何相对路径工作,或者在某个已知的地方指定绝对路径,比如配置,你需要知道运行时的工作目录是什么文件。

雷献
2023-03-14

这里的问题是项目结构和如何定位该文件。通常,您的java类文件应该存在于目录src/main/java中,而您的资源文件应该存在于src/main/资源中。如果遵循此约定,则可以使用ClassLoader获取资源。

        try (InputStream input = getClass().getClassLoader().getResourceAsStream("test.txt");
             Scanner scanner = new Scanner(Objects.requireNonNull(input)).useDelimiter(" ")) {
            while(scanner.hasNext()) {
                System.out.println(scanner.toString());
            }
        } catch (IOException ioe) {
            throw new RuntimeException("Something went wrong scanning file!", ioe);
        }
 类似资料:
  • 在Karaf中,包有没有办法从另一个包读取属性文件? 我有 bundle1,它包含 bundle2 使用的一些类(bundle1 通过 maven-bundle-plugin 导出包含这些类的包,bundle2 导入它)。但是 bundle2 还需要使用 bundle1 中的属性文件。除了类之外,还有没有办法从 bundle1 访问一个文件? 据我所知,一种选择是通过features文件将属性部署

  • 我试图读取一个名为“numbers.txt”的文件,该文件中填充了整数(每行一个整数,没有空行)。我想把数字放入一个数组,然后返回这个数组(method)。无法找到文件,因此返回null。如果我把文件“numbers.txt”和Class放在同一个文件夹中,它会工作,但我不知道如果我把“numbers.txt”文件放在resources文件夹中,为什么它不工作。我想可以把它放到那里吗?main只是

  • 我正在使用Intellij Idea-2021.3.2和Java8。在Intellij中,我无法读取同一模块中另一个包中的文件。该文件位于main而不是资源文件夹下。但在Eclipse中,我可以读取。 例如。下面的代码在 eclipse 和 intellij 中打印不同的输出。 在Intellij中,代码打印“资源为空”,但在eclipse中,代码打印“资源已找到!!”。 在intellij中是否

  • 问题内容: 我创建了一些代码,要求用户输入int值,然后将其传递给我的第一个方法parity()。然后,Parity()会告诉用户它是奇数还是偶数。该方法完成后,我希望我的主程序打开与程序位于同一程序包中的文件,但我的异常不断出现,并终止输出“找不到文件或无法打开文件”的程序是一个简单的修复程序,但是我尝试的大部分操作并没有使它变得更好。到目前为止,这是我的代码: 问题答案: 我不确定我是否理解正

  • 我正在寻找一种在读取字节(作为字节[])和从文件中读取字符串行之间切换的方法。我知道字节[]可以通过FileInputStream从文件中获取,字符串可以通过BufferedReader获取,但同时使用这两个字节是有问题的。我知道字节段有多长。当我写文件时,字符串编码可以保持不变。该文件类型是一个仍在开发中的自定义文件类型,因此我可以更改向其写入数据的方式。 我怎么能读取字符串和字节[]s从相同的

  • 我正在使用python,我有一个文件(