输入流输出流主要作用是保存数据,读取数据,作用是可以保存自己的画过的东西,还可以用于数据加密,在写进数据时给出一个规则,在读取数据时利用你规则就可以读出数据,否则数据就是一堆乱码
初步小结,日后在大总结
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中文件读写的原理至关重要。所有文件在存储时都是以字节的形式存在的,无论是文本文件还是二...
JAVA IO流小结 JAVA IO流是指Java语言中用来实现输入/输出操作的机制。IO流是指任何有能力产出数据的数据源对象或者有能力接收数据的数据源对象。他屏蔽了实际的I/O设备处理数据的细节。 一、流的定义和分类 流是...
- `ios`类是其他流类(如`istream`、`ostream`)的基类,提供了输入流和输出流的接口,使得我们可以方便地进行数据的读写操作。例如,`ifstream`用于输入文件流,`ofstream`用于输出文件流,`istringstream`和`...
### Java学习IO流小结——字符流 #### 知识点概述 在Java中,处理文件和数据流是一项基本而重要的任务。IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念...
本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1、流的控制 iomanip 在使用格式化I/O时应包含此头文件。 stdiostream 用于混合使用C和C + +的I/O机制时,例如想将C程序...
《雨流计数法在IGBT结温分析中的应用——MATLAB实现》 在电力电子技术领域,IGBT(绝缘栅双极晶体管)作为功率半导体元件,扮演着至关重要的角色。然而,IGBT在工作过程中会产生热量,其结温直接影响器件的性能和...
- 掌握文件读写的常用方法,包括输入流和输出流。 - 学习如何处理文本文件中的数据,如替换特定词汇。 - 了解文件操作中的异常处理。 **实验内容概述:** 1. **文件操作:** - 创建包含特定文本的文件。 - 读取...
#### 实验二:输入输出流的应用 **实验目的:** - 掌握文件读写的Java API。 - 学习文本处理及异常处理方法。 **实验内容:** - 创建一个包含特定字符串(如“Ihateprogramming!”)的文本文件。 - 编写程序从该...
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...
流分为两大类:输入流和输出流。输入流是从程序外部读取数据的流;而输出流则是向程序外部写入数据的流。这些流通常用于文件操作、网络通信等场景。 ### Java中的流分类 #### 按照功能分类 - **节点流**(Node ...
#### 九、小结 Java I/O系统是Java编程的重要组成部分,通过掌握不同的流类及其使用方法,可以有效地处理文件读写、网络通信等常见的输入输出操作。了解I/O流的基本概念、分类以及常用的类和接口,可以帮助开发者更...
《数字输入输出通道整理》这份PPT主要涵盖了数字量输入输出通道的相关技术,重点讲解了光电耦合隔离技术和数字量输入、输出通道的工作原理及应用。...思考题和本章小结则有助于巩固学习成果,加深对知识点的理解。
在C++编程语言中,文件流是处理文件输入输出的一种常用方式。本文将详细介绍C++标准库中与文件流读取相关的几个重要知识点。 #### 一、`ifstream`类及其基本用法 在C++中,`ifstream`类用于读取文本文件。它是`...
- **输入输出流类**:掌握使用`InputStream`和`OutputStream`等类进行文件读写的基本方法。 - **异常处理**:学会在文件处理过程中捕获并处理常见的异常,如`FileNotFoundException`。 **3.2 字符串处理** - **文本...
3. 输入流和输出流:Java中输入流和输出流是指从输入设备或输出设备读取或写入数据的流,包括File、FileReader、FileWriter、BufferedReader等类和对象。 4. 字符流和字节流:Java中字符流和字节流是指处理字符和...
- **`cerr`**:标准错误输出流,也与显示器关联,但不会被缓存,即输出立即可见。 - **`getline`**:从流中读取一行文本到字符串中。 #### 文件I/O的基本概念 在C++中,文件I/O操作主要通过`fstream`库中的类实现...
Java Socket通信小结 在Java编程中,Socket通信是一种基于TCP/IP协议的网络通信方式,它允许两个应用程序之间建立可靠的、双向的数据传输连接。本文将深入探讨Java Socket通信的基础知识,以及如何通过Java实现一个...
6.11 小结: 本章涵盖了Java中数据流的各个方面,从基本的输入输出方法到高级的文件操作和对象序列化,为开发者提供了全面的工具来处理数据的传输和存储。 理解这些知识点对于进行Java编程,尤其是涉及到文件操作、...
然后创建一个`Scanner`对象,通常通过`System.in`来获取标准输入流: ```java Scanner sc = new Scanner(System.in); ``` 接着,你可以使用`nextInt()`方法读取整数,`next()`方法读取字符串等: ```java int n =...