我正在尝试访问jar中包含的文件。
我的代码开头如下:
import java.io.*;
import java.net.*;
public class intro {
public static void main(String[] args) throws IOException{
URL jarUrl = intro.class.getResource("myFile.jar");
File myJar = new File(jarUrl.toString());
FileInputStream fis = new FileInputStream(myjar);
}
我发现以下错误:
Exception in thread "main" java.io.FileNotFoundException: file:\...myFile.jar (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at intro.main(intro.java:10)
查找URL或初始化文件似乎没有问题,但我无法让FileInputStream正常工作。有人知道我做错了什么吗?我们将不胜感激。
你的方法在很多方面都是错误的:
>
File myJar = new File(jarUrl.toString());
假设jarUrl
具有类型java.net.URL
,它应该被写成:
File myJar = new File(new URI(jarUrl));
这是错误的,因为它会(假设myJar
是正确的)将JAR文件作为字节流打开:
FileInputStream fis = new FileInputStream(myJar);
实际上,您需要使用JAR/ZIP文件类打开它,然后使用它们打开JAR包含的文件上的流。应该是这样的:
ZipFile zip = new ZipFile(myJar);
ZipEntry entry = zip.getEntry(filePathInZip);
InputStream is = entry.getInputStream();
(为了防止资源泄漏,我省略了所有必要的异常处理和代码。)
这看起来是错误的URL:
file:\...myFile.jar
反斜杠和三个点是什么?格式良好的URL不会使用\
。
如果这是一个已知资源,您可以使用:
InputStream is =intro.class.getResourceAsStream("myFile.jar");
其他答案是,当他们说你做错了的时候,他们会做出一些假设。但很可疑的是,您试图先作为资源,然后作为文件访问Jar。。。
另外,请参见:getResourceAsStream()与FileInputStream
您不能以这种方式访问Jar'ed资源。Jar中的文件不是File
(即文件系统文件),它们是不同的概念。
你应该使用URL。而是openStream
。
InputStream is = null;
try {
is = jarURL.openStream();
// ... Read from stream
} catch (IOException exp) {
} finally {
try {
if (is != null) {
is.close();
}
} catch (Exception exp) {
}
}
问题内容: 这可能很愚蠢,但是我想知道后台操作的区别。 上面两行代码之间的区别是什么,以及它们在什么情况下使用。 问题答案: extend :它是InputStream的专用版本,旨在读取文件。 根据InputStream的用途,有几种实现。 通常最好的做法是使用代码中所需的最高类型。因此,如果您的代码需要从而不是从a 读取数据,则应使用。但是,如果您确实需要保持对象的信息为a 而不只是a ,则应
问题内容: 我正在尝试使用File对象初始化FileInputStream对象。我在网上收到FileNotFound错误 这很奇怪,因为我已经通过相同的方法多次打开该文件来进行正则表达式。 我的方法如下: java.io.FileNotFoundException:C:\ dev的\服务器\的tomcat6 \的webapps \样品现场(访问被拒绝) 在java.io.FileInputStre
我正在尝试以下代码: http://androidgenuine.com/?tag=export-database-Android
目前,我正在java中建立一个Firebase云火力恢复,使用IntelliJ作为SDK。在Firebase留档中,据说需要服务帐户密钥,这是一个json文件。我使用FileInputStream方法获得这个json文件,当我得到执行程序的文件时,我没有任何问题,但是当我将其导出为JAR库时,使用该JAR的项目没有找到服务帐户密钥,然后它无法与我的Firebase连接。 现在,我可以连接到Fire
本文向大家介绍Java使用FileInputStream / FileOutputStream读/写文件,包括了Java使用FileInputStream / FileOutputStream读/写文件的使用技巧和注意事项,需要的朋友参考一下 示例 写入文件test.txt: 从文件test.txt中读取: 请注意,自Java 1.7起引入了try-with-resources语句,这使得读/写操
主要内容:1 什么是Java FileInputStream,2 Java FileInputStream的语法,3 Java FileInputStream的方法,4 Java FileInputStream例子:读取一个字符,5 Java FileInputStream例子:读取所有字符1 什么是Java FileInputStream Java FileInputStream类从文件获取输入字节。它用于读取面向字节的数据(原始字节流),例如图像数据,音频,视频等。您还可以读取字符流数据。但