《输入输出和反射》教案.docx

上传人:b****1 文档编号:10464604 上传时间:2023-05-26 格式:DOCX 页数:24 大小:33.95KB
下载 相关 举报
《输入输出和反射》教案.docx_第1页
第1页 / 共24页
《输入输出和反射》教案.docx_第2页
第2页 / 共24页
《输入输出和反射》教案.docx_第3页
第3页 / 共24页
《输入输出和反射》教案.docx_第4页
第4页 / 共24页
《输入输出和反射》教案.docx_第5页
第5页 / 共24页
《输入输出和反射》教案.docx_第6页
第6页 / 共24页
《输入输出和反射》教案.docx_第7页
第7页 / 共24页
《输入输出和反射》教案.docx_第8页
第8页 / 共24页
《输入输出和反射》教案.docx_第9页
第9页 / 共24页
《输入输出和反射》教案.docx_第10页
第10页 / 共24页
《输入输出和反射》教案.docx_第11页
第11页 / 共24页
《输入输出和反射》教案.docx_第12页
第12页 / 共24页
《输入输出和反射》教案.docx_第13页
第13页 / 共24页
《输入输出和反射》教案.docx_第14页
第14页 / 共24页
《输入输出和反射》教案.docx_第15页
第15页 / 共24页
《输入输出和反射》教案.docx_第16页
第16页 / 共24页
《输入输出和反射》教案.docx_第17页
第17页 / 共24页
《输入输出和反射》教案.docx_第18页
第18页 / 共24页
《输入输出和反射》教案.docx_第19页
第19页 / 共24页
《输入输出和反射》教案.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《输入输出和反射》教案.docx

《《输入输出和反射》教案.docx》由会员分享,可在线阅读,更多相关《《输入输出和反射》教案.docx(24页珍藏版)》请在冰点文库上搜索。

《输入输出和反射》教案.docx

《输入输出和反射》教案

《输入输出和反射》教案

第三章本章题目

1.回顾上一章:

[10分钟]………………………………………………………………………..…..…….…340

2.课程知识点讲解………………………………………………………………………………..……………340

2.1.具体知识点1:

[XX分钟]……………………………………………………………………………….340

2.2.具体知识点2.:

[XX分钟]………………………………………………………………………………340

2.3.具体知识点3:

[XX分钟]………………………………………………………………………………..341

3.本章总结[10分钟]…………………………………………………………………….……………………341

4.考核点………………………………………………………………………………………………………..341

5.扩展部分………………………………………………………………………………….…………………..341

6.学员问题汇总…………………………………………………………………………….……………..........341

7.作业………………………………………………………………………………………….………………..341

授课教师:

XXX

课时:

2小时

本章主要目的

XXX

本章重点

XXX

本章难点

XXX

1、预习检查:

[X分钟]

什么是流?

简述使用字节流读文本文件的步骤

使用什么流读写字符内容更高效?

2、课程知识讲解:

2.1具体知识点1:

File类[30分钟]

什么是文件?

文件可认为是相关记录或放在一起的数据的集合

文件一般存储在哪里?

磁盘,硬盘软盘U盘等

JAVA程序如何访问文件属性?

JAVAAPI:

java.io.File类操作文件或目录的属性

老师提问

问题:

File类是如何操作文件或目录的属性?

File类访问文件属性

a.通过File类,创建File对象Filefile=newFile(Stringpathname);pathname文件在磁盘中的目录

b.通过文件对象的方法操作文件或目录属性

注意:

文件路径中的分隔符可以是正斜杠/也可以是反斜杠\,但是反斜杠必须是\\

File.separator与系统有关的默认名称分隔符。

此字段被初始化为包含系统属性file.separator值的第一个字符。

在UNIX系统上,此字段的值为'/';在MicrosoftWindows系统上,它为'\'。

File类的常用方法:

(参考API)

通过案例讲解集中常用的方法

//booleandelete()删除此对象指定的文件或目录

//booleancreateNewFile()创建名称的空文件不创建文件夹,如果已经存在就不能建

//获取文件的名字

System.out.println("文件的名字:

"+file.getName());

System.out.println("文件的相对路径:

"+file1.getPath());

//获取绝对路径

System.out.println("绝对路径:

"+file.getAbsolutePath());

//获得文件最后修改的时间

Calendarc=Calendar.getInstance();

c.setTimeInMillis(file.lastModified());

Datedate=c.getTime();

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");

System.out.println("文件最后修改的时间:

"+sdf.format(date));

//获得文件的大小

System.out.println("文件的大小:

"+file.length()+"Kb");

老师提问

问题:

如何读写文件?

分析:

java中的File类只能操作文件或目录的属性,不能操作文件里面的数据。

读文件:

是指把文件中的数据读取到内存中。

写文件:

就是把内存中的数据写入到文件中。

在java中是通过流来读写文件的。

2.2具体知识点2:

流[XX分钟]

知识点讲解1:

流的定义

通过流来读写文件

流是指一连串流动的字符,是以先进先出方式发送信息的通道

用生活中的例子(比如水管流水)

知识点讲解2:

流的分类

流分为输入流和输出流。

输入输出是相对计算机内存说的,如果数据是输入到内存,则称为输入流,如果是从内存中输出,则称为输出流。

数据源与流的关系:

数据源分为源数据源和目标数据源输入流联系的是源数据源,输出流联系的是目标数据源。

详见PPT12PPT13

知识点讲解:

文件的读写

文本文件的读写

用FileInputStream和FileOutputStream读写文本文件

用BufferedReader和BufferedWriter读写文本文件

二进制文件的读写

使用DataInputStream和DataOutputStream读写二进制文件(和文本文件的读写类似不详细的讲解)

使用FileInputStream读文本文件的步骤是什么?

(对照API讲解FileInputStream的方法)

FileInputStream就是将文件中的数据输入到内存中,它是InputStream抽象类的子类,用来读取文件中的数据。

1引入相关的类(相关的jar包)

②构造文件输入创建流FileInputStream对象

FileInputStreamfis=newFileInputStream("text.txt");

③读取文本文件的数据

fis.available();//获得文件的字节数

fis.read();

④关闭文件流对象fis.close();

案例讲解:

publicstaticvoidmain(String[]args)throwsException{

Filefile=newFile("D:

\\test.txt");

FileInputStreamfis=newFileInputStream(file);//2步

System.out.println("可读取的字节数:

"+fis.available());

System.out.println("文件内容是:

");

intdate;

while((date=fis.read())!

=-1){//3步

//强制类型转换如果不强转那么就是对呀的ASCII码

System.out.println((char)date+"");

}

fis.close();

}

或者

publicstaticvoidmain(String[]args)throwsException{

Filefile=newFile("D:

\\test.txt");

FileInputStreamfis=newFileInputStream(file);//2

System.out.println("可读取的字节数:

"+fis.available());

System.out.println("文件内容是:

");

byte[]buffer=newbyte[fis.available()];//创建合适文件大小的数组

fis.read(buffer);//读取文件中的内容到b[]数组

fis.close();

//String构造通过使用指定的charset解码指定的byte数组,构造一个新的String。

System.out.println(newString(buffer));

}

使用FileOutputStream写文本文件的步骤是什么?

与读文件的步骤有何不同?

FileOutputStream就是将内存中的数据输出到文件中,它是FileOutputStream抽象类的子类,把内存的数据写入到文本文件中。

2引入相关的类(相关的jar包)

②构造文件输出创建流FileInputStream对象

FileOutputStreamfos=newFileOutputStream(“text.txt");

③把数据写入文本文件

Stringstr="好好学习Java";

byte[]words=str.getBytes();

fos.write(words,0,words.length);

④关闭文件流对象fos.close();

案例:

publicstaticvoidmain(String[]args)throwsException{

//创建输出流对象

FileOutputStreamfos=newFileOutputStream("d:

\\123.txt",true);

//把数据写入文本文件

Stringstr="asdasdasfewfwe";

byte[]b=str.getBytes();

fos.write(b);

fos.flush();//刷新

fos.close();//关闭流

System.out.println("数据写入完成!

");

}

注意:

FileOutputStream(Filefile)和FileOutputStream(Stringname)两种构造方法在向文件写数据时将覆盖文件中原有的内容,如果是不覆盖原来的内容,直接写在原来的文件内容的后面就需要用到第三种方法FileOutputStream(Stringname,booleanappend)true表示不覆盖

创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

案例:

复制一个文件的内容到另外一个文件

publicstaticvoidmain(String[]args)throwsException{

//创建输入流对象对文件进行读取

FileInputStreamfis=newFileInputStream("D:

\\student.txt");

//创建输出流对象,将读取到的文件写入到另外的文件中

FileOutputStreamfos=newFileOutputStream("E:

\\studentcopy.txt");

//创建中转的数组,将读取的信息存到数组中

byte[]buffer=newbyte[1024];

//循环读取数据,并写入到文件中

//read()下一个数据字节;如果已到达文件末尾,则返回-1。

System.out.println("开始赋值.......");

while(fis.read()!

=-1){

fis.read(buffer);

fos.write(buffer);

fos.flush();

}

fos.close();

fis.close();

System.out.println("复制结束.......");

}

用字符流类BufferedReader和Reader读文本文件(结合API帮助文档讲解)

BufferedReader和Reader都是Reader抽象类的子类,他们可以通过字符流的方式读取文件,并且使用缓冲区(它可以先把一批数据读到缓冲区,接下来的读操作都是从缓冲区内获取数据,避免每次都从数据源读取数据进行字符编码转换,从而提高读取操作的效率),提高了文件读取的效率。

按行读取内容的readLine()方法一行一行的读取。

步骤和FileInputStream类似

Readerin=null;

BufferedReaderbf=null;

try{

in=newFileReader("D:

\\test.txt");

bf=newBufferedReader(in);

//读取有一行数据

Stringline=bf.readLine();

while(line!

=null){

System.out.println(line);

line=bf.readLine();

}

}catch(Exceptione){

e.printStackTrace();

}finally{//关闭流

try{

if(bf!

=null){

bf.close();

}

if(in!

=null){

in.close();

}

}catch(IOExceptione){

e.printStackTrace();

}

}

用字符流类BufferedWriter和Writer写文本文件(结合API帮助文档讲解)

将内存中的数据写入到文本文件中。

BufferedWriter带有缓冲区。

BufferedWriter类的缓冲区(BufferedWriter与BufferedReader的流方向正好相反,BufferedWriter是把一批数据写到缓冲区,当缓冲区满的时候,再把缓冲区的数据写到字符输出流中。

这可以避免每次都执行物理写操作,从而提高io操作的效率。

bw.newLine();//写入一个行分隔符。

换行

bw.write(str);//写数据

案例:

publicstaticvoidmain(String[]args){

//创建writer对象

Writerwriter=null;

//创建BufferWriter对象

BufferedWriterbw=null;

Stringstr="好好学习,天天向上!

";

try{

writer=newFileWriter("D:

\\234.txt",true);

bw=newBufferedWriter(writer);

bw.newLine();//写入一个行分隔符。

bw.write(str);

bw.flush();//刷新缓冲区

}catch(IOExceptione){//关闭流

e.printStackTrace();

}finally{

try{

if(writer!

=null){//判断流是否是空

writer.close();

}

if(bw!

=null){

bw.close();

}

}catch(IOExceptione){

e.printStackTrace();

}

}

System.out.println("数据写入完成!

");

}

老师提问:

问题1:

读取包含中文的文本文件时,可能出现中文乱码,怎么办?

分析:

java为我们提供了一个类:

InputStreamReader,继承Reader类,使用InputStreamReader并设置编码格式(演示乱码出现的过程和解决方案)

publicstaticvoidmain(String[]args)throwsException{

Filefile=newFile("D:

\\1234.txt");

FileInputStreamfis=newFileInputStream(file);

////使用InputStreamReader并设置编码格式

InputStreamReaderisr=newInputStreamReader(fis);

BufferedReaderbr=newBufferedReader(isr);

Stringline=br.readLine();

while(line!

=null){

System.out.println(line);

line=br.readLine();

}

br.close();

isr.close();

fis.close();

}

案例:

使用BufferedReader和BufferedWriter实现文件的拷贝

publicstaticvoidmain(String[]args)throwsException{

//创建FileReader对象

FileReaderfr=null;

//创建bufferedReader对象

BufferedReaderbr=null;

//创建FileWriter对象

FileWriterfw=null;

//创建BufferedWriter对象

BufferedWriterbw=null;

try{

fr=newFileReader("D:

\\123.txt");

br=newBufferedReader(fr);

fw=newFileWriter("E:

\\copy.txt");

bw=newBufferedWriter(fw);

System.out.print("开始复制文件");

Stringline=null;

while((line=br.readLine())!

=null){

System.out.print(".");

bw.write(line);

bw.newLine();

bw.flush();

}

System.out.println();

System.out.println("文件复制完成...");

}catch(Exceptione){

e.printStackTrace();

}finally{

if(bw!

=null){

bw.close();

}

if(fw!

=null){

fw.close();

}

if(br!

=null){

br.close();

}

if(bw!

=null){

bw.close();

}

}

}

2.3具体知识点3:

序列化和反序列化[20分钟]

为什么要使用序列化和反序列化?

(举例讲解)

当两个进程在进行远程通信时(QQ通讯),彼此可以发送各种类型的数据。

无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

序列化:

就是将对象的状态存储到特定存储介质中的过程,也就是将对象状态转换为可保持或传输格式的过程,在序列化过程中,会将对象的公有成员、私有成员包括类名,转换为字节流,然后再把自己流写入数据流,存储到介质中,这里说的介质就是指文件。

反序列化:

顾名思义就是与序列化相反,反序列化就是从特定的存储介质中讲数据重新构建对象的过程。

(也就是将序列化的对象还原)

知识讲解1:

序列化的步骤:

(四步)

1需要序列化的类实现Serializable接口

2创建对象输出流

FileOutputStreamos=new FileOutputStream(f);

       //ObjectOutputStream 核心类

     ObjectOutputStreamoos=new ObjectOutputStream(os);

3调用writeObject()方法将对象写入文件

4关闭对象输出流

案例

publicstaticvoidmain(String[]args)throwsException{

//实例化User对象

Useruser=newUser("张三",26,"java12");

//创建对象输出流

FileOutputStreamfos=newFileOutputStream("D:

\\user.txt");

ObjectOutputStreamoos=newObjectOutputStream(fos);

//用输出流的writer()方法将对象写入文件

oos.writeObject(user);

oos.close();

fos.close();

System.out.println("序列化完毕!

");

}

注意:

可以使用集合保存对象,然后将集合中所有的对象进行序列化

知识讲解2:

反序列化的步骤:

(四步)

1需要序列化的类实现Serializable接口

2创建对象输入流

 InputStreamis=new FileInputStream(f);

       //ObjectOutputStream 核心类

  ObjectInputStreamois=new ObjectInputStream(is);

3调用readObject()方法读取对象

4关闭对象输出流

案例:

publicstaticvoidmain(String[]args)throwsException{

//创建对象输入流

FileInputStreamfis=newFileInputStream("D:

user.txt");

ObjectInputStreamois=newObjectInputStream(fis);

//调用readObject()方法读取对象返回值是objec类型,要强转

Useruser=(User)ois.readObject();

//关闭流

ois.close();

fis.close();System.out.println(user.getName()+"\t"+user.getAge()+"\t"+user.getClazz());

}

//反序列化list集合返回值是objec类型,要强转

FileInputStreamfis=newFileInputStream("D:

users.txt");

ObjectInputStreamois=newObjectInputStrea

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2