Java 使用FileInputStream时FileNotFoundException
我正在尝试访问jar中包含的文件 我的代码开头如下:Java 使用FileInputStream时FileNotFoundException,java,filenotfoundexception,fileinputstream,Java,Filenotfoundexception,Fileinputstream,我正在尝试访问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());
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)
线程“main”java.io.FileNotFoundException:file:\…myFile.jar中的异常(文件名、目录名或卷标语法不正确)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(未知源)
在intro.main(intro.java:10)
查找URL或初始化文件似乎没有问题,但我无法使FileInputStream正常工作。有人知道我做错了什么吗?非常感谢您的帮助。您不能以这种方式访问Jar'ed资源。Jar中的文件不是
文件
(即文件系统文件),它们是不同的概念
您应该改用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) {
}
}
您的方法在多个级别上都不正确:
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();
(我省略了所有必要的异常处理和代码,以关闭一些东西来防止资源泄漏。)file:\...myFile.jar
反斜杠和三个点是什么?格式正确的URL不会使用\
如果这是一个已知资源,您可以使用:
InputStream is =intro.class.getResourceAsStream("myFile.jar");
其他的答案是,当他们说你做错了的时候,做出了一些假设。但很可疑的是,您试图先作为资源,然后作为文件访问Jar
还有,请看这个:我不会拐弯抹角,我会直接切入正题。您不能以这种方式访问jar中的文件。请尝试下面的代码
URL jarUrl = intro.class.getResource("myFile.jar");
InputStream is = null;
String s = new String();
try {
is = jarURL.openStream();
Scanner scan = new Scanner(is);
while(scan.hasNextLine){
s = scan.nextLine() + s;
}
} catch (IOException exp) {
} finally {
is.close();
}
@HovercraftFullOfEels(这是close语句出现在try catch中的另一个原因;)@HovercraftFullOfEels没问题,你的更正更正确,我只是懒惰;)