【问题标题】:How to read image as FileInputStream from source folder?如何从源文件夹中将图像读取为 FileInputStream?
【发布时间】:2017-07-06 04:58:56
【问题描述】:

我一直在尝试将image 上传到数据库。所以我做了一个browse 按钮来浏览目录并获取图像。假设如果没有选择图像,则将default image 上传到数据库。图像存储在源文件夹下名为'resources' 的文件夹中。在图像中,helper 是包含.java 文件的文件夹,下面是resources 文件夹 我将图像上传为FileInputStream 和代码是

File pic=new File(imgloc);
FileInputStream fis=new FileInputStream(pic);

如果没有选择图片上传默认图片我的代码是

File pic=new File(this.getClass().getResource("/resources/profile1.png").getFile());
FileInputStream fis=new FileInputStream(pic);

我对数据库的查询是

    ps.setBinaryStream(1,fis ,(int) pic.length()); //While substituing for '?' in query 

在构建到 jar 之后,它会在尝试添加默认图像时产生 FileNotFoundException。可能是这个问题被问了好几次我没有找到解决方案。我想将图像作为文件读取..提前致谢。

【问题讨论】:

  • 你无法从运行时读取源文件夹 - 资源应该在你的类路径中
  • 我在源文件夹packages下创建了resources文件夹
  • 我说你不能从运行时读取源文件夹
  • 但是当我用winrar打开jar文件时,我可以看到resources文件夹
  • @ScaryWombat 我想我们可以在运行时从源文件夹中读取文件。

标签: java image file netbeans


【解决方案1】:

为了帮助说明我创建了一个带有源目录的项目

src

在源代码下面我有一个包starthere 和一个类Main

我创建另一个源目录xxx 并放入一个文件a.txt

我还在xxx下创建了一个名为text的目录,并放入了一个名为b.txt的文件

我还在src 下创建了一个名为other 的目录并放入一个名为c.txt 的文件中

我的代码是

    URL url = Main.class.getResource("/a.txt");
    System.out.println(url);
    URL url2 = Main.class.getResource("/text/b.txt");
    System.out.println(url2);
    URL url3 = Main.class.getResource("/other/c.txt");
    System.out.println(url3);

我的输出是

D:\temp>java -cp ab.jar starthere.Main

jar:file:/D:/temp/ab.jar!/a.txt

jar:file:/D:/temp/ab.jar!/text/b.txt

jar:file:/D:/temp/ab.jar!/other/c.txt

编辑

由于您不想使用文件,而只是使用 InputStream,因此您可以使用

InputStream fis = Main.class.getResourceAsStream("/a.txt");

然后使用ps.setBinaryStream(1, fis);设置

【讨论】:

  • 是的兄弟,我试过这个东西。在这段代码之后,我使用了File pic=new File(url.to URI);,因为我需要将它加载到数据库中在代码中工作,但不是在 jar 中。它显示异常illegal argument exception: URI is not hierarchical
  • 我没有关注你。该错误是完全不同的错误。此外,此代码 File pic=new File(url.to URI); 根本没有意义
  • 兄弟对不起我犯的错误,但我的问题本身是我想将图像作为file 然后只有我可以将它添加到数据库中
  • 根据我的代码,你得到一个 URL 了吗?这是第一步
  • 是的,兄弟。我得到了url。然后请说我该怎么做
【解决方案2】:

考虑以下包结构

/
/testing_package
/testing_package/Main.java
/testing_package/Image.png

现在这是一个获取 Image.png 并将其放入数据库的程序

public class Main {
    public static void main(String...args) {
        System.out.println(Main.class.getResource("image.jpg"));
        //PreparedStatement as ps
        ps.setBinaryStream(1, Main.class.getResourceAsStream("image.jpg")));
    }
}

注意事项
当使用getResource(...)getResourceAsStream(...) 时,使用相对于您正在调用其函数的类实例的位置。

Have a look at this answer too

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2020-06-22
    相关资源
    最近更新 更多