Java 类在同一jar NPE中使用txt文件

Java 类在同一jar NPE中使用txt文件,java,jar,Java,Jar,我有一个类文件和一个包装在jar中的文本文件。这个问题以前在internet上已经解决过,但是当我尝试它时,我得到一个空指针异常,或者File f.exists()返回false。应该注意的是,我的代码不在包中。应该注意的是,当help.txt与jar放在同一个文件夹中时,它就会工作 `MyClass z = new MyClass(); String helpPath = z.getClass().getClassLoader().getResource("help.txt").toStrin

我有一个类文件和一个包装在jar中的文本文件。这个问题以前在internet上已经解决过,但是当我尝试它时,我得到一个空指针异常,或者
File f.exists()
返回false。应该注意的是,我的代码不在包中。应该注意的是,当help.txt与jar放在同一个文件夹中时,它就会工作

`MyClass z = new MyClass();
String helpPath = z.getClass().getClassLoader().getResource("help.txt").toString();
File f = new File(helpPath);
if (f.exists()){
     Desktop d = Desktop.getDesktop();
     d.open(f);`
还应该注意的是,我编写了代码来打开powershell,然后在没有指定类路径的情况下打开我的类文件

` Runtime.getRuntime().exec(new String[]{"cmd","/c","start","powershell","-noexit","/c","java -jar \"" + filename + "\""});`

jar中的资源不是文件。它不在文件系统中,而是jar中的一个zip条目。因此,您不能使用文件IO来读取它。如果您想让某个外部程序打开一个文件,那么它需要作为文件存在于文件系统中。你想实现什么?我希望用户在程序中键入“help”,让程序在jar中找到help.txt并打印出来。我不会称之为外部程序,因为它位于同一个jar中。对吗?在标准输出流上打印它?因为这不是
d.open(f)
所做的。如果您想对其进行预处理,那么可以使用getResourceAsStream()读取其中包含的内容,然后将读取的内容打印到System.out.Yes,d.open()是我的第一个想法,我改变了计划。对不起,那不清楚。