Java 从jar读取文本文件

Java 从jar读取文本文件,java,file,text,jar,Java,File,Text,Jar,我在从jar中读取文本文件时遇到问题。我在解压时管理了它,但现在我已经存档了,它无法工作。 罐子有: BTA.jar Splash.class *.类 Splash.txt 等等 现在,我正在使用BufferedReader和FileReader f = new FileReader("Splash.txt"); in = new BufferedReader(f); 但通过谷歌搜索,我知道它只从jar外部读取文件 我的问题是:如何从jar内部读取文件?假设您正在执行BTA.jar

我在从jar中读取文本文件时遇到问题。我在解压时管理了它,但现在我已经存档了,它无法工作。 罐子有:

  • BTA.jar
    • Splash.class
    • *.类
    • Splash.txt
    • 等等
现在,我正在使用BufferedReader和FileReader

 f = new FileReader("Splash.txt");
 in = new BufferedReader(f);
但通过谷歌搜索,我知道它只从jar外部读取文件


我的问题是:如何从jar内部读取文件?

假设您正在执行
BTA.jar
,您可以使用

InputStream in = YourClass.class.getResourceAsStream("/Splash.txt");
检索
InputStream
并通过
InputStreamReader
将其传递给
BufferedReader


传递给方法的路径的格式规则在javadoc中为
类定义。

问题在于
Splash.txt
不是一个文件,它的字节序列在一个(轻微的)压缩文件中,该文件在Jar/Zip标准指定的目录中有一个命名条目

这意味着您可以使用
FileReader
来读取文件,例如,您需要通过
Class
资源管理API来访问文件

getClass().getResourceAsStream("/Splash.txt");
或者,如果您试图从
static
上下文中读取它

Splash.class.getResourceAsStream("/Splash.txt");
不要忘记,当您完成时,您将负责关闭
InputStream
,例如

try (InputStream is = getClass().getResourceAsStream("/Splash.txt")) {....

jar只是一个zip文件,可以这样读取

ZipFile file = new ZipFile("/home/Desktop/myjar.jar");
Enumeration<? extends ZipEntry> entries = file.entries();

while (entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();

    if (entry.getName().startsWith("splash")) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream(entry)))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
}
zipfilefile=newzipfile(“/home/Desktop/myjar.jar”);

枚举是否在
Spash
中运行
main
方法?否,
main
方法位于名为
main
的类中,现在我已将其存档