java io之图片存取

一:建表

二:获取数据库连接

1:导入mysql的驱动jar包,mysql-connector-java-5.1.8-bin.jar

2:写代码连接数据库,如下:

 1 /**
 2  *
 3  */
 4 package com.hlcui.file;
 5
 6 import java.sql.Connection;
 7 import java.sql.DriverManager;
 8 import java.sql.SQLException;
 9
10 /**
11  * @author Administrator
12  *
13  */
14 public class DBUtil {
15     // 定义数据库连接参数
16     public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
17     public static final String URL = "jdbc:mysql://localhost:3306/test";
18     public static final String USERNAME = "root";
19     public static final String PASSWORD = "root";
20
21     // 注册数据库驱动
22     static {
23         try {
24             Class.forName(DRIVER_CLASS_NAME);
25         } catch (ClassNotFoundException e) {
26             System.out.println("注册失败!");
27             e.printStackTrace();
28         }
29     }
30
31     // 获取连接
32     public static Connection getConn() throws SQLException {
33         return DriverManager.getConnection(URL, USERNAME, PASSWORD);
34     }
35
36     // 关闭连接
37     public static void closeConn(Connection conn) {
38         if (null != conn) {
39             try {
40                 conn.close();
41             } catch (SQLException e) {
42                 System.out.println("关闭连接失败!");
43                 e.printStackTrace();
44             }
45         }
46     }
47     //测试
48     public static void main(String[] args) throws SQLException {
49         System.out.println(DBUtil.getConn());
50     }
51
52 }

三:封装读取图片的流

 1 /**
 2  *
 3  */
 4 package com.hlcui.file;
 5
 6 import java.io.File;
 7 import java.io.FileInputStream;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 import java.io.InputStream;
11
12 /**
13  * @author Administrator
14  *
15  */
16 public class ImageUtil {
17
18     // 读取本地图片获取输入流
19     public static FileInputStream readImage(String path) throws IOException {
20         return new FileInputStream(new File(path));
21     }
22
23     // 读取表中图片获取输出流
24     public static void readBin2Image(InputStream in, String targetPath) {
25         File file = new File(targetPath);
26         String path = targetPath.substring(0, targetPath.lastIndexOf("/"));
27         if (!file.exists()) {
28             new File(path).mkdir();
29         }
30         FileOutputStream fos = null;
31         try {
32             fos = new FileOutputStream(file);
33             int len = 0;
34             byte[] buf = new byte[1024];
35             while ((len = in.read(buf)) != -1) {
36                 fos.write(buf, 0, len);
37             }
38             fos.flush();
39         } catch (Exception e) {
40             e.printStackTrace();
41         } finally {
42             if (null != fos) {
43                 try {
44                     fos.close();
45                 } catch (IOException e) {
46                     e.printStackTrace();
47                 }
48             }
49         }
50     }
51 }

四:实现图片(本地、数据库互相传输)

 1 /**
 2  *
 3  */
 4 package com.hlcui.file;
 5
 6 import java.io.FileInputStream;
 7 import java.io.InputStream;
 8 import java.sql.Connection;
 9 import java.sql.PreparedStatement;
10 import java.sql.ResultSet;
11 import java.sql.SQLException;
12
13 /**
14  * @author Administrator 测试写入数据库以及从数据库中读取
15  */
16 public class ImageDemo {
17
18     // 将图片插入数据库
19     public static void readImage2DB() {
20         String path = "D:/1.png";
21         Connection conn = null;
22         PreparedStatement ps = null;
23         FileInputStream in = null;
24         try {
25             in = ImageUtil.readImage(path);
26             conn = DBUtil.getConn();
27             String sql = "insert into photo (id,name,photo)values(?,?,?)";
28             ps = conn.prepareStatement(sql);
29             ps.setInt(1, 1);
30             ps.setString(2, "Tom");
31             ps.setBinaryStream(3, in, in.available());
32             int count = ps.executeUpdate();
33             if (count > 0) {
34                 System.out.println("插入成功!");
35             } else {
36                 System.out.println("插入失败!");
37             }
38         } catch (Exception e) {
39             e.printStackTrace();
40         } finally {
41             DBUtil.closeConn(conn);
42             if (null != ps) {
43                 try {
44                     ps.close();
45                 } catch (SQLException e) {
46                     e.printStackTrace();
47                 }
48             }
49         }
50
51     }
52
53     // 读取数据库中图片
54     public static void readDB2Image() {
55         String targetPath = "D:/image/1.png";
56         Connection conn = null;
57         PreparedStatement ps = null;
58         ResultSet rs = null;
59         try {
60             conn = DBUtil.getConn();
61             String sql = "select * from photo where id =?";
62             ps = conn.prepareStatement(sql);
63             ps.setInt(1, 1);
64             rs = ps.executeQuery();
65             while (rs.next()) {
66                 InputStream in = rs.getBinaryStream("photo");
67                 ImageUtil.readBin2Image(in, targetPath);
68             }
69         } catch (Exception e) {
70             e.printStackTrace();
71         } finally {
72             DBUtil.closeConn(conn);
73             if (rs != null) {
74                 try {
75                     rs.close();
76                 } catch (SQLException e) {
77                     e.printStackTrace();
78                 }
79             }
80             if (ps != null) {
81                 try {
82                     ps.close();
83                 } catch (SQLException e) {
84                     e.printStackTrace();
85                 }
86             }
87
88         }
89     }
90     //测试
91     public static void main(String[] args) {
92         //readImage2DB();
93         readDB2Image();
94     }
95 }

时间: 2024-10-19 20:39:16

java io之图片存取的相关文章

java io流 图片和字符串之间的转换

package com.yundongsports.arena.controller.basketballsite; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; /** * Created by CF on 2016/12/23. */ public class test { String c=""; /** * 将字符串转为图片 * @param imgStr * @r

Java实现对Mysql的图片存取操作

1.MySQL中的BLOB类型 Mysql中可以存储大文件数据,一般使用的BLOB对象.如图片,视频等等. BLOB是一个二进制大对象,可以容纳可变数量的数据.因为是二进制对象,所以与编码方式无关.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 四种字段类型保存的最大长度如下: TINYBLOB - 255 bytes BLOB - 65535 bytes(64KB) MEDIUMBLOB - 16,777,215 byt

java IO流拷贝图片

图片属于字节流,使用InputStream和OutputStream. import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyImage { public static void main(String[] args) throws IOException { File inFile = n

Java IO总结

Java IO流分类: 按照输入输出分为:输入流,输出流,输入输出流的概念是相对的,相当于安在文件上的管道,新new出的InputStream对象是指磁盘文件等,每当程序要进行读操作时指的是从文件中读数据,对于文件来说是输出数据,但对于程序是读取/输入数据,应使用输入流,反之进行写操作时使用输出流. 按照流是否直接与特定的地方(如磁盘.内存.设备等)相连分为:节点流, 处理流 节点流可以直接new出来,而处理流相当于套在节点流管道上的一层管道,必须在节点流的基础上创建 如节点流 FileInpu

黑马程序员-Java IO流

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!-- 一.概述 Java中与IO相关的类有很多,都集中在java.io中,都是以流的形式操作的,流是有一定的顺序,像一个管道一样,它的本质是传输数据.根据数据类型的不同可以分为字节流和字符流,根据流向的不同可以分为输入流和输出流. 字符流:因为数据有不同的编码,可以对字符进行不同的操作,其本质还是基于字节流,然后再查询相应的码表.一般用于处理纯文本数据. 字节流:可以处理所有类型数据,二进制文件(图片,音频等). 输入

java IO流文件的读写具体实例(转载)

引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

java IO之输入流——InputStream

java的基本输入流是java.io.InputStream,该抽象类定义了输入流的基本输入操作方法,实现自该抽象类的子类都有定义自己的数据源,例如ByteArrayInputStream的构造函数指定了ByteArrayInputStream输入流的数据源必须是一个字符数组.这就可以有多种不同的数据源,包括:字符数组.String对象.文件."管道".一个由其他种类的流组成的序列... 1 public ByteArrayInputStream(byte buf[]) {} 2 3

Java IO流 探险

Java的IO流使用了一种装饰器设计模式,它将IO流分为底层节点流和上层处理流.本篇重点在如何访问文件与目录.如何以二进制格式和文本格式来读写数据.对象序列化机制.还有Java7的"NIO.2". 装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装饰的对象.并基于被装饰的对象的功能,提供更强的功能. IO的方式通常分为:BIO(同步阻塞).NIO(同步非阻塞).AIO

Play生产模式下java.io.FileNotFoundException那点事

之前”用Scala+Play构建地理数据查询接口”那篇文章里,用到的数据是json格式的文本文件area.json,存放在conf/jsons文件夹下.最开始是放在public/文件夹下,在线上准生产模式下运行: activator dist 得到mosquito-1.0.zip压缩包,解压后: 去/bin目录下运行mosquito脚本报错: java.io.FileNotFoundException 然后就去解压的mosquito-1.0/看发现并没有public文件夹,由此可见public文