《第2章Java IO系统.ppt》由会员分享,可在线阅读,更多相关《第2章Java IO系统.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JavaIO系统系统第第二二章章本章相关词汇本章相关词汇单单 词词说说 明明input输入输入output输出输出file文件,档案文件,档案directory目录目录stream流流write写,书写写,书写read读,阅读读,阅读source源头,来源源头,来源destination目标,目的地目标,目的地print打印打印本章目标本章目标n复习复习IO包,强化区分字符包,强化区分字符/字节的区别字节的区别n运用运用FileInputStream类和类和FileOutputStream类完成复制文件的功能类完成复制文件的功能n运用运用FileReader类和类和FileWriter类配合类
2、配合BufferedReader类和类和BufferedWriter类来进行字符的读取和写入功能类来进行字符的读取和写入功能n运用运用InputStreamReader类和类和BufferedReader类来完成控制台输入的功能类来完成控制台输入的功能n清楚清楚PrintWriter类的使用方式类的使用方式:System.outJSP:outjava.io包简介包简介njava.io包也是包也是Java内置的包,其中包含一系列对文件和内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类;目录的属性进行操作,对文件进行读写操作的类;n程序中如果要使用到该包中的类,对文件或流
3、进行操作,程序中如果要使用到该包中的类,对文件或流进行操作,则必须显式地声明如下语句:则必须显式地声明如下语句:import java.io.*;文件文件n什么是文件?什么是文件?文件可以认为是相关记录或存放在一起的数据的集合;文件可以认为是相关记录或存放在一起的数据的集合;n文件一般是存放在磁盘上的,例如:硬盘、软盘和光盘等等。文件一般是存放在磁盘上的,例如:硬盘、软盘和光盘等等。File类类nFile类的对象不但可以表示文件,还可以表示目录,在程序类的对象不但可以表示文件,还可以表示目录,在程序中一个中一个File类对象可以代表一个文件或目录;类对象可以代表一个文件或目录;n当创建一个文件
4、对象后,就可以利用它来对文件或目录的当创建一个文件对象后,就可以利用它来对文件或目录的属性属性进行操作,如:文件名、最后修改日期、文件大小等进行操作,如:文件名、最后修改日期、文件大小等等;等;n需要注意的是,需要注意的是,File对象并不能直接对文件进行读对象并不能直接对文件进行读/写操作,写操作,只能查看文件的属性;只能查看文件的属性;File类的构造方法类的构造方法nFile类的构造方法有类的构造方法有4种重载方式,常用的如下:种重载方式,常用的如下:n如:如:/在当前目录下创建一个与在当前目录下创建一个与aaa.txt文件名相关联的文件对象文件名相关联的文件对象File f1=new
5、File(aaa.txt);/指明详细的路径以及文件名,请注意双斜线指明详细的路径以及文件名,请注意双斜线File f2=new File(D:JavaHello.java);构构 造造 方方 法法说说 明明File(Stringpathname)指定文件(或目录)名和路径创建文件对象指定文件(或目录)名和路径创建文件对象File类中的常用方法类中的常用方法方方法法原原型型说说明明booleanexists()判断文件是否存在,存在返回判断文件是否存在,存在返回true,否则返回,否则返回falsebooleanisFile()判断是否为文件,是文件返回判断是否为文件,是文件返回true,否则
6、返回,否则返回falsebooleanisDirectory()判断是否为目录,是目录返回判断是否为目录,是目录返回true,否则返回,否则返回falseStringgetName()获得文件的名称获得文件的名称StringgetAbsolutePath()获得文件的绝对路径获得文件的绝对路径longlength()获得文件的长度(字节数)获得文件的长度(字节数)booleancreateNewFile()throwsIOException创建新文件,创建成功返回创建新文件,创建成功返回true,否则返回,否则返回false,有可能抛出,有可能抛出IOException异常,必须捕捉异常,必须
7、捕捉booleandelete()删除文件,删除成功返回删除文件,删除成功返回true,否则返回,否则返回falseFile类示例类示例public class FileDemo public static void main(String args)/创建一个文件对象,使之与一个文件关联 File file=new File(test.txt);/显示与文件有关的属性信息 System.out.println(文件或目录是否存在:+file.exists();System.out.println(是文件吗:+file.isFile();System.out.println(是目录吗:+fil
8、e.isDirectory();System.out.println(名称:+file.getName();System.out.println(绝对路径:+file.getAbsolutePath();System.out.println(最后修改时间:+file.lastModified();System.out.println(文件大小:+file.length();stream(流)(流)n流是指一连串流动的数据信号,是以先进先出的方式发送流是指一连串流动的数据信号,是以先进先出的方式发送和接收数据的通道。和接收数据的通道。ABCDEFInputStream来自数据源的数据流Outpu
9、tStream流向目的地的数据流流(续)流(续)流的类型流的类型n根据流动方向的不同,流分为根据流动方向的不同,流分为输入流输入流和和输出流输出流;n对于输入和输出流,由于传输格式的不同,又分为对于输入和输出流,由于传输格式的不同,又分为字节流字节流和和字符流字符流:n字节流是指字节流是指8位的通用字节流,以字节为基本位的通用字节流,以字节为基本单位,在单位,在java.io包中,对于字节流进行操作的包中,对于字节流进行操作的类大部分继承于类大部分继承于InputStream(输入字节流)(输入字节流)类和类和OutputStream(输出字节流)类;(输出字节流)类;n字符流是指字符流是指1
10、6位的位的Unicode字符流,以字符字符流,以字符(两个字节)为基本单位,非常适合处理字符(两个字节)为基本单位,非常适合处理字符串和文本,对于字符流进行操作的类大部分继串和文本,对于字符流进行操作的类大部分继承于承于Reader(读取流)类和(读取流)类和Writer(写入流)(写入流)类。类。使用使用FileInputStream类读文件类读文件nFileInputStream类称为文件输入流,继承于类称为文件输入流,继承于InputStream类,是进行文件读操作的最基本类;类,是进行文件读操作的最基本类;n它的作用是将文件中的数据输入到内存中,我们可以利用它的作用是将文件中的数据输入
11、到内存中,我们可以利用它来读文件;它来读文件;n由于它属于字节流,因此在读取由于它属于字节流,因此在读取Unicode字符(如中文)字符(如中文)的文件时可能会出现问题。的文件时可能会出现问题。FileInputStream类的构造方法类的构造方法nFileInputStream类的构造方法有类的构造方法有3种重载方式,以下是常用的几种。种重载方式,以下是常用的几种。构构 造造 方方 法法说说 明明FileInputStream(Filefile)throwsFileNotFoundException使用使用File对象创建文件输入流对象,如果文件打开对象创建文件输入流对象,如果文件打开失败,
12、将抛出异常失败,将抛出异常FileInputStream(Stringname)throwsFileNotFoundException使用文件名或路径创建文件输入流对象,如果文使用文件名或路径创建文件输入流对象,如果文件打开失败,将抛出异常件打开失败,将抛出异常FileInputStream类的常用方法类的常用方法方方 法法 原原 型型说说 明明intread()throwsIOException读取文件中的数据,一次读取一个字节,读取的数据读取文件中的数据,一次读取一个字节,读取的数据作为返回值返回,如果读到文件末尾则返回作为返回值返回,如果读到文件末尾则返回-1,有可能,有可能抛异常,必须
13、捕捉抛异常,必须捕捉intread(byteb)throwsIOException读取文件中的数据,将读到的数据存放到读取文件中的数据,将读到的数据存放到byte型数组型数组中,并返回读取的字节的数量,未读到数据返回中,并返回读取的字节的数量,未读到数据返回-1,有,有可能抛异常,必须捕捉可能抛异常,必须捕捉voidclose()throwsIOException关闭流对象,有可能抛异常,必须捕捉关闭流对象,有可能抛异常,必须捕捉FileInputStream对象读文件示例对象读文件示例1public class FileInputStreamDemo1 public static void
14、main(String args)try File file=new File(test.txt);/创建文件对象 /使用文件对象创建文件输入流对象,相当于打开文件 FileInputStream fis=new FileInputStream(file);for(int i=0;i file.length();i+)char ch=(char)(fis.read();/循环读取字符 System.out.print(ch);System.out.println();fis.close();/关闭流 catch(FileNotFoundException fnfe)System.out.pri
15、ntln(文件打开失败。);catch(IOException ioe)ioe.printStackTrace();FileInputStream对象读文件示例对象读文件示例2public class FileInputStreamDemo2 public static void main(String args)try File file=new File(test.txt);/创建文件对象 FileInputStream fis=new FileInputStream(file);/根据文件的字节长度创建字节数组 byte buf=new byte(int)(file.length();f
16、is.read(buf);/读取文件中的数据存放到字节数组中 String str=new String(buf);/利用字节数组创建字符串 System.out.println(str);/打印字符串 fis.close();/关闭流 catch(FileNotFoundException fnfe)System.out.println(文件打开失败。);catch(IOException ioe)ioe.printStackTrace();使用使用FileOutputStream类写文件类写文件nFileOutputStream类称为文件输出流,继承于类称为文件输出流,继承于OutputS
17、tream类,是进行文件写操作的最基本类;类,是进行文件写操作的最基本类;n它的作用是将内存中的数据输出到文件中,我们可以利用它的作用是将内存中的数据输出到文件中,我们可以利用它来写文件。它来写文件。FileOutputStream类的构造方法类的构造方法nFileOutputStream类的构造方法有类的构造方法有5种重载方式,以下是常用的几种。种重载方式,以下是常用的几种。构构 造造 方方 法法说说 明明FileOutputStream(Filefile)throwsFileNotFoundException使用使用File对象创建文件输出流对象,如果文件打开失败,将对象创建文件输出流对象
18、,如果文件打开失败,将抛出异常抛出异常FileOutputStream(Filefile,booleanappend)throwsFileNotFoundException使用使用File对象创建文件输出流对象,并由参数对象创建文件输出流对象,并由参数append指定指定是否追加文件内容,是否追加文件内容,true为追加,为追加,false为不追加,异常情况为不追加,异常情况同上同上FileOutputStream(Stringname)throwsFileNotFoundException直接使用文件名或路径创建文件输出流对象,异常情况同上直接使用文件名或路径创建文件输出流对象,异常情况同上
19、FileOutputStream(Stringname,booleanappend)throwsFileNotFoundException直接使用文件名或路径创建文件输出流对象,并由参数直接使用文件名或路径创建文件输出流对象,并由参数append指定是否追加,异常情况同上指定是否追加,异常情况同上FileOutputStream类的常用方法类的常用方法方方 法法 原原 型型说说 明明voidwrite(intb)throwsIOException往文件中写数据,一次写一个字节,有可能抛异常,往文件中写数据,一次写一个字节,有可能抛异常,必须捕捉必须捕捉voidwrite(byteb)throw
20、sIOException往文件中写数据,将往文件中写数据,将byte数组中的数据全部写入到文数组中的数据全部写入到文件中,有可能抛异常,必须捕捉件中,有可能抛异常,必须捕捉voidclose()throwsIOException关闭流对象,有可能抛异常,必须捕捉关闭流对象,有可能抛异常,必须捕捉FileOutputStream对象写文件示例对象写文件示例1public class FileOutputStreamDemo1 /在函数内部不进行异常处理,将异常抛出函数外部 public static void main(String args)throws IOException String
21、str=Hello world!;File file=new File(test.txt);/创建文件对象 /通过文件对象创建文件输出流对象 /附加第二个参数true,指定进行文件追加,默认为不追加 FileOutputStream fos=new FileOutputStream(file,true);/逐个将字符写入到文件中 for(int i=0;i str.length();i+)fos.write(str.charAt(i);fos.close();/关闭流 FileOutputStream对象写文件示例对象写文件示例2public class FileOutputStreamDem
22、o2 /在函数内部不进行异常处理,将异常抛出函数外部 public static void main(String args)throws Exception String str=I Love Java;/通过文件名创建文件输出流对象 FileOutputStream fos=new FileOutputStream(test.txt);/将字符串转化为字节数组 byte buffer=str.getBytes();/将字节数组中包含的数据一次性写入到文件中 fos.write(buffer);/关闭流 fos.close();FileInputStream/FileOutputStream
23、小结小结nFileInputStream类和类和FileOutputStream类是成对出现的,类是成对出现的,一个进行输入(读文件)操作,一个进行输出(写文件)一个进行输入(读文件)操作,一个进行输出(写文件)操作;操作;n由于采用字节方式进行数据传输,不必考虑数据的格式问由于采用字节方式进行数据传输,不必考虑数据的格式问题,这两个类对文件操作的效率较高;题,这两个类对文件操作的效率较高;n可以使用这两个类完成复制文件的操作。可以使用这两个类完成复制文件的操作。复制文件示例复制文件示例public class CopyFileDemo public static void main(Stri
24、ng args)throws IOException File srcFile=new File(src.dat);/源文件对象 File destFile=new File(dest.dat);/目标文件对象 if(!(destFile.exists()/判断目标文件是否存在 destFile.createNewFile();/如果不存在则创建新文件 /使用源文件对象创建文件输入流对象 FileInputStream fis=new FileInputStream(srcFile);/使用目标文件对象创建文件输出流对象 FileOutputStream fos=new FileOutputS
25、tream(destFile);byte buf=new byte1024;/创建字节数组,作为临时缓冲 System.out.println(开始复制文件.);while(fis.read(buf)!=-1)/循环从文件输入流中读取数据 fos.write(buf);/写入到文件输出流中 System.out.println(文件复制成功!);fis.close();/关闭流 fos.close();字符流字符流nFileInputStram类和类和FileOutputStream类虽然可以高效类虽然可以高效率地读率地读/写文件,但对于写文件,但对于Unicode编码的文件,使用它们编码的文
26、件,使用它们有可能出现乱码;有可能出现乱码;n考虑到考虑到Java是跨平台的语言,要经常操作是跨平台的语言,要经常操作Unicode编码的编码的文件,使用字符流操作文件是有必要的;文件,使用字符流操作文件是有必要的;n使用字符流将涉及到以下使用字符流将涉及到以下4个类:个类:nFileReader类和类和FileWriter类;类;nBufferedReader类和类和BufferedWriter类。类。FileReader类类nFileReader类称为文件读取流,允许以字符流的形式对文件进行读操作,其类称为文件读取流,允许以字符流的形式对文件进行读操作,其构造方法有构造方法有3种重载方式,
27、以下是常用的几种:种重载方式,以下是常用的几种:n该类将从文件中逐个地读取字符,效率比较低下,因此一般将该类对象包装该类将从文件中逐个地读取字符,效率比较低下,因此一般将该类对象包装到缓冲流中进行操作。到缓冲流中进行操作。构构 造造 方方 法法说说 明明FileReader(Filefile)throwsFileNotFoundException使用使用File对象创建文件读取流对象,如果文件打开对象创建文件读取流对象,如果文件打开失败,将抛出异常失败,将抛出异常FileReader(Stringname)throwsFileNotFoundException使用文件名或路径创建文件读取流对象
28、,如果文使用文件名或路径创建文件读取流对象,如果文件打开失败,将抛出异常件打开失败,将抛出异常BufferedReader类类nBufferedReader类主要为字符流提供缓冲,以提高效率,其构造方法有类主要为字符流提供缓冲,以提高效率,其构造方法有2种种重载方式,以下是常用的几种:重载方式,以下是常用的几种:n以下是以下是BufferedReader类的常用方法:类的常用方法:构构 造造 方方 法法说说 明明BufferedReader(Readerin)将字符读取流对象包装成缓冲读取流对象将字符读取流对象包装成缓冲读取流对象方方 法法 原原 型型说说 明明StringreadLine()
29、throwsIOException从缓冲读取流中读取一行字符,以字符串的形式返回,从缓冲读取流中读取一行字符,以字符串的形式返回,有可能抛异常,必须捕捉有可能抛异常,必须捕捉voidclose()throwsIOException关闭流对象,有可能抛异常,必须捕捉关闭流对象,有可能抛异常,必须捕捉FileReader配合配合BufferedReader读文件示例读文件示例public class RraderDemo public static void main(String args)throws IOException File file=new File(test.txt);/通过文件
30、对象创建文件读取流对象 FileReader fr=new FileReader(file);/将文件读取流包装成缓冲读取流 BufferedReader br=new BufferedReader(fr);String str;while(str=br.readLine()!=null)/逐行读取数据 System.out.println(str);br.close();/关闭流 fr.close();/关闭流 FileWriter类类nFileWriter类称为文件写入流,以字符流的形式对文件进行写操作,其构造方类称为文件写入流,以字符流的形式对文件进行写操作,其构造方法有法有5种重载,以
31、下是常用的几种:种重载,以下是常用的几种:n与与FileReader类相似,类相似,FileWriter类同样需要使用缓冲流进行包装。类同样需要使用缓冲流进行包装。构构 造造 方方 法法说说 明明FileWriter(Filefile)throwsIOException使用使用File对象创建文件写入流对象,如果文件打开失败,将抛出对象创建文件写入流对象,如果文件打开失败,将抛出异常,必须捕捉异常,必须捕捉FileWriter(Filefile,booleanappend)throwsIOException使用使用File对象创建文件写入流对象,并由参数对象创建文件写入流对象,并由参数appe
32、nd指定是否指定是否追加,异常情况同上追加,异常情况同上FileWriter(Stringname)throwsIOException直接使用文件名或路径创建文件写入流对象,异常情况同上直接使用文件名或路径创建文件写入流对象,异常情况同上FileWriter(Stringname,booleanappend)throwsIOException直接使用文件名或路径创建文件写入流对象,并由参数直接使用文件名或路径创建文件写入流对象,并由参数append指定是否追加,异常情况同上指定是否追加,异常情况同上BufferedWriter类类nBufferedWriter类可以为类可以为FileWrite
33、r类提供缓冲,其构造方法有类提供缓冲,其构造方法有2种重载方式,种重载方式,以下是常用的几种:以下是常用的几种:n以下是以下是BufferedWriter类的常用方法:类的常用方法:构构 造造 方方 法法说说 明明BufferedWriter(Writerout)将字符写入流对象包装成缓冲写入流对象将字符写入流对象包装成缓冲写入流对象方方 法法 原原 型型说说 明明voidwrite(Stringstr)throwsIOException将一行字符串写入到缓冲写入流中,有可能抛异常,将一行字符串写入到缓冲写入流中,有可能抛异常,必须捕捉必须捕捉voidnewLine()throwsIOExce
34、ption将一个回车换行符写入到文件中,从而达到换行的效将一个回车换行符写入到文件中,从而达到换行的效果,有可能抛异常,必须捕捉果,有可能抛异常,必须捕捉FileWriter配合配合BufferedWriter写文件示例写文件示例public class WriterDemo public static void main(String args)throws IOException File file=new File(test.txt);/通过文件对象创建文件输出字符流对象 FileWriter fw=new FileWriter(file);/将文件输出字符流包装成缓冲流 Buffere
35、dWriter bw=new BufferedWriter(fw);bw.write(大家好!);bw.write(我正在学习Java。);bw.newLine();/换个新行 bw.write(请多多指教。);bw.newLine();/换新行 bw.write(L);bw.close();/关闭流 fw.close();/关闭流 PrintWriter类类nPrintWriter类称为打印写入流,向文本输出流打印对象的格式化表示形式,类称为打印写入流,向文本输出流打印对象的格式化表示形式,它能够用于将字节的输出流转成字符的输出流。它能够用于将字节的输出流转成字符的输出流。n其构造方法有其构
36、造方法有8种重载,以下是常用的几种:种重载,以下是常用的几种:构构 造造 方方 法法说说 明明PrintWriter(OutputStreamout)根据现有的根据现有的OutputStream创建不带自动行刷新的新创建不带自动行刷新的新PrintWriter。PrintWriter(OutputStreamout,booleanautoFlush)通过现有的通过现有的OutputStream创建新的创建新的PrintWriter。PrintWriter(Filefile)使用指定文件创建不具有自动行刷新的新使用指定文件创建不具有自动行刷新的新PrintWriter。PrintWriter(S
37、tringfileName)创建具有指定文件名称且不带自动行刷新的新创建具有指定文件名称且不带自动行刷新的新PrintWriter。PrintWriter类的常用方法类的常用方法方方法法原原型型说说明明voidprint(Strings)throwsIOException打印字符串。打印字符串。voidprintln(Strings)throwsIOException打印打印String,然后终止该行。然后终止该行。PrintWriterprintf(Stringformat,Objectargs)throwsIOException使用指定格式字符串和参数将格式化的字符串写入此使用指定格式字符
38、串和参数将格式化的字符串写入此writer的便捷方法。的便捷方法。voidwrite(Strings)throwsIOException写入字符串。写入字符串。voidflush()throwsIOException刷新该流的缓冲。刷新该流的缓冲。voidclose()throwsIOException关闭该流。关闭该流。java.io.PrintWriternPrintWriter是字符输出流,它提供格式化的输出功能,由于构造方法的支持,是字符输出流,它提供格式化的输出功能,由于构造方法的支持,允许将字节流转化成字符流的形式;允许将字节流转化成字符流的形式;n它的构造方法共有它的构造方法共有
39、8种重载,以下是常用的几种:种重载,以下是常用的几种:构构 造造 方方 法法说说 明明PrintWriter(OutputStreamout)利用现有的利用现有的OutputStream构造格式打印流,但不带自动刷新缓存的功能构造格式打印流,但不带自动刷新缓存的功能PrintWriter(OutputStreamout,booleanautoFlush)利用现有的利用现有的OutputStream构造格式打印流,由参数构造格式打印流,由参数autoFlush指定是否带指定是否带自动刷新缓存的功能自动刷新缓存的功能PrintWriter(Writerout)利用现有的利用现有的Writer构造格
40、式打印流,但不带自动刷新缓存的功能构造格式打印流,但不带自动刷新缓存的功能PrintWriter(Writerout,booleanautoFlust)利用现有的利用现有的Writer构造格式打印流,由参数构造格式打印流,由参数autoFlush指定是否带自动刷新指定是否带自动刷新缓存的功能缓存的功能PrintWriter(Filefile)throwsFileNotFoundException针对由针对由file指定的文件对象,创建格式打印流,但不带自动刷新缓存的功能指定的文件对象,创建格式打印流,但不带自动刷新缓存的功能PrintWriter的常用方法的常用方法方方法法原原型型说说明明vo
41、idprint(Xx)该方法提供该方法提供8种重载,可以输出任意数据类型,但输出时不带换行效果,种重载,可以输出任意数据类型,但输出时不带换行效果,因此,也不会自动刷新缓存因此,也不会自动刷新缓存voidprintln(Xx)该方法提供该方法提供10种重载,可以输出任意数据类型,有换行效果,如果构造种重载,可以输出任意数据类型,有换行效果,如果构造方法设置为自动刷新的话,该方法的自动刷新功能将生效方法设置为自动刷新的话,该方法的自动刷新功能将生效voidflush()刷新缓存区刷新缓存区voidclose()关闭流关闭流PrintWriter使用注意事项使用注意事项nPrintWriter可以
42、不配合可以不配合BufferedWriter类一起使用。类一起使用。n如果启用了自动刷新,则只有在调用如果启用了自动刷新,则只有在调用println、printf或或format的其的其中一个方法时才可能完成此操作,否则不能完成自动刷新的功能。中一个方法时才可能完成此操作,否则不能完成自动刷新的功能。从控制台接受输入从控制台接受输入nSystem.in的的read方法可以从控制台接受输入;方法可以从控制台接受输入;n但由于但由于in实际上是一个实际上是一个InputStream类的对象,它只能以类的对象,它只能以字节形式接收数据,并且一次只能接受一个字节,这使输字节形式接收数据,并且一次只能接
43、受一个字节,这使输入操作很不便;入操作很不便;n必须将必须将System.in进行处理,才可以顺利地从控制台接受进行处理,才可以顺利地从控制台接受输入,这将使用到输入,这将使用到:nInputStreamReader类类nBufferedReader类类转换和包装转换和包装System.innInputStreamReader类用于将类用于将InputStream类型的字节输入流对象转换成类型的字节输入流对象转换成Reader类型的字符读取流对象;类型的字符读取流对象;n其构造方法有其构造方法有4种重载方式,常用的如下:种重载方式,常用的如下:n可以使用它来转换可以使用它来转换System.i
44、n,如:,如:InputStreamReader isr=new InputStreamReader(System.in);n这样的字符流效率很低,再使用这样的字符流效率很低,再使用BufferedReader类来为其建立缓冲,如:类来为其建立缓冲,如:BufferedReader br=new BufferedReader(isr);n这样,就可以从控制台接受输入了。这样,就可以从控制台接受输入了。构构 造造 方方 法法说说 明明InputStreamReader(InputStreamin)将将InputStream对象转换成对象转换成Reader对象对象从控制台接受输入示例从控制台接受输
45、入示例public class ConsoleInputDemo public static void main(String args)throws IOException /将System.in转化成字符流对象 InputStreamReader isr=new InputStreamReader(System.in);/用缓冲流进行包装 BufferedReader br=new BufferedReader(isr);System.out.println(请输入您的姓名:);String name=br.readLine();/接受输入 System.out.println(请输入您的
46、年龄:);int age=Integer.parseInt(br.readLine();/接受输入 System.out.println(您的姓名:+name);System.out.println(您的年龄:+age);br.close();/关闭流 isr.close();/关闭流 从控制台输入并写入到文件示例从控制台输入并写入到文件示例/*本例从控制台接受输入,然后写入到文件中,直到用户输入!为止*/File file=new File(input.txt);/创建文件对象if(!file.exists()/判断该文件是否存在,如果不存在则创建新文件 file.createNewFile
47、();FileWriter fr=new FileWriter(file);/针对文件对象创建文件写入流对象BufferedWriter bw=new BufferedWriter(fr);/为文件写入流建立缓冲流/将控制台输入对象转化成字符流,并建立缓冲流BufferedReader bin=new BufferedReader(new InputStreamReader(System.in);String str=bin.readLine();/接受从控制台输入的一行字符串while(!(str.equals(!)/如果输入!则代表输入结束 bw.write(str);/将从控制台输入的字
48、符串写入到文件中 bw.newLine();/换新行 str=bin.readLine();/再从控制台接受输入/关闭所有已经打开的流bw.close();fr.close();bin.close();对象的序列化对象的序列化1n将对象转换为字节流保存起来,并在日后还原这个对象,这种机制将对象转换为字节流保存起来,并在日后还原这个对象,这种机制叫做对象序列化。序列化的过程就是对象写入字节流和从字节流中叫做对象序列化。序列化的过程就是对象写入字节流和从字节流中读取对象读取对象njava对象序列化不仅保留一个对象的数据,而且递归保存对象引用对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每
49、个对象的数据。可以将整个对象层次写入字节流中,可以保存的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深克隆深克隆”,即复制对象本身及引用的对象本身。序列化一个对象可,即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。能得到整个对象序列。n一个对象要想能够实现序列化,一个对象要想能够实现序列化,必须实现必须实现Serializable接口接口nJava引入对象串行化上是为了实现两个特性引入对象串行化上是为了实现两个特性:JavaBeans和和RMI对象序
50、列化对象序列化2n当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量。何的成员方法和静态的成员变量。n如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。被保存。n如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引