当前位置: 首页 > 知识库问答 >
问题:

使用FileInputStream时FileNotFoundException

施梓
2023-03-14

我正在尝试访问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正常工作。有人知道我做错了什么吗?我们将不胜感激。

共有3个答案

赵佐
2023-03-14

你的方法在很多方面都是错误的:

>

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不会使用\

麹飞航
2023-03-14

如果这是一个已知资源,您可以使用:

InputStream is =intro.class.getResourceAsStream("myFile.jar");

其他答案是,当他们说你做错了的时候,他们会做出一些假设。但很可疑的是,您试图先作为资源,然后作为文件访问Jar。。。

另外,请参见:getResourceAsStream()与FileInputStream

丁勇
2023-03-14

您不能以这种方式访问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类从文件获取输入字节。它用于读取面向字节的数据(原始字节流),例如图像数据,音频,视频等。您还可以读取字符流数据。但