首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

输入流输出流总结

2013-08-04 
输入流输出流小结输入流输出流主要作用是保存数据,读取数据,作用是可以保存自己的画过的东西,还可以用于数

输入流输出流小结

输入流输出流主要作用是保存数据,读取数据,作用是可以保存自己的画过的东西,还可以用于数据加密,在写进数据时给出一个规则,在读取数据时利用你规则就可以读出数据,否则数据就是一堆乱码

初步小结,日后在大总结

package FrameIO20130920;import java.awt.Color;import java.awt.Graphics;import java.awt.List;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.Random;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;public class drawDrame extends JFrame{ImageIcon con=new ImageIcon("images/picture.jpg");private BufferedImage  image01;//定义坐标属性private int x1,y1,x2,y2;//画布属性private Graphics g;private Color color;//标志private String drawCmd="line";//shaape队列ArrayList<Shape> lineList=new ArrayList<Shape>();//函数入口public static void main(String[] args){drawDrame frame=new drawDrame();frame.showUI();}//构造初始化界面的方法public void showUI(){this.setTitle("保存文件");this.setSize(800,600);this.setDefaultCloseOperation(3);JMenuBar bar=new JMenuBar();JMenu menu=new JMenu("文件");JMenu menu01=new JMenu("图片");JMenuItem drawLine=new JMenuItem("画线");JMenuItem drawCircle=new JMenuItem("画圆");JMenuItem openItem=new JMenuItem("打开");JMenuItem saveItem=new JMenuItem("保存");JMenuItem closeItem=new JMenuItem("关闭");JMenuItem drawpic=new JMenuItem("画图片");JMenuItem savepic=new JMenuItem("保存图片");JMenuItem openpic=new JMenuItem("打开图片");menu.add(drawLine);menu.add(drawCircle);menu.add(openItem);menu.add(saveItem);menu.add(closeItem);menu01.add(drawpic);menu01.add(savepic);menu01.add(openpic);bar.add(menu);bar.add(menu01);this.setJMenuBar(bar);this.setVisible(true);g=this.getGraphics();//加事件监听器saveItem.addActionListener(menuListener);openItem.addActionListener(menuListener);drawLine.addActionListener(menuListener);drawCircle.addActionListener(menuListener);drawpic.addActionListener(menuListener);savepic.addActionListener(menuListener);openpic.addActionListener(menuListener);//鼠标监听器this.addMouseListener(new MouseListener() {public void mouseReleased(MouseEvent e) {x2=e.getX();y2=e.getY();if(drawCmd.equals("line")){Random random=new Random();//随机色彩color=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));Line line=new Line();line.setX1(x1);line.setY1(y1);line.setX2(x2);line.setY2(y2);//line.setColor(color);g.drawLine(x1, y1, x2, y2);lineList.add(line);}else if(drawCmd.equals("circle")){g.drawOval(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));}}@Overridepublic void mousePressed(MouseEvent e) { x1=e.getX(); y1=e.getY();}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});}//实例化事件监听器对象ActionListener menuListener=new ActionListener() {public void actionPerformed(ActionEvent e) {String cmd=e.getActionCommand();if("画线".equals(cmd)){drawCmd="line";}else if("画圆".equals(cmd)){drawCmd="circle";}if("保存".equals(cmd)){try {java.io.FileOutputStream fos=new FileOutputStream("D:/draw03.dat");DataOutputStream dos=new DataOutputStream(fos);//把总线条的数量放在第一个位置dos.writeInt(lineList.size());for(int i=0;i<lineList.size();i++){Shape shape=lineList.get(i);//判断shape是什么类型if(shape instanceof Line){//用数据1表示线段数据dos.writeInt(1);Line line=(Line)shape;dos.writeInt(line.getX1());dos.writeInt(line.getY1());dos.writeInt(line.getX2());dos.writeInt(line.getY2());//dos.writeInt(line.getColor().getRGB());}else if(shape instanceof Circle){//用数据2表示画圆dos.writeInt(2);Circle circle=(Circle)lineList.get(i);}}//画完再关闭!!!!dos.close();fos.close();//关闭数据流System.out.println("保存成功");} catch (Exception e1) {e1.printStackTrace();}}if("打开".equals(cmd)){try {java.io.FileInputStream fis=new FileInputStream("D:/draw02.dat");DataInputStream dis=new DataInputStream(fis);//把总线条的数量放在第一个位置int total=dis.readInt();for(int i=0;i<total;i++){int type=dis.readInt();if(type==1){Line line=new Line();line.setX1(dis.readInt());line.setY1(dis.readInt());line.setX2(dis.readInt());line.setY2(dis.readInt());//line.setColor(new Color(dis.readInt()));//刚开始只画一条线//x1=dis.readInt();//y1=dis.readInt();//x2=dis.readInt();//y2=dis.readInt();//g.setColor(line.getColor());g.drawLine(line.getX1(),line.getY1(),line.getX2(),line.getY2());}else if(type==2){Circle circle=new Circle();}}dis.close();fis.close();//关闭数据流System.out.println("打开成功");} catch (Exception e1) {e1.printStackTrace();}}/********图片类处理************/if("画图片".equals(cmd)){//缓冲图像,是一张白纸,实为窗体image01=new BufferedImage(con.getIconWidth(), con.getIconHeight(), BufferedImage.TYPE_INT_RGB);Graphics g2=image01.getGraphics();//g2.fillOval(100, 100, 100, 100);//白纸上上画图片g2.drawImage(con.getImage(), 0, 0, null);//白纸画到窗体上g.drawImage(image01, 0, 0, null);}if("打开图片".equals(cmd)){//java.io.FileInputStream fis;try {java.io.FileInputStream fis = new FileInputStream("D:/pic.txt");java.io.DataInputStream dis=new DataInputStream(fis);int wide=dis.readInt();int height=dis.readInt();for(int i=0;i<wide;i++){for (int j=0;j<height;j++){//dis.readInt();//g.setColor(new Color(dis.readInt()));g.setColor(new Color(dis.readInt()));g.drawLine(i+200, j+200, i+200, j+200);}}System.out.println("打开图片成功");} catch (Exception e1) {e1.printStackTrace();}}if("保存图片".equals(cmd)){try {java.io.FileOutputStream fos=new FileOutputStream("D:/pic.txt");java.io.DataOutputStream dos=new DataOutputStream(fos);int width=image01.getWidth();int height=image01.getHeight();dos.writeInt(width);dos.writeInt(height);//写入四个字节for(int x=0;x<width;x++){for(int y=0;y<height;y++){//把点的色彩存入文件//System.out.println("写点1");dos.writeInt(image01.getRGB(x, y));//System.out.println("写点2");}}dos.close();fos.close();System.out.println("保存图片成功");} catch (Exception e1) {e1.printStackTrace();}}}};}

?

热点排行