Java 读取my.jar中的文本文件

Java 读取my.jar中的文本文件,java,io,inputstream,bufferedreader,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);

假设我正在制作一个程序,需要在.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;
}
publicstringreadspecificfromjar(stringdir,int行){
字符串读取=null;
试一试{
InputStream in=getClass().getResourceAsStream(目录);
BufferedReader BufferedReader=新的BufferedReader(
新的InputStreamReader(in);
/**
*声明字符串变量并初始化读取
*/
read=bufferedReader.readLine();
对于(int i=1;i
会有用的,但我试过了,它给了我各种各样的错误。我认为问题在于以它希望文件与Main方法在那里的方式声明
InputStream。我将如何改变这一点,使它不是这样?提前谢谢

编辑: 由于有些混乱,我想澄清一下。对于字符串
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)都在包
文件中。我只是想把它弄清楚。我尝试将txt文件移动到
io
类的包中,这是可行的,但是如果它在任何其他包中,即使我在
dir
中包含包名,它也不会起作用。想知道为什么吗?

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


编辑:由于一些混乱,我想澄清一下。对于字符串 dir我正在输入文件/text.txt。这行不通。我该如何解决这个问题

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

dir = "text.txt";

编辑4:顺便说一下,保存从中读取的方法的包 这个罐子是木卫一。在类中,io位于包io中。我所有的 包文件中包含图像和txt等文件。我还以为我 把它弄清楚。我尝试将txt文件移动到io的包中 类,这很有效,但如果它在任何其他包中,即使我 将包名包含在目录中,它将不起作用。你知道为什么吗

试试这个:

dir = "../files/text.txt";
如果您的结构如下,我相信这会起作用:

   javaApp.jar
        |
   _____|_____
  |           |
files         IO
  |           |
  |           |
text.txt   io.class
.txt
文件应位于
dir的根目录中
与类文件所在的目录相同。


编辑:由于一些混乱,我想澄清一下。对于字符串 dir我正在输入文件/text.txt。这行不通。我该如何解决这个问题

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

dir = "text.txt";

编辑4:顺便说一下,保存从中读取的方法的包 这个罐子是木卫一。在类中,io位于包io中。我所有的 包文件中包含图像和txt等文件。我还以为我 把它弄清楚。我尝试将txt文件移动到io的包中 类,这很有效,但如果它在任何其他包中,即使我 将包名包含在目录中,它将不起作用。你知道为什么吗

试试这个:

dir = "../files/text.txt";
如果您的结构如下,我相信这会起作用:

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

.txt文件需要位于类路径中。您的JAR文件有清单吗?应该这样。将.txt文件的路径添加到类路径中,它应该可以正常工作。最好添加text.txt的字符编码,例如
newInputStreamReader(在“Windows-1252”中)
。所以在其他操作系统和国家,一切都很顺利
readLine()
在文件末尾生成null,否则将生成不带行尾的行。因此,请执行以下操作:
read+=br.readLine()+“\n”左右。尝试将“program/files/text.txt”作为“dir”传递,因为这是软件包名称好主意,但它不起作用:(您是否尝试将dir设置为像“/program/files/test.txt”这样的绝对值?txt文件需要在类路径中。您的JAR文件有清单吗?应该有。将.txt文件的路径添加到类路径中,它应该可以正常工作。最好添加text.txt的字符编码,例如
新的InputStreamReader(在“Windows-1252”中)