动态读取文件而不提供文件的静态引用

时间:2019-02-23 23:52:29

标签: java resources

我目前正在处理在Eclipse IDE中创建的简单Java项目。 我的项目结构如下图所示。在资源文件夹中,我有一个要动态读取的文件“ sample.txt”。

enter image description here

下面是我尝试的示例代码,该代码返回了 null 值。

  InputStream inputStream = getClass().getClassLoader().getResourceAsStream("../../sample.txt");

主要目标是我想读取文件(sample.txt),但不想提供该文件的硬编码引用,并且当该项目在任何其他系统中运行时,我的代码也应该可以工作。任何输入都会有所帮助。

1 个答案:

答案 0 :(得分:-1)

getResourceAsStream()在类路径中查找文件,并且类路径中没有“目录”,因此您不能给出"../../sample.txt"

getClass()方法也不是静态的,您不能直接从main方法运行它。您将获得

  

无法从Object类型静态引用非静态方法getClass()

您可以使用Thread.currentThread().getContextClassLoader().getResourceAsStream(FilePath)来在您的类路径中查找文件, 尝试以下代码,

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("sample.txt");

InputStreamReader streamReader = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(streamReader);
try {
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println(line);
    }
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

希望有帮助。