高级IO流--I/O基本原理——Java

java.io包中定义了多个流类型来实现输入/输出功能。

节点流:从一个特定的地方(节点)读写数据,例如磁盘或者一块内存。例:FileReader,提供read()处理单个字符

处理流:对一个已存在的流的连接和封装,通过所封装的流的功能调用数据读/写的功能。例:BufferReader,提供readLine()处理一行数据。

还可分为字符流和字节流:
高级IO流--I/O基本原理——Java_第1张图片

高级IO流--I/O基本原理——Java_第2张图片高级IO流--I/O基本原理——Java_第3张图片

高级IO流--I/O基本原理——Java_第4张图片

高级IO流--I/O基本原理——Java_第5张图片
高级IO流--I/O基本原理——Java_第6张图片


高级IO流--I/O基本原理——Java_第7张图片

高级IO流--I/O基本原理——Java_第8张图片


实例练习:

注:io流的相关操作可能会抛出捕获异常,要在try块中使用。

package com.bn;
import java.io.*;
public class IOEx1//逐字节的处理
{
	public static void main(String args[])
	{
		try
		{
			FileReader input = new FileReader("IOEx1.java");
			FileWriter output = new FileWriter("text.txt");
			int read = input.read();
			while(read!=-1)//到结尾时返回值为-1
			{
				output.write(read);//逐个字节读取
				read=input.read();
			}
			input.close();
			output.close();
		}catch(IOException e)
		{
			System.out.print(e);
		}
	}	
}

高级IO流--I/O基本原理——Java_第9张图片


数据库中图片(二进制数据)的插入和读取

数据库中建表:

drop table picdata;
create table picdata
(
    pname varchar(50) primary key,
	pdata MediumBlob
);

图片文件插入:

package com.bn;
import java.io.*;
import java.sql.*;

public class InputPicture//在数据库的picdata表中插入图片的二进制数据
{
	public static void main(String args[]) throws Exception
	{
		String preFix="pic/";//图片路径
		String fileName="Robot.png";//文件名
		
		File f=new File(preFix+fileName);//代表文件的抽象描述
		int size=(int)f.length();//获取文件的大小,返回值文件字节数量
		byte[] data=new byte[size];//字节数组,存放数据的二进制数据
		FileInputStream fin=new FileInputStream(f);//创建文件字节输入流
		fin.read(data);//读取到的数据放到字节数组中
		fin.close();//关闭输入流		
		//数据库操作,放入数据库
		Class.forName("org.gjt.mm.mysql.Driver");
		Connection con=DriverManager.getConnection
		(
			"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8",
			"root",
			""
		);
		String sql="insert into picData values(?,?)";
		PreparedStatement ps=con.prepareStatement(sql);//预编译语句
		ps.setString(1,fileName);//置入文件名
		ps.setBytes(2,data);//置入数据
		ps.executeUpdate();//执行更新
		ps.close();//有开必有关
		con.close();		
	}
}

图片的读取:

package com.bn;
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 PictureViewer extends JFrame//从数据库中的图片的二进制文件中获取数据的图片显示器
{
	public static void main(String args[])  
	{
		new PictureViewer();
	}
	
	JList jList=new JList();//左侧块
	JScrollPane jspz=new JScrollPane(jList);//外面加一个JSP使JList能正常工作,否则可能会出问题
	
	JLabel jlPic=new JLabel();//右侧块
	JScrollPane jspy=new JScrollPane(jlPic);
	
	JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy);//水平切割成两块
	
	Connection con;
	
	public PictureViewer()
	{
		this.setTitle("图片查看器 V0.1");
		
		jlPic.setHorizontalAlignment(JLabel.CENTER);
		
		jsp.setDividerLocation(150);
		jsp.setDividerSize(4);
		this.add(jsp);
		
		this.setBounds(100,100,600,450);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		getConnection();
		initList();
	}
	
	public void getConnection()
	{
		try
		{
			Class.forName("org.gjt.mm.mysql.Driver");//加载数据库驱动
			con=DriverManager.getConnection
			(
				"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8",
				"root",
				""
			);//获取数据库连接
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void initList()//左侧列表初始化
	{
		try
		{
			Statement st=con.createStatement();//创建语句
			ResultSet rs=st.executeQuery("select pname from picData");//执行查询
			Vector ame=new Vector();//存放名称
			while(rs.next())//把名称存入
			{
				ame.add(rs.getString(1));
			}
			rs.close();
			st.close();
			jList.setListData(ame);//插入名称	
			
			jList.addListSelectionListener//添加列表选择监听器
			(
				new ListSelectionListener()
				{
					public void valueChanged(ListSelectionEvent e)
					{
						try
						{
							String pname=(String)jList.getSelectedValue();//原本类型是object
							String sql="select pdata from picData where pname='"+
							pname+"'";
							Statement st=con.createStatement();
							ResultSet rs=st.executeQuery(sql);
							if(rs.next())//因为name为主键字段,只要其中有值,就一定是目标
							{
								byte[] data=rs.getBytes(1);//获取字节数组
								ImageIcon ii=new ImageIcon(data);//字节转为图片
								jlPic.setIcon(ii);//显示图片
							}
							rs.close();
							st.close();
						}
						catch(Exception ea)
						{
							ea.printStackTrace();
						}
					}
				}
			);
					
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

 

你可能感兴趣的:(Java,培训笔记)