版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、能力目标:u理解输入输出流,理解字节流、字符流。u掌握文件字节和字符输入输出流、随机访问文件流、对象输入输出流。u能使用文件对话框和其它常用对话框。u理解类的序列化(Serializable),能进行对象输入输出操作。u能编写文件复制、对象读写等应用程序。u12.1 任务预览u12.2 数据流u12.3 文件输入输出流u12.4 文件对话框与常用对话框u12.5 随机访问文件u12.6 序列化与对象输入输出u12.7 本章小结u12.8 实训12:文件复制与对象读写u本章实训程序运行结果: u流是有方向的,分: 输入流,用于读取数据源的数据; 输出流,用于把数据写入目的地。 u流本质是字节序列
2、的封装,有两种类型: 字节流,是对二进制字节进行读写的对象。 字符流,按一定编码格式以字符为单位进行操作。u因此有4种基本的流:(1)字节输入流,由InputStream子类构建。(2)字节输出流,由OutputStream子类构建,(3)字符输入流,由Reader子类构建,(4)字符输出流,由Writer子类构建。 u关于流的操作,通常有3步: 建立流对象 调用流的读/写方法进行数据传输(即输入/输出) 关闭流ujava.io包中关于文件操作的常用类:(1)File(2)FileInputStream(3)FileOutputStream(4)FileReader(5)FileWriter(
3、6)RandomAccessFileu【例12-1】使用文件字符流建立文本文件,读取文件内容并显示。 try File file = new File(D:abc.txt); FileWriter fileout = new FileWriter(file); /字符输出流 fileout.write(第1行(文本文件内容)abcdefg); fileout.write(rn第2行 1234567.); fileout.write(rn第3行 end); fileout.close(); FileReader filein = new FileReader(file); /字符输入流 int
4、charcode; while (charcode = filein.read()!= -1) /判断是否到末尾 System.out.print(char)charcode); /屏幕显示 filein.close(); catch(Exception e) u【例12-2】使用文件字节输入输出流编写文件复制程序。 try Scanner scan = new Scanner(System.in); 请输入含路径的源文件名 String source = scan.next(); FileInputStream input = new FileInputStream(source); 请输入
5、含路径的目标文件名 String target = scan.next(); FileOutputStream output = new FileOutputStream(target); int readbyte; while(readbyte = input.read()!= -1) /循环读直到末尾 output.write(readbyte); input.close(); output.close(); catch(Exception e) finally /注:能复制图像、声音、视频等非文本文件 ujavax.swing包的JFileChooser类实例方法 showOpenDia
6、log 弹出打开文件对话框 showSaveDialog 弹出保存文件对话框 【例12-3】编写使用打开文件对话框的程序。JFileChooser chooser = new JFileChooser();int returnVal = chooser.showOpenDialog(null);if (returnVal = JFileChooser.APPROVE_OPTION) JOptionPane.showMessageDialog(null, 您选择打开文件 + chooser.getSelectedFile(); /显示消息框if (returnVal = JFileChooser
7、.CANCEL_OPTION) JOptionPane.showMessageDialog(null, 您选择“取消”打开文件); ujavax.swing包中JOptionPane类的静态方法(1)showMessageDialog:显示消息框。(2)showInputDialog:显示输入框。(3)showConfirmDialog:显示确认框。u方法常用参数:parentComponent:可设为null。message:要显示的消息,类型为根类Object。title:对话框的标题,属于字符串类型。optionType:按钮种类,整型常量字段。messageType:图标种类,整型常量
8、字段。 String str;str = JOptionPane.showInputDialog(请输入一个字符串: ); if (str = null | str.equals() System.exit(0); int option;option = JOptionPane.showConfirmDialog( null, 确定要删除+ str +吗?);if (option = JOptionPane.YES_OPTION) JOptionPane.showMessageDialog(null, 您选择了确定删除); str = null; else JOptionPane.showMe
9、ssageDialog(null, 您选择了不删除); uRandomAccessFile同时支持文件的读、写操作,并且文件读写位置可随机选定。u模式有rw; 如果是只读的,就是r。uRandomAccessFile类的构造方法有两种重载形式:RandomAccessFile(File file, String mode)RandomAccessFile(String name, String mode) tryJFileChooser chooser = new JFileChooser(); /文件对话框 if(chooser.showOpenDialog(null)= JFileChoo
10、ser.APPROVE_OPTION) File file = chooser.getSelectedFile(); RandomAccessFile randomfile = new RandomAccessFile(file, rw); System.out.println(文件 + file + 内容如下:); StringBuilder changeStr = new StringBuilder(); while (true) try char cha = randomfile.readChar(); /读字符 changeStr.append(cha); catch(EOFExcep
11、tion eof) break; /遇到文件末尾结束System.out.println(changeStr); /显示文件内容System.out.println(-);Scanner scan = new Scanner(System.in);System.out.println(请输入用户姓名:);String name = scan.next();System.out.println(请输入密码:);String password = scan.next();randomfile.seek(file.length(); /定位文件末尾randomfile.writeChars(name
12、+|+password+rn);/写串System.out.println(已追加姓名和密码到+ file);randomfile.close(); /关闭随机访问文件 catch(Exception e)finallyu两次运行结果如图所示。 try JFileChooser chooser = new JFileChooser(); String source, target; System.out.println(从打开文件对话框中选择源文件.); if(chooser.showOpenDialog(null)=JFileChooser.APPROVE_OPTION) source =
13、chooser.getSelectedFile().toString(); System.out.println(选中的源文件是: + source); RandomAccessFile input = new RandomAccessFile(source, r); /源文件流读模式 System.out.println(从保存文件对话框中选择目标文件.); if(chooser.showSaveDialog(null)=JFileChooser.APPROVE_OPTION)target = chooser.getSelectedFile().toString();System.out.p
14、rintln(选中的目标文件是: + target);if (source.equals(target) JOptionPane.showMessageDialog( null, 源文件与目标文件路径相同,无法复制);throw new Exception(源文件与目标文件路径相同);RandomAccessFile output = new RandomAccessFile( target, rw); /目标文件int aByte;while(aByte = input.read()!= -1) /循环读源字节直到末尾 output.write(aByte); /把所读的字节写到目标流 Sy
15、stem.out.println(-已成功把源文件复制到目标文件!); output.close(); /关闭目标文件流 input.close(); /关闭源文件流 catch(Exception e) finally.-程序结束。);u类要序列化必须实现Serializable接口,它没有任何成员。u实现Serializable接口的类对象才能进行输入输出操作,才能记录、传输和保存对象。u对象输入输出操作涉及: ObjectOutputStream流,调用其writeObject(Object) 方法,可以将对象写入流中(序列化操作)。如果对象输出流与文件关联,则对象便能保存到文件中。 O
16、bjectInputStream流,调用其readObject()方法,可以读取流中的对象(反序列化)。如果对象输入流与文件关联,则可将读取保存在文件中的对象。u构建若干个客户类对象并保存到D:customer.dat文件中。最后从文件中依次读取对象并将其属性显示在屏幕上。class Customer implements Serializable /序列化的客户类private static final long serialVersionUID = 10L; /序列化版本号private String name; /姓名private String phone; /电话public Cus
17、tomer(String name,String phone) = name; this.phone = phone; public String getName() return name; public String getPhone() return phone; public String toString() StringBuilder sb = new StringBuilder(); sb.append(客户名: + name); sb.append(t电话: + phone); return sb.toString(); public class Examp
18、le7 /主类public static void main(String args) tryFileOutputStream fileout = new FileOutputStream(D:customer.dat); ObjectOutputStream objout = new ObjectOutputStream(fileout); Customer cust1 = new Customer(张三,12345678);Customer cust2 = new Customer(李四,87654321);Customer cust3 = new Customer(王武,88888888
19、);objout.writeObject(cust1); /写对象到对象输出流objout.writeObject(cust2);objout.writeObject(cust3);System.out.println(已构建3个客户对象并保存到文件中。);objout.close(); /关闭对象输出流fileout.close(); /关闭文件输出流System.out.println(读取存放在文件中的客户对象信息.);FileInputStream filein = new FileInputStream(D:customer.dat);ObjectInputStream objin
20、= new ObjectInputStream(filein);while(true) try Customer stu =(Customer)objin.readObject();System.out.println(stu.toString(); catch(EOFException ex) break; /遇到流末尾读取结束objin.close(); /关闭对象输入流filein.close(); /关闭文件输入流 catch(Exception e)finallyu数据流就是数据流过的一个通道(管道)。流也是对象。u最基本的数据流是字节流,此外,还有字符流、文件流、对象流、数组流等。u流有两个互反的方向:输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省随州市2026届高三下学期二模考试物理+答案
- 广东省珠海市香洲区2026年中考模拟考试数学试卷附答案
- 物业公司绩效考核及薪酬方案
- 2026年新能源汽车电池包轻量化粉末涂料(粒径2040μ)涂装规范
- 2026年低轨卫星星座在极地通信领域的应用方案
- 2026年混改项目审计评估操作规范:中介机构选聘与资产评估核准备案流程
- 2026年小流域综合治理与乡村振兴衔接(人居环境整治)方案
- 2026年海外仓尾程配送成本控制与物流商KPI考核办法
- 护理查房:循环系统疾病护理观察
- 2026年浙船E行 浙里航场景:航运物流数据赋能增效实践案例
- 2026延安志丹县人力资源和社会保障局公益性岗位招聘(50人)笔试备考题库及答案解析
- 2026年山东省立第三医院初级岗位公开招聘人员(27人)笔试参考题库及答案解析
- 2026湖北武汉市江汉城市更新有限公司及其下属子公司招聘11人笔试备考题库及答案解析
- 2026年温州永嘉县国有企业面向社会公开招聘工作人员12人笔试备考题库及答案解析
- 2025-2026学年地质版(新教材)小学体育与健康二年级全一册第二学期教学计划及进度表
- 2026年部编版新教材道德与法治小学三年级下册教学计划(含进度表)
- 2026年高考数学二轮复习:专题13 数列的综合大题(含知识融合)9大题型(专题专练)(全国适用)(原卷版)
- 学校洗衣机卫生消毒制度
- 2025年河南信阳事业单位联考《公共基础知识》试题附答案
- 2026年重庆公务员考试《申论》试题题库(答案+解析)
- 2026年书记员考试题库100道含答案(考试直接用)
评论
0/150
提交评论