当前位置: 首页 > 面试题库 >

如何从Java中的类路径真正读取文本文件

南门祯
2023-03-14
问题内容

我正在尝试读取在CLASSPATH系统变量中设置的文本文件。不是用户变量。

我正在尝试将输入流传输到文件,如下所示:

将文件(D:\myDir)的目录放在CLASSPATH中,然后尝试以下操作:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");

将文件(D:\myDir\SomeTextFile.txt)的完整路径放在CLASSPATH中,然后尝试上述3行代码中的相同路径。

但是不幸的是,它们都没有起作用,我一直都在null进入InputStream in


问题答案:

在类路径上的目录中,从同一类加载器加载的类中,你应该能够使用以下任一种:

// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

如果这些都不起作用,则表明还有其他问题。

因此,例如,使用以下代码:

package dummy;

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }
}

而这个目录结构:

code
    dummy
          Test.class
txt
    SomeTextFile.txt

然后(使用Linux机器上的Unix路径分隔符):

java -classpath code:txt dummy.Test

结果:

true
true


 类似资料:
  • 问题内容: 这是我想做的,我想知道是否有任何Spring类可以帮助实现。对于这个特定的问题,我不必使用spring,我只是将其与其他所有东西一起实现。 在我的DAO层中,我想外部化我的sql文件,也就是每个文件1个sql。我想读取并缓存sql语句,甚至可能作为spring bean单例。但是在我最初的挣扎中,我只是在类路径中加载一个sql文件时遇到问题… 春天有什么可以帮助您的吗?我已经阅读过文档

  • 是否可以传入文件路径或从csv中的其他文件读取?我的测试设置是这样的。 测试仪测试 CSV数据配置 我想在csv项目列和jmeter测试中包含一个文件,它将读取和发布json项目。

  • 问题内容: 如何从Java中classpath读取文本文件? 问题答案: 在类路径上的目录中,从同一类加载器加载的类中,你应该能够使用以下任一种: 如果这些都不起作用,则表明还有其他问题。 因此,例如,使用以下代码: 而这个目录结构: 然后(使用Linux机器上的Unix路径分隔符): 结果:

  • 问题内容: 我需要阅读Java包中包含的类。这些类在类路径中。我需要直接从Java程序执行此任务。你知道简单的方法吗? 问题答案: 如果你的类路径中包含Spring,则可以执行以下操作。 在包中找到所有用XmlRootElement注释的类:

  • 问题内容: 我只想从完整路径到文件获取文件夹路径。 例如,我想要得到(不包括)。 我已经尝试过这样的事情: 但是它给了我这样的结果: 这不是我需要的结果(为)。 关于如何获取文件路径的任何想法? 问题答案: 您几乎可以使用该功能了。您只需要加入字符串,如下所示。 虽然,我建议使用该函数来执行此操作,但是您只需要传递字符串即可,它将为您完成工作。由于您似乎在Windows上,因此也考虑使用该功能。一

  • 问题内容: 我需要在WebContent目录中获取文件的真实路径,以便我使用的框架可以访问该文件。它仅将String文件作为属性,因此我需要在WebContent目录中获取此文件的真实路径。 我使用Spring Framework,因此应该可以在Spring中解决。 问题答案: 如果您在servlet中需要此功能,请使用!