Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署Jar时未找到文件异常_Java_Netbeans_Jar - Fatal编程技术网

Java 部署Jar时未找到文件异常

Java 部署Jar时未找到文件异常,java,netbeans,jar,Java,Netbeans,Jar,成功编译后,我从部署的jar中访问文件对象中的文件时遇到“未找到文件”异常。在这种情况下,文件放置在src的默认文件夹中,并通过src/filename.txt进行访问 甚至尝试了MyClass.class.getResource/file.txt.getPath;访问文件 请提供建议,即在netbeans中的何处放置文本文件以进行jar部署。您需要区分文件和资源。每个文件也是一个资源,但不是相反。在JAR文件中,没有文件,只有资源 加载资源也是通过类加载器完成的。因此,您必须首先检索类加载器

成功编译后,我从部署的jar中访问文件对象中的文件时遇到“未找到文件”异常。在这种情况下,文件放置在src的默认文件夹中,并通过src/filename.txt进行访问

甚至尝试了MyClass.class.getResource/file.txt.getPath;访问文件


请提供建议,即在netbeans中的何处放置文本文件以进行jar部署。

您需要区分文件和资源。每个文件也是一个资源,但不是相反。在JAR文件中,没有文件,只有资源

加载资源也是通过类加载器完成的。因此,您必须首先检索类加载器,然后用它加载资源:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL resourceUrl = loader.getResource(resourceName);
try (InputStream in = resourceUrl.openStream()) {
    // load bytes from the input stream here
}
// process the loaded resource bytes here
现在把文件放在哪里?你可以把它们放在罐子的根部。在项目内部,这意味着将资源文件放入src文件夹中。或者你把它们放在一个包里,放在需要它的类旁边

如果放在根目录中,则只能通过资源名称访问它们。如果将包放在子目录中,则必须在资源名称前面加上该路径的前缀-从根开始加上begingingin。例如:

URL resourceUrl = loader.getResource("my/pkg/win.txt");
只是为了方便:如果资源文件与需要该资源的类放在同一个包中,您也可以使用类本身而不是类加载器来加载:

URL resourceUrl = getClass().getResource("win.txt");
注意,在这种情况下,省略了目录结构


在您的示例中,创建了一个文件对象。如果您稍后使用该文件对象创建FileInputStream,那么您可以只使用InputStream,正如我前面所述,相反。

如果您不隐藏类和包的名称会更容易。谢谢,先生。这确实帮助了我。但当我试图从java执行运行时powershell命令以执行power shell脚本时,我得到**powershell-ExecutionPolicy RemoteSigned-noprofile-noninteractive/D:/workspace/Netbeans%20Projects/Project/src/res/PName.ps1**。但这是无效的。我想获取脚本文件的路径,以便jar可以获取它。对不起,我不明白。通常,您使用java-JAR从控制台运行JAR文件。。。jar中的文件。。。netbeans。。。powershell。。。网络发布。。。公猫执行政策。。。远程签名。。。你到底在干什么?您是在尝试访问JAR中的resource,还是在尝试其他操作?说真的,如果你不知道如何使用你的工具,那么你应该后退几步重新开始。从编写一个简单的Java应用程序开始,该应用程序可以从命令行启动,就像我上面告诉过你的那样。如果其他方面失败,开始新的问题。老实说,最后的信息应该已经放在你的原始问题中了。
URL resourceUrl = getClass().getResource("win.txt");