Java语言程序设计第八章.ppt_第1页
Java语言程序设计第八章.ppt_第2页
Java语言程序设计第八章.ppt_第3页
Java语言程序设计第八章.ppt_第4页
Java语言程序设计第八章.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,Java面向对象程序设计,第8章 Java的I/O操作,2,本章主要内容,File类 面向字节的I/O操作 FileInputStream、FileOutputStream BufferedInputStream、 BufferedOutputStream 面向字符的I/O操作 FileReader、FileWriter BufferedReader、BufferedWriter 对象的序列化,3,File类,什么是文件? 文件可认为是相关记录或放在一起的数据的集合。在文件系统中,文件夹和文件从本质上没有区别,文件夹只是一种特殊的文件,里面保存了一组文件的名字而已。 文件一般存储在哪里?

2、可以通过java.io.File类对文件或者文件夹进行一些操作,如修改属性、删除文件、创建文件夹等。,4,File类,构造方法 File(Fileparent, Stringchild) :根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 File(Stringpathname):通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。 File(Stringparent, Stringchild):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 常用实例方法 exists() 、createNewFi

3、le() 、delete()、getAbsolutePath()、canWrite() 、isDirectory()、isFile() 、length() 、lastModified() 、listFiles() 、mkdir(),演示File类,5,流的概念,流是指一连串流动的字符,是以先进先出方式发送信息的通道。,InputStream,OutputStream,来自数据源的数据流,流向目的地的数据流,6,流的分类,字节流 InputStream OutputStream 字符流 Reader Writer,7,用FileInputStream 读文件,引入相关的类 构造一个文件输入流对象

4、 利用文件输入流类的方法读取文件的数据 关闭文件输入流对象,演示FileInputStream类,import java.io.*; public class TestFileInputStream public static void main(String args) throws FileNotFoundException, IOException FileInputStream fis = null; try fis = new FileInputStream(new File(d:/java/a.txt); System.out.println(fis.available(); in

5、t ch; while (ch = fis.read() != -1) System.out.println(char)ch); finally fis.close(); ,8,用FileOutputStream 写文件,引入相关的类 构造一个文件输出流对象 利用文件输出流类的方法写文件 关闭文件输出流对象,演示FileOutputStream类,import java.io.*; public class TestFileOutputStream public static void main(String args) throws FileNotFoundException, IOExce

6、ption FileOutputStream fos = null; String str = 你好!rnJava; byte bytes = str.getBytes(); try fos = new FileOutputStream(new File(d:/java/a.txt); for (int i = 0; i bytes.length; i+) fos.write(bytesi); finally fos.close(); ,void write(byte b) :将 b.length 个字节写入此输出流。 void write(byte b, int off, int len):

7、将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 void write(int b) :将指定 byte 写入此输出流。,9,使用FileInputStream和FileOutputStream实现文件复制,String from = d:/java/in.dat; String to = d:/java/out.dat; FileInputStream in = null; FileOutputStream out = null; try in = new FileInputStream(from); out = new FileOutputStream(to)

8、; int i = 0; while(i = in.read( ) != -1) out.write(i); finally in.close( ); out.close( ); ,演示使用字节流文件复制,10,使用字节流的Filter,BufferedOutputStream与BufferedInputStream是完全相对应的,对数据流提供缓冲技术。 使用BufferedOutputStream与BufferedInputStream来包装的字节流,当每次向流写入或输出时,不必每次都访问极慢的外部设备。,演示使用字节流的Filter实现文件复制,String from = d:/java/

9、a.txt; String to = d:/java/b.txt; BufferedInputStream in = null; BufferedOutputStream out = null; try in = new BufferedInputStream(new FileInputStream(from); out = new BufferedOutputStream(new FileOutputStream(to); int i = 0; while (i = in.read() != -1) out.write(i); finally in.close();out.close();

10、,11,用FileReader 读文件,引入相关的类 构造一个FileReader对象 利用FileReader类的方法读取文件的数据 关闭FileReader对象,演示FileReader类,import java.io.*; public class TestFileReader public static void main(String args) throws FileNotFoundException, IOException FileReader fr = null; try fr = new FileReader (new File(d:/java/a.txt); int ch

11、; while (ch = fr.read() != -1) System.out.println(char)ch); finally fr.close(); ,12,用FileWriter 写文件,引入相关的类 构造一个FileWriter对象 利用FileWriter类的方法写文件 关闭FileWriter对象,演示FileWriter类,import java.io.*; public class TestFileWriter public static void main(String args) throws FileNotFoundException, IOException Fi

12、leWriter fw = null; String str = 你好!rnJava; /char chars = str.toCharArray(); try fw = new FileWriter(new File(d:/java/a.txt); fw.write(str); /fw.write(chars); finally fw.close(); ,void write(char cbuf, int off, int len) :将字符写入数组的某一部分。 void write(int c) :写入单个字符。 void write(String str, int off, int le

13、n):写入一部分字符串。,13,对象的序列化,当应用程序结束,所有创建的对象都会走向消亡。 有些应用场景下,能够将对象的状态保存下来,并在下一次应用程序启动时重新启用被保存的信息是非常有必要的。 利用I/O操作可以实现这种需求,可以通过把一些关键信息按照一定的顺序保存到文件中,并在下一次启动应用程序的时候打开文件按顺序读取信息。 Java的对象序列化可以将任何一个实现了Serializable接口的对象自动转换成一个字节序列,并且能够在其后将这个字节序列完全恢复为原来的对象。该字节序列不仅可以保存到硬盘上,还可以传输到网络上 。,演示对象的序列化,14,关键代码,序列化一个对象 ObjectO

14、utputStream out = new ObjectOutputStream( new FileOutputStream(d:/java/stu.tmp); out.writeObject(obj); 还原字节序列成为对象 ObjectInputStream in = new ObjectInputStream( new FileInputStream(d:/java/stu.tmp); Object obj = in.readObject( );,15,transient 关键字,有的特殊需求却并不要求保存所有信息 。 例如,考虑到安全因素,用户并不希望应用程序保存他的密码,仅仅记住用户

15、名就可以了,密码由用户自己记住更加安全。否则,如果序列化之后,木马程序会很方便的把所有信息全部盗走。 为了能够有效控制序列化的信息,可以用transient(瞬时)关键字逐个字段的关闭序列化。,演示transient关键字,16,序列化存储多个对象,Student stu1 = new Student( 001,张三,Date.valueOf(1981-01-01),计算机); Student stu2 = new Student( 002,李四,Date.valueOf(1982-02-02),会计); Map map = new HashMap(); map.put(001,stu1); map.put(002,stu2); ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(d:/java/stus.tmp); out.writeObject(map)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论