`
feng1990liu
  • 浏览: 8299 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

输入流输出流小结

 
阅读更多

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

初步小结,日后在大总结

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));
				}
			}
			@Override
			public void mousePressed(MouseEvent e) {
				 x1=e.getX();
				 y1=e.getY();
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public 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:/draw02.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();
				}
			}
		}
	};
}

 

分享到:
评论

相关推荐

    Android中文件读写(输入流和输出流)操作小结

    主要介绍了Android中文件读写(输入流和输出流)操作小结,本文总结了Android中文件读写的原理、字节流和字符流的区别、文件读写的步骤、输入流和输出流以及代码实例等内容,需要的朋友可以参考下

    C++中输入输出流及文件流操作总结

    本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1、流的控制  iomanip 在使用格式化I/O时应包含此头文件。  stdiostream 用于混合使用C和C + +的I/O机制时,例如想将C程序...

    java实验--贪心猪小游戏、输入输出流、图形化界面、图书系统.docx

    java实验--贪心猪小游戏、输入输出流、图形化界面、图书系统.docx

    Java实验--贪心猪小游戏、输入输出流、图形化界面、图书管理系统.docx

    Java实验--贪心猪小游戏、输入输出流、图形化界面、图书管理系统.docx

    Python变量的输入输出-格式化输出及小结

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...

    c++语言程序设计(第三版)

    11.3 输入流 11.4 输入/输出流 11.5 小结 习题 第12章异常处理 12.1 异常处理的基本思想 12.2 C++异常处理的实现 12.3 异常处理中的构造与析构 12.4 小结 习题 第13章 MFC库与Windows程序开发概述 13.1 Windows的...

    C++编程思想习题

    6.1为什么要用输入输出流 6.2解决输入输出流问题 6.2.1预先了解操作符重载 6.2.2插入符与提取符 6.2.3通常用法 6.2.4面向行的输入 6.3文件输入输出流 6.4输入输出流缓冲 6.5在输入输出流中查找 6.6strstreams 6.6.1...

    低压输入交错并联双管正激变换器的研 究.mht

    针对航空静止变流器的直流环节,对交错并联双管正激变换器进行了研究。分析表明,双管正激电路...在完成航空DC27V低输入电压,DC190V输出,1kW的样机基础上,对输入为大电流的相关电路设计问题进行了详实的讨论和小结。

    C++编程思想(第2版 第2卷)

    介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承问题的难点,展示RTTI的实际使用,描述了典型的设计模式及其实现,特别介绍被认为是标准C++下一版特征之一的多线程处理...

    UNIX环境高级编程

    第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.6.1 输入函数 96 5.6.2 输出函数 97 ...5.15 小结 108 习题 108

    UNIX环境高级编程(第五章)

    第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.6.1 输入函数 96 5.6.2 输出函数 97 ...5.15 小结 108 习题 108

    C++高级参考手册 完全自学 内容详细 讲解通俗易懂

    6.1 为什么要用输入输出流 6.2 解决输入输出流问题 6.2.1 预先了解操作符重载 6.2.2 插入符与提取符 6.2.3 通常用法 6.2.4 面向行的输入 6.3 文件输入输出流 6.4 输入输出流缓冲 6.5 在输入输出流中查找 ...

    Java I/O编程 java

    数据流的概念及输入输出方法 字节流和字符流 文件、文件流 随机访问文件 过滤流 管道流 对象流 数据流小结

    C++标准IO文档

    C++标准IO 2 1.面向对象的标准库 2 2.流的状态 4 1.流状态 4 2.流状态的使用 4 3.缓存的管理 5 1.刷新输出缓冲区 5 2.输入和输出绑定 6 4.文件IO 6 1.类与对象 6 2.函数调用 7 ...5.文件定位tellg(),tellp(),...小结: 13

    清华大学计算机课程之《C++程序设计》

    ◇ 第一章 引言 - 课前索引 - 第一节 计算机语言及其发展 ...◇ 第十二章 输入输出流 - 课前索引 - 第一节 输入输出流类 - 第二节 文件流 - 第三节 字节流类 - 第四节 流错误处理 - 本章小结 - 课后习题

    C++编程思想 例子和叙述讲解C++编程

    6.1 为什么要用输入输出流 83 6.2 解决输入输出流问题 86 6.2.1 预先了解操作符重载 86 6.2.2 插入符与提取符 87 6.2.3 通常用法 88 6.2.4 面向行的输入 90 6.3 文件输入输出流 91 6.4 输入输出流缓冲 93 6.5 在输入...

    C++编程思想.pdf

    6.1 为什么要用输入输出流 83 6.2 解决输入输出流问题 86 6.2.1 预先了解操作符重载 86 6.2.2 插入符与提取符 87 6.2.3 通常用法 88 6.2.4 面向行的输入 90 6.3 文件输入输出流 91 6.4 输入输出流缓冲 93 6.5 在输入...

    C++编程思想

    6.1 为什么要用输入输出流 83 6.2 解决输入输出流问题 86 6.2.1 预先了解操作符重载 86 6.2.2 插入符与提取符 87 6.2.3 通常用法 88 6.2.4 面向行的输入 90 6.3 文件输入输出流 91 6.4 输入输出流缓冲 93 6.5 在输入...

Global site tag (gtag.js) - Google Analytics