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

当我的类和文本文件在一个可执行的JAR文件中时,我如何写代码来访问一个文本文件?

竺辉
2023-03-14

我知道这个问题以前被问过很多很多次,但答案似乎对我没有帮助。这是我的具体问题:

我有一个类“TaQL”,它从其void main(String-args[])方法中访问两个文本文件。这两个文本文件与这个类在同一个包中:包“taql”。以下代码在Eclipse(Mars)IDE中运行良好:

    String stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
    String input = TaQL.class.getResource(input).toURI().getPath();

当我输出这两个字符串时,我得到了资源的正确路径,代码随之运行。

然而,当我在将所有内容打包到JAR中后使用此方法时,两个字符串都返回“null”。

下面是我的代码在非JAR版本中对这些文本文件所做的事情

    < li >获取每个文本文件的文件名字符串。 < li >从一个字符串创建新的File对象,从另一个字符串创建新的FileReader对象。 < li >它们分别被输入到非索引字表函数和数据输入迭代器。

我真正需要做的是,一旦这两个文本文件都在 JAR 中,就可以无缝访问它们,然后使用对它们的引用来创建 File 和 FileReader 对象。

这是我在主要方法中输入的一些诊断代码。它将显示JAR文件所看到的文件(注意输入和非索引字表都是文件名字符串):

    System.out.println("intput argument" + input);

    System.out.println("Resource path"+TaQL.class.getResource(stoplist));

    stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
    input = TaQL.class.getResource(input).toURI().getPath();

    System.out.println("Path"+stoplist);
    System.out.println("Input path" + input);

运行我的程序的JAR版本的命令行输出(注意,当我从Eclipse运行时,这段代码工作得非常好)

共有1个答案

戚侯林
2023-03-14

要实际访问可能在jar文件中的这些文件的字节,您需要使用Class#getResourceAsStream(stop List)。URI将为您提供一个不能与File或FileInputStream一起使用的路径。它在您的IDE中工作,因为IDE尚未打包文件,因此#getPath会找到一个实际的文件路径。

所以试试这个:

try (Reader inputReader = 
        new InputStreamReader(
            TaQL.class.getResourceAsStream(input))) {

    BufferedReader in = new BufferedReader(inputReader);

    for (String line; (line = in.readLine()) != null;) {
        // do something with the line
    }
}
 类似资料:
  • 问题内容: 大家好,菜鸟Java问题。 我有一个Java项目,并且想在可执行jar中包含一个文本文件。现在,该文本文件位于默认程序包中。 InputFlatFile currentFile =新的InputFlatFile(“ src / theFile.txt”); 正如您使用src所看到的那样,我使用该行抓取文件。但是,这不适用于可执行jar。 有人可以让我知道如何将文件保存在可执行jar中,

  • 我有一个资源文件夹/包在我的项目的根,我“不”想加载某个文件。如果我想加载某个文件,我会使用class.getResourceStream,我会很好!!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流并读取内容...假设在运行时之前未确定文件名...我该怎么办?有没有一种方法可以在你的jar文件中得到一个文件夹中的文件列表?请注意,包含资源的Jar文件与

  • 问题内容: 我如何知道要从WAR中获取文件的文件参考。 WAR的结构为: WAR SRC -Model -Network structure WebContent META-INF WEB-INF LIB JSP位于WebContent下,我已将config.txt文件放在WebContent文件夹下,并尝试通过 BufferedReader in = new BufferedReader(new

  • 如何将一个文本文件复制到另一个文本文件中?我试过这个: 这只是在中留下以下值:。 我做错了什么?

  • 问题内容: 我有多个JAR文件,必须将其添加到Eclipse中的classpath中。 是否可以将30个文件合并为一个文件并包含该文件? 问题答案: 您可能想看看jarjar。 如果您使用Ant任务,也可以进行以下操作:

  • 问题内容: 在java中如何读一个文本文件? 问题答案: ASCII是一个TEXT文件,因此你将用于读取。还支持使用读取二进制文件。如果正在读取的文件很大,那么你可能希望在上使用来提高读取性能。 仔细阅读本文,了解如何使用 在Java 7中: (docs) 或 (文档) 在Java 8中: (文档)

  • 我有这段代码,它从用户那里获取输入,他们的卡号,并显示该卡以及它的过期日期。 代码从fence.txt获取卡号和日期。 fence.txt内部的数据显示为 当用户搜索卡123456时,结果如下 我一直在想怎么才能把它变成 我一直想把它炸开,但没有效果。我能对它做什么?我还希望它说“没有找到”,如果卡在文件中没有找到。

  • 问题内容: 我想在此处创建的文件夹中创建一个文本文件。 但是此代码不会将文本文件创建到该文件夹​​中。而是将文本文件放置在该文件夹之外。 问题答案: java.io.File的构造函数之一带有一个父目录。您可以改为: