在.jar中读取文本文件

时间:2012-09-29 23:05:16

标签: java io inputstream bufferedreader

让我们说我正在创建一个需要复制.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;
}

会起作用,但我试过了,它给了我各种错误。我认为问题是通过Main方法声明InputStream in它希望文件在那里的方式。我怎么会改变这种情况所以不是这样的?提前谢谢!

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

编辑2: 好吧,我觉得问题没有得到解决,我有点加重,主要是因为我很累。上面有一个不同程序的WORKS代码,dir只是"text.txt"

这不适合我做什么,我不确定为什么。再次,该文件处于CLASSPATH状态,因此dir仅为"text.txt"。我希望我的.txt文件为"files/text.txt"。我该怎么做?

编辑3: 我不知道我是否提到它,但我的.txt文件是在我的罐子里面。只是为了消除困惑。实际上,.jar文件的路径无关紧要,因为我不应该使用dir输入它。此外,主类位于包main中,.txt文件位于包files中,位于名为copy的同一程序中。另外,我尝试将txt文件移动到与main类相同的包中,也不起作用。

编辑4: 顺便说一句,包含从jar读取方法的包是IO。类io中的内容位于包IO内。我的所有文件(例如images和txt)都在包files中。只是觉得id清楚了。我尝试将txt文件移动到io类的包中,这样就可以了,但如果它在任何其他包中,即使我在dir中包含了包名,它也无法正常工作。关于为什么的任何想法?

1 个答案:

答案 0 :(得分:1)

.txt文件应位于 dir的根目录与您的类文件所在的目录相同。


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

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

dir = "text.txt";

  

编辑4:顺便说一句,包含读取方法的包   jar是IO。因为类io在包IO中。我所有的   文件如图像和txt都在包文件中。只是想到了身份   清楚了。我尝试将txt文件移动到io的包中   类,这工作,但如果它在任何其他包,即使我   包括在它不会工作的目录中的包名称。关于为什么的任何想法?

试试这个:

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

我相信如果您的结构如下,这将有效:

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