如何从源文件夹中读取图像为FileInputStream?

时间:2017-07-06 04:58:57

标签: java image file netbeans

我一直在尝试将image上传到数据库。所以我做了一个browse按钮来浏览目录并获取图像。假设如果没有选择图像,则default image将上传到数据库。图像存储在源文件夹下名为'resources'的文件夹中。在图像中,帮助程序是包含.java文件的文件夹,下面是resources文件夹helper directory contains .java files and below is the resource folder in this image我将图像上载为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。可能是问了好几次,我没有找到解决方案。我希望将图像作为文件读取。谢谢。

2 个答案:

答案 0 :(得分:0)

帮助说明我使用源目录创建项目

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

     

罐:文件:/ d:/temp/ab.jar /a.txt

     

罐:文件:/ d:/temp/ab.jar /text/b.txt

     

罐:文件:/ d:/temp/ab.jar /other/c.txt

修改

由于您不想使用文件,只需使用InputStream,您可以使用

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

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

进行设置

答案 1 :(得分:0)

考虑以下包结构

/
/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