【问题标题】:Reading a text file in my .jar在我的 .jar 中读取文本文件
【发布时间】:2012-09-21 08:35:36
【问题描述】:

假设我正在制作一个程序,该程序需要在我的 .jar 文件中复制 .txt 文件中的所有行。它在包program.files 中,名为text.txt。我一直在寻找整个互联网,我找不到我要找的东西。我认为这个想法:

public String readSpecificFromJar(String dir, int line) {
    String read = null;
    try {
        InputStream in = getClass().getResourceAsStream(dir);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(in));

        /**
         * declare string variable and prime the read
         */
        read = bufferedReader.readLine();

        for (int i = 1; i < line; i++) {
            read = bufferedReader.readLine();
        }

        bufferedReader.close();
    } catch (IOException ioexception) {
        Dialogs.fail("Could not read txt file from the JAR!!! Error Code: 06");
    }

    return read;
}

会起作用,但我试过了,但它给了我各种错误。我认为问题在于声明InputStream in 的方式是它希望文件使用Main 方法就在那儿。我将如何改变这一点,所以事实并非如此?提前致谢!

编辑: 由于一些混乱,我想澄清这一点。对于字符串dir,我输入files/text.txt。它不会工作。我该如何解决这个问题?

编辑 2: 好吧,我觉得问题没有解决,而且我有点生气,主要是因为我很累。适用于不同程序的代码在上面,其中dir 就是"text.txt"

这对我正在做的事情不起作用,我不知道为什么。同样,该文件位于类路径中,因此dir 仅是"text.txt"。我希望我的 .txt 文件为 "files/text.txt"。我该怎么做?

编辑 3: 我不知道我是否提到过,但我的 .txt 文件在我的 jar 内。只是为了消除混乱。所以真的,.jar 文件的路径并不重要,因为我不应该用dir 输入它。此外,主类在包main 中,.txt 文件在包files 中,都在同一个名为copy 的程序中。另外,我尝试将 txt 文件移动到与 main 类相同的包中,但也没有用。

编辑 4: 顺便说一句,包含从 jar 读取方法的包是IO。正如io 类在包IO 中一样。我的所有文件(例如图像和 txt)都在包 files 中。只是想我清楚了。我尝试将 txt 文件移动到 io 类的包中,这有效,但如果它在任何其他包中,即使我在 dir 中包含包名,它也不会工作。有什么想法吗?

【问题讨论】:

  • .txt 文件需要在 CLASSPATH 中。你的 JAR 文件有清单吗?这应该。将 .txt 文件的路径添加到 CLASSPATH 中,它应该可以正常工作。
  • 最好加上text.txt的字符编码,比如new InputStreamReader(in, "Windows-1252")。因此,在其他操作系统和国家/地区一切正常。 readLine() 在文件末尾产生 null ,否则行 without 行结束。 read += br.readLine() + "\n"; 左右也是如此。
  • 尝试将“program/files/text.txt”作为“dir”传入,因为那是包名
  • 好主意,但没用 :(
  • 您是否尝试过像“/program/files/test.txt”一样将目录设为绝对目录?

标签: java io inputstream bufferedreader


【解决方案1】:

.txt 文件应该在dir 的根目录与你的类文件所在的目录相同。


编辑:由于一些混乱,我想澄清这一点。对于字符串 目录我正在输入文件/text.txt。它不会工作。我该如何解决这个问题?

类的路径是什么? (包含readSpecificFromJar()的类)如果.class文件和.txt文件都在同一个目录下,那么你应该这样:

dir = "text.txt";

编辑 4:顺便说一下,包含读取方法的包 罐子是 IO。因为类 io 在包 IO 中。我所有的 图片和txt等文件在包文件中。只是想id 清除它。我尝试将 txt 文件移动到 io 的包中 类,并且有效,但是如果它在任何其他包中,即使我 将包名称包含在它不会工作的目录中。有什么想法吗?

试试这个:

dir = "../files/text.txt";

如果您的结构如下,我相信这会起作用:

   javaApp.jar
        |
   _____|_____
  |           |
files         IO
  |           |
  |           |
text.txt   io.class

【讨论】:

  • @wbAnon 查看我回答的最后一部分 :)
猜你喜欢
  • 2014-05-24
  • 2012-10-09
  • 2015-04-21
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2015-12-23
  • 2018-12-22
  • 2013-06-01
相关资源
最近更新 更多