`
feng1990liu
  • 浏览: 8596 次
  • 性别: 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中文件读写的原理至关重要。所有文件在存储时都是以字节的形式存在的,无论是文本文件还是二...

    JAVA IO流小结

    JAVA IO流小结 JAVA IO流是指Java语言中用来实现输入/输出操作的机制。IO流是指任何有能力产出数据的数据源对象或者有能力接收数据的数据源对象。他屏蔽了实际的I/O设备处理数据的细节。 一、流的定义和分类 流是...

    C++程序设计基础:11-输入输出流.pptx

    - `ios`类是其他流类(如`istream`、`ostream`)的基类,提供了输入流和输出流的接口,使得我们可以方便地进行数据的读写操作。例如,`ifstream`用于输入文件流,`ofstream`用于输出文件流,`istringstream`和`...

    Java学习IO流小结--字符流

    ### Java学习IO流小结——字符流 #### 知识点概述 在Java中,处理文件和数据流是一项基本而重要的任务。IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念...

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

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

    rainflow.zip_igbt 雨流_matlab雨流_雨流结温_雨流计数_雨流计数法

    《雨流计数法在IGBT结温分析中的应用——MATLAB实现》 在电力电子技术领域,IGBT(绝缘栅双极晶体管)作为功率半导体元件,扮演着至关重要的角色。然而,IGBT在工作过程中会产生热量,其结温直接影响器件的性能和...

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

    - 掌握文件读写的常用方法,包括输入流和输出流。 - 学习如何处理文本文件中的数据,如替换特定词汇。 - 了解文件操作中的异常处理。 **实验内容概述:** 1. **文件操作:** - 创建包含特定文本的文件。 - 读取...

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

    #### 实验二:输入输出流的应用 **实验目的:** - 掌握文件读写的Java API。 - 学习文本处理及异常处理方法。 **实验内容:** - 创建一个包含特定字符串(如“Ihateprogramming!”)的文本文件。 - 编写程序从该...

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

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

    java中各种流对比应用小结

    流分为两大类:输入流和输出流。输入流是从程序外部读取数据的流;而输出流则是向程序外部写入数据的流。这些流通常用于文件操作、网络通信等场景。 ### Java中的流分类 #### 按照功能分类 - **节点流**(Node ...

    java流IO总结

    #### 九、小结 Java I/O系统是Java编程的重要组成部分,通过掌握不同的流类及其使用方法,可以有效地处理文件读写、网络通信等常见的输入输出操作。了解I/O流的基本概念、分类以及常用的类和接口,可以帮助开发者更...

    C++标准库中文件流读取操作小结

    在C++编程语言中,文件流是处理文件输入输出的一种常用方式。本文将详细介绍C++标准库中与文件流读取相关的几个重要知识点。 #### 一、`ifstream`类及其基本用法 在C++中,`ifstream`类用于读取文本文件。它是`...

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

    - **输入输出流类**:掌握使用`InputStream`和`OutputStream`等类进行文件读写的基本方法。 - **异常处理**:学会在文件处理过程中捕获并处理常见的异常,如`FileNotFoundException`。 **3.2 字符串处理** - **文本...

    2023年南京邮电大学Java实验报告三.docx

    3. 输入流和输出流:Java中输入流和输出流是指从输入设备或输出设备读取或写入数据的流,包括File、FileReader、FileWriter、BufferedReader等类和对象。 4. 字符流和字节流:Java中字符流和字节流是指处理字符和...

    数字输入输出通道整理.ppt

    在现代工业控制系统中,数字输入输出通道是连接外部设备与控制系统的核心,保证了数据的准确传输与处理。...结合思考题和本章小结,读者可以更深刻地掌握所学知识,为实际工作中的应用提供理论支持和技术指导。

    c++ 文件操作小结

    - **`cerr`**:标准错误输出流,也与显示器关联,但不会被缓存,即输出立即可见。 - **`getline`**:从流中读取一行文本到字符串中。 #### 文件I/O的基本概念 在C++中,文件I/O操作主要通过`fstream`库中的类实现...

    Java Socket通信小结

    Java Socket通信小结 在Java编程中,Socket通信是一种基于TCP/IP协议的网络通信方式,它允许两个应用程序之间建立可靠的、双向的数据传输连接。本文将深入探讨Java Socket通信的基础知识,以及如何通过Java实现一个...

    java教学课件:第6章 数据流的运用.ppt

    6.11 小结: 本章涵盖了Java中数据流的各个方面,从基本的输入输出方法到高级的文件操作和对象序列化,为开发者提供了全面的工具来处理数据的传输和存储。 理解这些知识点对于进行Java编程,尤其是涉及到文件操作、...

    Java编程开发 Java输入语句小结.doc

    然后创建一个`Scanner`对象,通常通过`System.in`来获取标准输入流: ```java Scanner sc = new Scanner(System.in); ``` 接着,你可以使用`nextInt()`方法读取整数,`next()`方法读取字符串等: ```java int n =...

Global site tag (gtag.js) - Google Analytics