Java 项目(在 IntelliJ 中)中在哪里放置资源并访问它?那么如何读取它呢?

问题描述 投票:0回答:1

我有一个文本文件,我想从中读取,但我真的不知道如何从类路径导航到文件所在的路径。

这是我的项目结构: Project structure photo(Intellij)

public class Main {
    public static void main(String[] args) {
        URL fileURL = Main.class.getResource("resources/coding_qual_input.txt");
        if (fileURL != null) {
            File file = new File(fileURL.getFile());
            try {
                BufferedReader in = new BufferedReader(new FileReader(file));
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

我真的不知道文件是否正确,但现在

new FileReader(file)
让我明白了
null

那么,为什么

FileReader
无法读取我的文件?

由于

Main.class.getResource("resources/coding_qual_input.txt")
导致
file:/C:/Users/Jonas/IdeaProjects/Android%20ATC/pyramidDecoder/out/production/pyramidDecoder/resources/coding_qual_input.txt
,我不明白问题出在哪里。

我应该以某种方式沿着类路径导航吗?

感谢您的帮助!

java file path classpath filereader
1个回答
0
投票

好吧,正如我所怀疑的,文件夹名称中的空格 (%20) 似乎不太适合 URL,所以我重新创建了该行为并得到了

FileNotFoundException
(使用 Java 1.8)

使用

ClassLoader.getSystemResourceAsStream
一切正常,这里是:

public static void main(String[] args) throws IOException {
    InputStream inputStream = ClassLoader.getSystemResourceAsStream("resources/coding_qual_input.txt");
    if (inputStream != null) {
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
        for (String line = in.readLine(); line != null; line = in.readLine()) {
            System.out.println(line);
        }
        in.close();
        inputStream.close();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.