谁给我一个java中I/O树状结构层次图!!!谢了!! 感觉IO这一块东西很多,要理清楚思路的话觉得太繁琐了,一会继承,一会重写函数,一会又是字段,谁有IO这一块的结构图,就是清楚地反映IO中各个类之间的关系以及函数问题的图表???谢谢了!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JDK的API文档里面有啊,楼主你去下载一个就行了。 楼主自己看吧http://blog.csdn.net/tanglinfeng/archive/2009/02/05/3864214.aspx http://blog.csdn.net/imasmallbird/archive/2009/05/08/4161598.aspx晕了,具然不会加图片,发到博客里了~~~ IO综合案例:package tryIO;import java.io.*;import java.sql.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class Sample32_9 extends JFrame implements ListSelectionListener,ActionListener{ //创建菜单栏、菜单以及菜单项 JMenuBar jmb=new JMenuBar(); JMenu jm=new JMenu("打开"); JMenuItem[] jmi={new JMenuItem("添加图片"),new JMenuItem("删除图片"),new JMenuItem("退出")}; //创建列表框并将列表框放置到滚动窗格中 JList jl=new JList(); JScrollPane jspz=new JScrollPane(jl); //创建标签并将标签放置到滚动窗格中 JLabel jlp=new JLabel(); JScrollPane jspy=new JScrollPane(jlp); //创建包含列表框与标签的分割窗格 JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy); //创建文件选择器 JFileChooser jfc=new JFileChooser(); //声明Connection、Statement以及ResultSet的引用 Connection con; Statement st; ResultSet rs; //创建用来存放列表数据的向量 Vector listData=new Vector(); //创建表示SQL语句的字符串 String sqlInsert="insert into pictures values(?,?)"; String sqlDelete="delete from pictures where pname=?"; String sqlSelect="select pcontent from pictures where pname=?"; //声明PreparedStatement对象的引用 PreparedStatement psInsert; PreparedStatement psDelete; PreparedStatement psSelect; //Sample32_9类构造器 public Sample32_9() { //通过循环对菜单项进行初始化 for(int i=0;i<jmi.length;i++) {//将菜单项添加进菜单并为其注册监听器 jm.add(jmi[i]); jmi[i].addActionListener(this); } //将菜单添加进菜单栏,并将菜单栏设置到窗体中 jmb.add(jm); this.setJMenuBar(jmb); //将包含列表框与标签的分割窗格添加进窗体 this.add(jsp,BorderLayout.CENTER); //设置分隔条的初始位置以及宽度 jsp.setDividerLocation(100); jsp.setDividerSize(4); //设置标签的对齐方式 jlp.setHorizontalAlignment(JLabel.CENTER); jlp.setVerticalAlignment(JLabel.CENTER); //设置列表一次只能选中一个选项 jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //为列表框注册监听器 jl.addListSelectionListener(this); //获取数据库连接 this.getConnection(); //初始化列表 this.initList(); //设置窗体的关闭动作、标题、大小位置以及可见性 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("数据库图片查看器"); this.setBounds(100,100,500,400); this.setVisible(true); //为文件选择器设置后缀过滤器 javax.swing.filechooser.FileFilter filterJpeg = new javax.swing.filechooser.FileNameExtensionFilter("JPEG文件", "jpg", "jpeg"); javax.swing.filechooser.FileFilter filterGif = new javax.swing.filechooser.FileNameExtensionFilter("GIF文件", "gif"); javax.swing.filechooser.FileFilter filterPng = new javax.swing.filechooser.FileNameExtensionFilter("PNG文件", "png"); jfc.removeChoosableFileFilter(jfc.getFileFilter()); jfc.addChoosableFileFilter(filterJpeg); jfc.addChoosableFileFilter(filterGif); jfc.addChoosableFileFilter(filterPng); } //自定义的程序启动时初始化列表的方法 public void initList() { try { //获取Statement对象并查询所有的图片名 st=con.createStatement(); rs=st.executeQuery("select pname from pictures"); //清空列表数据向量 listData.clear(); //将结果集中所有的名称添加进向量 while(rs.next()) { listData.add(rs.getString(1)); } if(listData.isEmpty()) {//若列表为空则将删除图片菜单项设置为不可用状态 jmi[1].setEnabled(false); } //设置列表的数据模型 jl.setListData(listData); //关闭结果集 rs.close(); //关闭语句 st.close(); } catch(Exception e) { } finally {//调用此方法释放资源 this.closeStateResult(); } } //获取选中图片文件的方法 public File getPic() { //弹出保存对话框 int i=jfc.showSaveDialog(this); if(i==JFileChooser.APPROVE_OPTION) {//按下保存按扭 return jfc.getSelectedFile(); } return null; } //判断数据库是否存在的方法 public boolean isDatabaseExists() { //声明数据库文件目录对应的File对象 File dbFileDir=new File("pic"); //返回数据库是否存在的情况 return dbFileDir.exists(); } //自定义的获取数据库连接的方法 public void getConnection() { try { //测试数据库是否存在 if(!this.isDatabaseExists()) { //若不存在则创建并连接数据库 con=DriverManager.getConnection("jdbc:derby:pic;create=true","",""); //获取Statement对象并在数据库中创建一张表 st=con.createStatement(); String str="CREATE TABLE pictures("+ "pname VARCHAR(30) PRIMARY KEY,pcontent BLOB)"; st.execute(str); st.close(); } else { //若数据库存在则连接数据库 con=DriverManager.getConnection("jdbc:derby:pic","",""); } //初始化三个PrepareStatement对象 psInsert=con.prepareStatement(sqlInsert); psDelete=con.prepareStatement(sqlDelete); psSelect=con.prepareStatement(sqlSelect); } catch(Exception e) { } } //实现ListSelectionListener监听接口中的方法 public void valueChanged(ListSelectionEvent lse) { //列表选择事件的处理方法 if(jl.getSelectedIndex()==-1) { //若没有列表项被选中则方法返回 return; } try { //获取选中列表项的名称 String pname=(String)jl.getSelectedValue(); //设置预编译语句中字段的值 psSelect.setString(1,pname.trim()); //提交查询并获取结果集 rs=psSelect.executeQuery(); rs.next(); //从结果集中获取图象的字节数组 byte[] bb=rs.getBytes(1); //为标签设置图标 this.jlp.setIcon(new ImageIcon(bb)); } catch(Exception ee) { } finally { this.closeStateResult(); } } //实现ActionListener监听接口中的方法 public void actionPerformed(ActionEvent ae) { if(ae.getSource()==jmi[0]) { /*实现添加图片的功能*/ //获取选择的图片文件 File f=this.getPic(); if(f!=null) { //定义FileInputStream以及PreparedStatement对象的引用 FileInputStream fin=null; if(listData.contains(f.getName())) {//若同名的图片在列表中已经存在则抱错 JOptionPane.showMessageDialog(this, "列表中图片的名称不能相同!!!","错误",JOptionPane.ERROR_MESSAGE); return; } try { //获取图片文件的长度 long length=f.length(); //创建byte数组其长度为图片文件的长度 byte[] bb=new byte[(int)length]; //创建文件类型字节流对象并为该对象指定源文件 fin=new FileInputStream(f); //读取文件中的数据并存储在byte数组中 fin.read(bb); //设置预编译语句中各个字段的值 psInsert.setString(1,f.getName()); psInsert.setBytes(2,bb); //执行插入动作 psInsert.executeUpdate(); //将文件名添加到列表数据中 listData.add(f.getName()); //重新设置列表的数据模型 jl.setListData(listData); //使列表选中最后一行 jl.setSelectedIndex(listData.size()-1); //设置删除图片菜单到可用状态 jmi[1].setEnabled(true); } catch(Exception e) { } finally { try {//关闭输入流并释放资源 fin.close(); } catch(Exception e){} } } } else if(ae.getSource()==jmi[1]) { /*实现删除图片的功能*/ if(jl.getSelectedIndex()==-1) { //若没有列表项被选中则方法返回 return; } try { //获取选中列表项的名称 String pname=(String)jl.getSelectedValue(); //设置预编译语句中图片名称字段的值 psDelete.setString(1,pname.trim()); //提交更新 psDelete.executeUpdate(); //将需要删除图片的名称从列表中移除 listData.remove(jl.getSelectedIndex()); if(listData.isEmpty()) {//如果删除后列表为空则将删除图片菜单项设置为不可编辑状态 jmi[1].setEnabled(false); } //将窗体右侧的图片去除 jlp.setIcon(null); } catch(Exception ee) { } } else if(ae.getSource()==jmi[1]) {//安全退出程序 System.exit(0); } } //自定义的关闭结果集的方法 public void closeStateResult() { try {//关闭结果集 rs.close(); } catch(Exception e) { } } public static void main(String args[]) { //创建Sample32_9窗体对象 new Sample32_9(); }} 类体系:不过看看thinking in java中io这一章,写的很好。 楼主参考一下这个系列博客吧,讲的不错thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3)java中的io体系(4)java中的io体系(5)希望对楼主有帮助 够直观TIJ我看了确实不错推荐@@!!! 还有一个最最常用的方法也是所有java程序员必备的java的 API,查看一下就会很清楚了里面已经把关系以树的形式显示出来还有方法的介绍 Java codepackage tryIO;import java.io.*;import java.sql.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class Sample32_9 extends JFrame implements ListSelectionListener,ActionListener{ //创建菜单栏、菜单以及菜单项 JMenuBar jmb=new JMenuBar(); JMenu jm=new JMenu("打开"); JMenuItem[] jmi={new JMenuItem("添加图片"),new JMenuItem("删除图片"),new JMenuItem("退出")}; //创建列表框并将列表框放置到滚动窗格中 JList jl=new JList(); JScrollPane jspz=new JScrollPane(jl); //创建标签并将标签放置到滚动窗格中 JLabel jlp=new JLabel(); JScrollPane jspy=new JScrollPane(jlp); //创建包含列表框与标签的分割窗格 JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy); //创建文件选择器 JFileChooser jfc=new JFileChooser(); //声明Connection、Statement以及ResultSet的引用 Connection con; Statement st; ResultSet rs; //创建用来存放列表数据的向量 Vector listData=new Vector(); //创建表示SQL语句的字符串 String sqlInsert="insert into pictures values(?,?)"; String sqlDelete="delete from pictures where pname=?"; String sqlSelect="select pcontent from pictures where pname=?"; //声明PreparedStatement对象的引用 PreparedStatement psInsert; PreparedStatement psDelete; PreparedStatement psSelect; //Sample32_9类构造器 public Sample32_9() { //通过循环对菜单项进行初始化 for(int i=0;i<jmi.length;i++) {//将菜单项添加进菜单并为其注册监听器 jm.add(jmi[i]); jmi[i].addActionListener(this); } //将菜单添加进菜单栏,并将菜单栏设置到窗体中 jmb.add(jm); this.setJMenuBar(jmb); //将包含列表框与标签的分割窗格添加进窗体 this.add(jsp,BorderLayout.CENTER); //设置分隔条的初始位置以及宽度 jsp.setDividerLocation(100); jsp.setDividerSize(4); //设置标签的对齐方式 jlp.setHorizontalAlignment(JLabel.CENTER); jlp.setVerticalAlignment(JLabel.CENTER); //设置列表一次只能选中一个选项 jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //为列表框注册监听器 jl.addListSelectionListener(this); //获取数据库连接 this.getConnection(); //初始化列表 this.initList(); //设置窗体的关闭动作、标题、大小位置以及可见性 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("数据库图片查看器"); this.setBounds(100,100,500,400); this.setVisible(true); //为文件选择器设置后缀过滤器 javax.swing.filechooser.FileFilter filterJpeg = new javax.swing.filechooser.FileNameExtensionFilter("JPEG文件", "jpg", "jpeg"); javax.swing.filechooser.FileFilter filterGif = new javax.swing.filechooser.FileNameExtensionFilter("GIF文件", "gif"); javax.swing.filechooser.FileFilter filterPng = new javax.swing.filechooser.FileNameExtensionFilter("PNG文件", "png"); jfc.removeChoosableFileFilter(jfc.getFileFilter()); jfc.addChoosableFileFilter(filterJpeg); jfc.addChoosableFileFilter(filterGif); jfc.addChoosableFileFilter(filterPng); } //自定义的程序启动时初始化列表的方法 public void initList() { try { //获取Statement对象并查询所有的图片名 st=con.createStatement(); rs=st.executeQuery("select pname from pictures"); //清空列表数据向量 listData.clear(); //将结果集中所有的名称添加进向量 while(rs.next()) { listData.add(rs.getString(1)); } if(listData.isEmpty()) {//若列表为空则将删除图片菜单项设置为不可用状态 jmi[1].setEnabled(false); } //设置列表的数据模型 jl.setListData(listData); //关闭结果集 rs.close(); //关闭语句 st.close(); } catch(Exception e) { } finally {//调用此方法释放资源 this.closeStateResult(); } } //获取选中图片文件的方法 public File getPic() { //弹出保存对话框 int i=jfc.showSaveDialog(this); if(i==JFileChooser.APPROVE_OPTION) {//按下保存按扭 return jfc.getSelectedFile(); } return null; } //判断数据库是否存在的方法 public boolean isDatabaseExists() { //声明数据库文件目录对应的File对象 File dbFileDir=new File("pic"); //返回数据库是否存在的情况 return dbFileDir.exists(); } //自定义的获取数据库连接的方法 public void getConnection() { try { //测试数据库是否存在 if(!this.isDatabaseExists()) { //若不存在则创建并连接数据库 con=DriverManager.getConnection("jdbc:derby:pic;create=true","",""); //获取Statement对象并在数据库中创建一张表 st=con.createStatement(); String str="CREATE TABLE pictures("+ "pname VARCHAR(30) PRIMARY KEY,pcontent BLOB)"; st.execute(str); st.close(); } else { //若数据库存在则连接数据库 con=DriverManager.getConnection("jdbc:derby:pic","",""); } //初始化三个PrepareStatement对象 psInsert=con.prepareStatement(sqlInsert); psDelete=con.prepareStatement(sqlDelete); psSelect=con.prepareStatement(sqlSelect); } catch(Exception e) { } } //实现ListSelectionListener监听接口中的方法 public void valueChanged(ListSelectionEvent lse) { //列表选择事件的处理方法 if(jl.getSelectedIndex()==-1) { //若没有列表项被选中则方法返回 return; } try { //获取选中列表项的名称 String pname=(String)jl.getSelectedValue(); //设置预编译语句中字段的值 psSelect.setString(1,pname.trim()); //提交查询并获取结果集 rs=psSelect.executeQuery(); rs.next(); //从结果集中获取图象的字节数组 byte[] bb=rs.getBytes(1); //为标签设置图标 this.jlp.setIcon(new ImageIcon(bb)); } catch(Exception ee) { } finally { this.closeStateResult(); } } //实现ActionListener监听接口中的方法 public void actionPerformed(ActionEvent ae) { if(ae.getSource()==jmi[0]) { /*实现添加图片的功能*/ //获取选择的图片文件 File f=this.getPic(); if(f!=null) { //定义FileInputStream以及PreparedStatement对象的引用 FileInputStream fin=null; if(listData.contains(f.getName())) {//若同名的图片在列表中已经存在则抱错 JOptionPane.showMessageDialog(this, "列表中图片的名称不能相同!!!","错误",JOptionPane.ERROR_MESSAGE); return; } try { //获取图片文件的长度 long length=f.length(); //创建byte数组其长度为图片文件的长度 byte[] bb=new byte[(int)length]; //创建文件类型字节流对象并为该对象指定源文件 fin=new FileInputStream(f); //读取文件中的数据并存储在byte数组中 fin.read(bb); //设置预编译语句中各个字段的值 psInsert.setString(1,f.getName()); psInsert.setBytes(2,bb); //执行插入动作 psInsert.executeUpdate(); //将文件名添加到列表数据中 listData.add(f.getName()); //重新设置列表的数据模型 jl.setListData(listData); //使列表选中最后一行 jl.setSelectedIndex(listData.size()-1); //设置删除图片菜单到可用状态 jmi[1].setEnabled(true); } catch(Exception e) { } finally { try {//关闭输入流并释放资源 fin.close(); } catch(Exception e){} } } } else if(ae.getSource()==jmi[1]) { /*实现删除图片的功能*/ if(jl.getSelectedIndex()==-1) { //若没有列表项被选中则方法返回 return; } try { //获取选中列表项的名称 String pname=(String)jl.getSelectedValue(); //设置预编译语句中图片名称字段的值 psDelete.setString(1,pname.trim()); //提交更新 psDelete.executeUpdate(); //将需要删除图片的名称从列表中移除 listData.remove(jl.getSelectedIndex()); if(listData.isEmpty()) {//如果删除后列表为空则将删除图片菜单项设置为不可编辑状态 jmi[1].setEnabled(false); } //将窗体右侧的图片去除 jlp.setIcon(null); } catch(Exception ee) { } } else if(ae.getSource()==jmi[1]) {//安全退出程序 System.exit(0); } } //自定义的关闭结果集的方法 public void closeStateResult() { try {//关闭结果集 rs.close(); } catch(Exception e) { } } public static void main(String args[]) { //创建Sample32_9窗体对象 new Sample32_9(); }} 引用楼主 WYhack 的帖子:感觉IO这一块东西很多,要理清楚思路的话觉得太繁琐了,一会继承,一会重写函数,一会又是字段,谁有IO这一块的结构图,就是清楚地反映IO中各个类之间的关系以及函数问题的图表???谢谢了!!!! 楼主参考一下这个系列博客吧,讲的不错 thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3) java中的io体系(4) java中的io体系(5) 引用楼主 WYhack 的帖子:感觉IO这一块东西很多,要理清楚思路的话觉得太繁琐了,一会继承,一会重写函数,一会又是字段,谁有IO这一块的结构图,就是清楚地反映IO中各个类之间的关系以及函数问题的图表???谢谢了!!!! 楼主参考一下这个系列博客吧,讲的不错 thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3) java中的io体系(4) java中的io体系(5) Syntax error on token "}", delete this token 肯定没有少}啊 啥叫Thread Confinement? 关于Java的内存增长 紧急求助:JScrollPane的横向滚动条怎么总是显示不出来? 菜鸟 集合问题 如何计算字符串类型日期的前一天日期是多少,具体看如下所描述! 帮我看看这段程序 如何在APPLET中随机产生3中大小不同的小球? 怎样中途截获一个事件? 求助配置maven时没有src和webapp目录 线程问题,求解决 小弟第一次使用jquery+ajax+json+struts2,求教给位大虾....
http://blog.csdn.net/tanglinfeng/archive/2009/02/05/3864214.aspx
晕了,具然不会加图片,发到博客里了~~~
import java.io.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class Sample32_9 extends JFrame implements ListSelectionListener,ActionListener
{
//创建菜单栏、菜单以及菜单项
JMenuBar jmb=new JMenuBar();
JMenu jm=new JMenu("打开");
JMenuItem[] jmi={new JMenuItem("添加图片"),new JMenuItem("删除图片"),new JMenuItem("退出")};
//创建列表框并将列表框放置到滚动窗格中
JList jl=new JList();
JScrollPane jspz=new JScrollPane(jl);
//创建标签并将标签放置到滚动窗格中
JLabel jlp=new JLabel();
JScrollPane jspy=new JScrollPane(jlp);
//创建包含列表框与标签的分割窗格
JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy);
//创建文件选择器
JFileChooser jfc=new JFileChooser();
//声明Connection、Statement以及ResultSet的引用
Connection con;
Statement st;
ResultSet rs;
//创建用来存放列表数据的向量
Vector listData=new Vector();
//创建表示SQL语句的字符串
String sqlInsert="insert into pictures values(?,?)";
String sqlDelete="delete from pictures where pname=?";
String sqlSelect="select pcontent from pictures where pname=?";
//声明PreparedStatement对象的引用
PreparedStatement psInsert;
PreparedStatement psDelete;
PreparedStatement psSelect;
//Sample32_9类构造器
public Sample32_9()
{
//通过循环对菜单项进行初始化
for(int i=0;i<jmi.length;i++)
{//将菜单项添加进菜单并为其注册监听器
jm.add(jmi[i]);
jmi[i].addActionListener(this);
}
//将菜单添加进菜单栏,并将菜单栏设置到窗体中
jmb.add(jm);
this.setJMenuBar(jmb);
//将包含列表框与标签的分割窗格添加进窗体
this.add(jsp,BorderLayout.CENTER);
//设置分隔条的初始位置以及宽度
jsp.setDividerLocation(100);
jsp.setDividerSize(4);
//设置标签的对齐方式
jlp.setHorizontalAlignment(JLabel.CENTER);
jlp.setVerticalAlignment(JLabel.CENTER);
//设置列表一次只能选中一个选项
jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//为列表框注册监听器
jl.addListSelectionListener(this);
//获取数据库连接
this.getConnection();
//初始化列表
this.initList();
//设置窗体的关闭动作、标题、大小位置以及可见性
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("数据库图片查看器");
this.setBounds(100,100,500,400);
this.setVisible(true);
//为文件选择器设置后缀过滤器
javax.swing.filechooser.FileFilter filterJpeg =
new javax.swing.filechooser.FileNameExtensionFilter("JPEG文件", "jpg", "jpeg");
javax.swing.filechooser.FileFilter filterGif =
new javax.swing.filechooser.FileNameExtensionFilter("GIF文件", "gif");
javax.swing.filechooser.FileFilter filterPng =
new javax.swing.filechooser.FileNameExtensionFilter("PNG文件", "png");
jfc.removeChoosableFileFilter(jfc.getFileFilter());
jfc.addChoosableFileFilter(filterJpeg);
jfc.addChoosableFileFilter(filterGif);
jfc.addChoosableFileFilter(filterPng);
}
//自定义的程序启动时初始化列表的方法
public void initList()
{
try
{
//获取Statement对象并查询所有的图片名
st=con.createStatement();
rs=st.executeQuery("select pname from pictures");
//清空列表数据向量
listData.clear();
//将结果集中所有的名称添加进向量
while(rs.next())
{
listData.add(rs.getString(1));
}
if(listData.isEmpty())
{//若列表为空则将删除图片菜单项设置为不可用状态
jmi[1].setEnabled(false);
}
//设置列表的数据模型
jl.setListData(listData);
//关闭结果集
rs.close();
//关闭语句
st.close();
}
catch(Exception e)
{
}
finally
{//调用此方法释放资源
this.closeStateResult();
}
}
//获取选中图片文件的方法
public File getPic()
{
//弹出保存对话框
int i=jfc.showSaveDialog(this);
if(i==JFileChooser.APPROVE_OPTION)
{//按下保存按扭
return jfc.getSelectedFile();
}
return null;
}
//判断数据库是否存在的方法
public boolean isDatabaseExists()
{
//声明数据库文件目录对应的File对象
File dbFileDir=new File("pic");
//返回数据库是否存在的情况
return dbFileDir.exists();
}
//自定义的获取数据库连接的方法
public void getConnection()
{
try
{
//测试数据库是否存在
if(!this.isDatabaseExists())
{
//若不存在则创建并连接数据库
con=DriverManager.getConnection("jdbc:derby:pic;create=true","","");
//获取Statement对象并在数据库中创建一张表
st=con.createStatement();
String str="CREATE TABLE pictures("+
"pname VARCHAR(30) PRIMARY KEY,pcontent BLOB)";
st.execute(str);
st.close();
}
else
{
//若数据库存在则连接数据库
con=DriverManager.getConnection("jdbc:derby:pic","","");
}
//初始化三个PrepareStatement对象
psInsert=con.prepareStatement(sqlInsert);
psDelete=con.prepareStatement(sqlDelete);
psSelect=con.prepareStatement(sqlSelect);
}
catch(Exception e)
{
}
}
//实现ListSelectionListener监听接口中的方法
public void valueChanged(ListSelectionEvent lse)
{
//列表选择事件的处理方法
if(jl.getSelectedIndex()==-1)
{
//若没有列表项被选中则方法返回
return;
}
try
{
//获取选中列表项的名称
String pname=(String)jl.getSelectedValue();
//设置预编译语句中字段的值
psSelect.setString(1,pname.trim());
//提交查询并获取结果集
rs=psSelect.executeQuery();
rs.next();
//从结果集中获取图象的字节数组
byte[] bb=rs.getBytes(1);
//为标签设置图标
this.jlp.setIcon(new ImageIcon(bb));
}
catch(Exception ee)
{
}
finally
{
this.closeStateResult();
}
}
//实现ActionListener监听接口中的方法
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==jmi[0])
{ /*实现添加图片的功能*/
//获取选择的图片文件
File f=this.getPic();
if(f!=null)
{
//定义FileInputStream以及PreparedStatement对象的引用
FileInputStream fin=null;
if(listData.contains(f.getName()))
{//若同名的图片在列表中已经存在则抱错
JOptionPane.showMessageDialog(this,
"列表中图片的名称不能相同!!!","错误",JOptionPane.ERROR_MESSAGE);
return;
}
try
{
//获取图片文件的长度
long length=f.length();
//创建byte数组其长度为图片文件的长度
byte[] bb=new byte[(int)length];
//创建文件类型字节流对象并为该对象指定源文件
fin=new FileInputStream(f);
//读取文件中的数据并存储在byte数组中
fin.read(bb);
//设置预编译语句中各个字段的值
psInsert.setString(1,f.getName());
psInsert.setBytes(2,bb);
//执行插入动作
psInsert.executeUpdate();
//将文件名添加到列表数据中
listData.add(f.getName());
//重新设置列表的数据模型
jl.setListData(listData);
//使列表选中最后一行
jl.setSelectedIndex(listData.size()-1);
//设置删除图片菜单到可用状态
jmi[1].setEnabled(true);
}
catch(Exception e)
{
}
finally
{
try
{//关闭输入流并释放资源
fin.close();
}
catch(Exception e){}
}
}
}
else if(ae.getSource()==jmi[1])
{ /*实现删除图片的功能*/
if(jl.getSelectedIndex()==-1)
{
//若没有列表项被选中则方法返回
return;
}
try
{
//获取选中列表项的名称
String pname=(String)jl.getSelectedValue();
//设置预编译语句中图片名称字段的值
psDelete.setString(1,pname.trim());
//提交更新
psDelete.executeUpdate();
//将需要删除图片的名称从列表中移除
listData.remove(jl.getSelectedIndex());
if(listData.isEmpty())
{//如果删除后列表为空则将删除图片菜单项设置为不可编辑状态
jmi[1].setEnabled(false);
}
//将窗体右侧的图片去除
jlp.setIcon(null);
}
catch(Exception ee)
{
}
}
else if(ae.getSource()==jmi[1])
{//安全退出程序
System.exit(0);
}
}
//自定义的关闭结果集的方法
public void closeStateResult()
{
try
{//关闭结果集
rs.close();
}
catch(Exception e)
{
}
}
public static void main(String args[])
{
//创建Sample32_9窗体对象
new Sample32_9();
}
}
不过看看thinking in java中io这一章,写的很好。
thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3)java中的io体系(4)java中的io体系(5)希望对楼主有帮助
TIJ我看了
确实不错
推荐@@!!!
也是所有java程序员必备的
java的 API,查看一下就会很清楚了
里面已经把关系以树的形式显示出来
还有方法的介绍
package tryIO;
import java.io.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class Sample32_9 extends JFrame implements ListSelectionListener,ActionListener
{
//创建菜单栏、菜单以及菜单项
JMenuBar jmb=new JMenuBar();
JMenu jm=new JMenu("打开");
JMenuItem[] jmi={new JMenuItem("添加图片"),new JMenuItem("删除图片"),new JMenuItem("退出")};
//创建列表框并将列表框放置到滚动窗格中
JList jl=new JList();
JScrollPane jspz=new JScrollPane(jl);
//创建标签并将标签放置到滚动窗格中
JLabel jlp=new JLabel();
JScrollPane jspy=new JScrollPane(jlp);
//创建包含列表框与标签的分割窗格
JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy);
//创建文件选择器
JFileChooser jfc=new JFileChooser();
//声明Connection、Statement以及ResultSet的引用
Connection con;
Statement st;
ResultSet rs;
//创建用来存放列表数据的向量
Vector listData=new Vector();
//创建表示SQL语句的字符串
String sqlInsert="insert into pictures values(?,?)";
String sqlDelete="delete from pictures where pname=?";
String sqlSelect="select pcontent from pictures where pname=?";
//声明PreparedStatement对象的引用
PreparedStatement psInsert;
PreparedStatement psDelete;
PreparedStatement psSelect;
//Sample32_9类构造器
public Sample32_9()
{
//通过循环对菜单项进行初始化
for(int i=0;i<jmi.length;i++)
{//将菜单项添加进菜单并为其注册监听器
jm.add(jmi[i]);
jmi[i].addActionListener(this);
}
//将菜单添加进菜单栏,并将菜单栏设置到窗体中
jmb.add(jm);
this.setJMenuBar(jmb);
//将包含列表框与标签的分割窗格添加进窗体
this.add(jsp,BorderLayout.CENTER);
//设置分隔条的初始位置以及宽度
jsp.setDividerLocation(100);
jsp.setDividerSize(4);
//设置标签的对齐方式
jlp.setHorizontalAlignment(JLabel.CENTER);
jlp.setVerticalAlignment(JLabel.CENTER);
//设置列表一次只能选中一个选项
jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//为列表框注册监听器
jl.addListSelectionListener(this);
//获取数据库连接
this.getConnection();
//初始化列表
this.initList();
//设置窗体的关闭动作、标题、大小位置以及可见性
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("数据库图片查看器");
this.setBounds(100,100,500,400);
this.setVisible(true);
//为文件选择器设置后缀过滤器
javax.swing.filechooser.FileFilter filterJpeg =
new javax.swing.filechooser.FileNameExtensionFilter("JPEG文件", "jpg", "jpeg");
javax.swing.filechooser.FileFilter filterGif =
new javax.swing.filechooser.FileNameExtensionFilter("GIF文件", "gif");
javax.swing.filechooser.FileFilter filterPng =
new javax.swing.filechooser.FileNameExtensionFilter("PNG文件", "png");
jfc.removeChoosableFileFilter(jfc.getFileFilter());
jfc.addChoosableFileFilter(filterJpeg);
jfc.addChoosableFileFilter(filterGif);
jfc.addChoosableFileFilter(filterPng);
}
//自定义的程序启动时初始化列表的方法
public void initList()
{
try
{
//获取Statement对象并查询所有的图片名
st=con.createStatement();
rs=st.executeQuery("select pname from pictures");
//清空列表数据向量
listData.clear();
//将结果集中所有的名称添加进向量
while(rs.next())
{
listData.add(rs.getString(1));
}
if(listData.isEmpty())
{//若列表为空则将删除图片菜单项设置为不可用状态
jmi[1].setEnabled(false);
}
//设置列表的数据模型
jl.setListData(listData);
//关闭结果集
rs.close();
//关闭语句
st.close();
}
catch(Exception e)
{
}
finally
{//调用此方法释放资源
this.closeStateResult();
}
}
//获取选中图片文件的方法
public File getPic()
{
//弹出保存对话框
int i=jfc.showSaveDialog(this);
if(i==JFileChooser.APPROVE_OPTION)
{//按下保存按扭
return jfc.getSelectedFile();
}
return null;
}
//判断数据库是否存在的方法
public boolean isDatabaseExists()
{
//声明数据库文件目录对应的File对象
File dbFileDir=new File("pic");
//返回数据库是否存在的情况
return dbFileDir.exists();
}
//自定义的获取数据库连接的方法
public void getConnection()
{
try
{
//测试数据库是否存在
if(!this.isDatabaseExists())
{
//若不存在则创建并连接数据库
con=DriverManager.getConnection("jdbc:derby:pic;create=true","","");
//获取Statement对象并在数据库中创建一张表
st=con.createStatement();
String str="CREATE TABLE pictures("+
"pname VARCHAR(30) PRIMARY KEY,pcontent BLOB)";
st.execute(str);
st.close();
}
else
{
//若数据库存在则连接数据库
con=DriverManager.getConnection("jdbc:derby:pic","","");
}
//初始化三个PrepareStatement对象
psInsert=con.prepareStatement(sqlInsert);
psDelete=con.prepareStatement(sqlDelete);
psSelect=con.prepareStatement(sqlSelect);
}
catch(Exception e)
{
}
}
//实现ListSelectionListener监听接口中的方法
public void valueChanged(ListSelectionEvent lse)
{
//列表选择事件的处理方法
if(jl.getSelectedIndex()==-1)
{
//若没有列表项被选中则方法返回
return;
}
try
{
//获取选中列表项的名称
String pname=(String)jl.getSelectedValue();
//设置预编译语句中字段的值
psSelect.setString(1,pname.trim());
//提交查询并获取结果集
rs=psSelect.executeQuery();
rs.next();
//从结果集中获取图象的字节数组
byte[] bb=rs.getBytes(1);
//为标签设置图标
this.jlp.setIcon(new ImageIcon(bb));
}
catch(Exception ee)
{
}
finally
{
this.closeStateResult();
}
}
//实现ActionListener监听接口中的方法
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==jmi[0])
{ /*实现添加图片的功能*/
//获取选择的图片文件
File f=this.getPic();
if(f!=null)
{
//定义FileInputStream以及PreparedStatement对象的引用
FileInputStream fin=null;
if(listData.contains(f.getName()))
{//若同名的图片在列表中已经存在则抱错
JOptionPane.showMessageDialog(this,
"列表中图片的名称不能相同!!!","错误",JOptionPane.ERROR_MESSAGE);
return;
}
try
{
//获取图片文件的长度
long length=f.length();
//创建byte数组其长度为图片文件的长度
byte[] bb=new byte[(int)length];
//创建文件类型字节流对象并为该对象指定源文件
fin=new FileInputStream(f);
//读取文件中的数据并存储在byte数组中
fin.read(bb);
//设置预编译语句中各个字段的值
psInsert.setString(1,f.getName());
psInsert.setBytes(2,bb);
//执行插入动作
psInsert.executeUpdate();
//将文件名添加到列表数据中
listData.add(f.getName());
//重新设置列表的数据模型
jl.setListData(listData);
//使列表选中最后一行
jl.setSelectedIndex(listData.size()-1);
//设置删除图片菜单到可用状态
jmi[1].setEnabled(true);
}
catch(Exception e)
{
}
finally
{
try
{//关闭输入流并释放资源
fin.close();
}
catch(Exception e){}
}
}
}
else if(ae.getSource()==jmi[1])
{ /*实现删除图片的功能*/
if(jl.getSelectedIndex()==-1)
{
//若没有列表项被选中则方法返回
return;
}
try
{
//获取选中列表项的名称
String pname=(String)jl.getSelectedValue();
//设置预编译语句中图片名称字段的值
psDelete.setString(1,pname.trim());
//提交更新
psDelete.executeUpdate();
//将需要删除图片的名称从列表中移除
listData.remove(jl.getSelectedIndex());
if(listData.isEmpty())
{//如果删除后列表为空则将删除图片菜单项设置为不可编辑状态
jmi[1].setEnabled(false);
}
//将窗体右侧的图片去除
jlp.setIcon(null);
}
catch(Exception ee)
{
}
}
else if(ae.getSource()==jmi[1])
{//安全退出程序
System.exit(0);
}
}
//自定义的关闭结果集的方法
public void closeStateResult()
{
try
{//关闭结果集
rs.close();
}
catch(Exception e)
{
}
}
public static void main(String args[])
{
//创建Sample32_9窗体对象
new Sample32_9();
}
}
感觉IO这一块东西很多,要理清楚思路的话觉得太繁琐了,一会继承,一会重写函数,一会又是字段,谁有IO这一块的结构图,就是清楚地反映IO中各个类之间的关系以及函数问题的图表???谢谢了!!!!
楼主参考一下这个系列博客吧,讲的不错
thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3) java中的io体系(4) java中的io体系(5)
感觉IO这一块东西很多,要理清楚思路的话觉得太繁琐了,一会继承,一会重写函数,一会又是字段,谁有IO这一块的结构图,就是清楚地反映IO中各个类之间的关系以及函数问题的图表???谢谢了!!!!
楼主参考一下这个系列博客吧,讲的不错
thinking in java中的io体系(1) thinking in java中的io体系(2) java中的io体系(3) java中的io体系(4) java中的io体系(5)