第6章 流和文件.docx

上传人:b****5 文档编号:29863844 上传时间:2023-07-27 格式:DOCX 页数:45 大小:258.47KB
下载 相关 举报
第6章 流和文件.docx_第1页
第1页 / 共45页
第6章 流和文件.docx_第2页
第2页 / 共45页
第6章 流和文件.docx_第3页
第3页 / 共45页
第6章 流和文件.docx_第4页
第4页 / 共45页
第6章 流和文件.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

第6章 流和文件.docx

《第6章 流和文件.docx》由会员分享,可在线阅读,更多相关《第6章 流和文件.docx(45页珍藏版)》请在冰豆网上搜索。

第6章 流和文件.docx

第6章流和文件

第6章流和文件

教学目标:

学生通过本章学习应掌握Java流的概念﹑输入输出类﹑标准输入输出﹑文件类﹑文件读写.

一、重点与难点:

Java流的概念及Java输入输出类,掌握常用标准输入输出﹑文件类﹑文件读写操作

二、教具:

可进行广播的教学或多媒体计算机局域网,投影仪及相关的软硬件.

三、教学方法:

理论与实训相结合。

四、教学时数:

第5-6周8小时

五、作业及上机练习:

P.127--1.3.4.6.7.8.

6.1流(Stream)的概念

Java语言中程序所完成的输入和输出操作是以流的形式来实现的。

所谓流,即数据被有次序地组织在一起。

程序以流的形式从数据源中顺序读出数据,同理以流的形式将数据顺序写入到目的地。

数据源和目的地可以是文件、内存或是网络连接。

Java中的I/O数据流的分类有多种:

(1)按功能分有输入和输出流两种:

输入流—读取数据。

输出流写数据。

(2)按处理数据单位分为两种:

字节流(byte)和字符流(char)为基本单位。

表示字节流类以InputStream或OutputStream结尾;字符流的类以Reader或Writer结尾.

(3)按流是否与特定地点相连(如磁盘﹑内存﹑设备等),分节点流和处理流。

﹡节点流—可从一个特定地点(节点)读写数据,如磁盘﹑内存,节点流直接与数据源(如文件)连接。

﹡处理流–是对一个已存在的流的连接和封装,通过所封装流的功能调用实现数据读写功能,处理流不直接连接数据源,是对节点流或其它处理流进一步处理,所以处理流的构造函数带其它流对象做参数。

Java中的I/O流分别有4个抽象类来表示,每种流包括输入和输出两种,所以共有4个抽象类:

InputStream﹑OutputStream﹑Reader﹑Writer.

表6-1常用节点流

节点类型

字符流(类)

字节流(类)

说明

File(文件)

FileReader

FileInputStream

(输入)把一个文件作为输入流,实现文件读取操作

FileWriter

FileOutputStream

(输出)把信息存入文件中

MemoryArray

(内存数组)

CharArrayReader

ByteArrayInputStream

(输入)把内存中的一个缓冲区作为输入流使用

CharArrayWriter

ByteArrayOutputStream

(输出)把信息存入内存中的一个缓冲区

MemoryString

(内存字符串)

StringReader

StringWriter

Pipe

(管道)

PipedReader

PipedInputStream

(输入)实现Pipe的概念,在线程中使用

PipedWriter

PipedOutputStream

(输出)实现Pipe的概念,在线程中使用

表6-2常用处理流

节点类型

字符流(类)

字节流(类)

说明

Buffering

(缓冲)

BufferedReader

BufferedInputStream

(缓冲输入流)

BufferedWriter

BufferedOutputStream

(缓冲输出流)

Filtering

(过滤)

FilterReader

FilterInputStream

(过滤输入流)

FilterWriter

FilterOutputStream

(过滤输出流)

Convertingbetweenbytesandcharacter(字节流转为字符流)

InputStreamReader

(输入)

OutputStreamWriter

(输出)

ObjectSerialization

(对象序列化)

ObjectInputStream

(输入)

ObjectOutputStream

(输出)

Dataconversion

(数据类型转化)

DataInputStream

(输入)

DataOutputStream

(输出)

Counting(行号处理)

LineNumberReader

LineNumberInputStream

(输入)

Peekingahead(回压输入流)

PushbackReader

PushbackInputStream

(输入)

Printing(显示处理)

PrintWrite

PrintStream

(输出)

6.2基本输入和输出流

Java.io包中定义了多个抽象或具体的类来处理不同性质的输入输出流。

也就是用它派生的子类来处理各种输入输出流。

6.2.1InputStream字节输入流类的常用方法

(1)publicabstractintread():

从输入流当前位置读取一个字节(占8位)的二进制数据,返回值是高位补0的int类型值。

到达流的结尾无数据可读取时返回-1。

(2)publicabstractintread(byte[]buffer):

从输入流当前位置连续读取多个字节并存入缓冲区字节数组buffer中,同时返回读取的字节数,到达流的结尾无数据可读取时返回-1。

(3)publicabstractintread(byte[]buffer,intoffset,intlength):

从输入流当前位置连续读取length个字节并存入缓冲字节数组buffer中从下标offset指定的开始位置,同时返回读取的字节数,到达流的结尾无数据可读取时返回-1。

(4)publicvoidclose():

关闭当前输入流,并释放任何与之关联的系统资源

(5)publicintavailable():

返回流中可读取的字节数。

(6)publiclongskip(longn):

使流的位置指针从当前位置向后跳过n个字节。

(7)publicbooleanmarkSupported():

判断流是否支持标记和复位操作。

(8)publicvoidmark(intreadlimit):

在流中当前位置做标记。

(9)publicvoidreset():

将位置指针返回到标记的位置。

6.2.2OutputStream字节输出流类的常用方法

(1)publicvoidwrite(intb):

将参数b的低八位字节写入到输出流。

(2)publicvoidwrite(byte[]buffer):

将字节数组buffer中的全部字节顺序写出到输出流。

(3)publicvoidwrite(byte[]buffer,intoffset,intlength):

将字节数组buffer中从下标offset开始位置的length个字节顺序写出到输出流。

(4)publicvoidclose():

关闭输出流,并释放任何与之关联的系统资源

(5)publicvoidflush():

强制缓冲区中的所有数据写出到流中。

6.2.3Reader字符流输入流类的常用方法

Reader字符输入流类与InputStream字节输入流类相似,都是输入流,但Reader类声明的方法是读取字符流的方法而不是读取字节流的方法。

(1)publicintread():

从输入流当前位置读取一个字符(两个字节占16位),并将其转换为一个0~65535(0x00~0xffff16进制)之间的整型量返回给调用方。

到达流的结尾无数据可读取时返回-1。

(2)publicintread(char[]cbuf):

从输入流当前位置将一系列字符读入到数组cbuf中,同时返回读入的字符数,到达流的结尾无数据可读取时返回-1。

(3)publicintread(char[]cbuf,intoffset,intlength):

从输入流当前位置将length个字符读入到数组cbuf中从索引位置offset开始,同时返回实际读入的字符数,到达流的结尾无数据可读取时返回-1。

(4)publicbooleanready():

判断此流是否准备好,如是则可以进行读操作。

(5)publicskip(longn):

使流的位置指针从当前位置向后跳过n个字符。

(6)publicbooleanmarkSupported():

判断流是否支持标记和复位操作。

(7)publicvoidmark(intreadAheadLimit):

在流中当前位置做标记。

(8)publicvoidreset():

将位置指针返回到标记的位置。

(9)publicvoidclose():

关闭当前输入流,并释放任何与之关联的系统资源

6.2.4Write字符流输出流类的常用方法

Write类与OutputStream类相似,都是输出流,但Write类声明的方法是写出字符流的方法而不是写出字节流的方法。

(1)publicvoidwrite(intb):

将参数b的低十六位写出到输出流。

(2)publicvoidwrite(char[]cbuf):

将字符数组cbuf中的全部字符顺序写出到输出流。

(3)publicvoidwrite(char[]cbuf,intoffset,intlength):

将字符数组cbuf中从下标offset开始的length个字符顺序写出到输出流。

(4)publicvoidwrite(Stringstring):

将字符串string中的字符写出到输出流。

(5)publicvoidwrite(Stringstring,intoffset,intlength):

将字符串string中从下标offset开始的length个字符顺序写出到输出流。

(6)publicvoidflush():

强制缓冲区中的所有数据写出到流中。

(7)publicvoidclose():

关闭当前输出流,并释放任何与之关联的系统资源

6.3标准I/O操作

多数应用程序在运行过程中需与用户进行交互,用户使用键盘作为标准输入设备向程序输入数据,程序用计算机显示器作为终端输出数据.这种程序被称为控制台应用程序,这种输入输出被称为标准I/O或控制台I/O操作.为支持标准输入输出设备,用System.in对象和System.out对象相联系。

(1)System.in–表示标准输入流,默认指的是键盘,它是字节输入流InputStream类的对象,调用它的read()方法即可实现键盘输入。

(2)System.out–表示标准输出流,默认指的是控制台的屏幕,是打印输出流PrintStream类的对象

注:

Java中System类中的所有属性和方法都是静态的,因此不需创建对象用类名直接调用即可。

例6-1StandIO1.java-输入输出字符

importjava.io.*;

publicclassStandIO1{

publicstaticvoidmain(String[]args)

{charinChar;

System.out.println("请输入一个字符:

");

try{

inChar=(char)System.in.read();//从键盘读入1个字符(将键盘读入的字节流强制转换为字符)

System.out.println("输入的字符是:

"+inChar);//输出到屏幕

}catch(IOExceptione)

{

System.out.println(e);

}

}

}

例6-2StandIO2.java-输入输出字符组

importjava.io.*;

publicclassStandIO2{

publicstaticvoidmain(String[]args)

{bytebArray[]=newbyte[128];//创建128个字节长度的数组对象

System.out.println("请输入字符数组:

");

try{

System.in.read(bArray);//从键盘读入字符到数组对象

Stringstr=newString(bArray);//以字节数组对象为参数创建字符串对象

System.out.println("输入的字符数组是:

"+str);//输出字符串对象中的数据

}catch(IOExceptione)

{

System.out.println(e);

}

}

}

6.4文件处理

6.4.1File类

6.4.2Java.io包中提供了File类管理文件或目录的路经名。

通过文件类对象,程序可以访问文件属性,如文件的读/写权限﹑文件长度﹑修改时间﹑是否是目录等,并对这些属性进行设定和查询,包括文件和目录的创建﹑删除等操作。

File类是一个与流无关的类,其常用构造方法有3种:

(1)publicFile(Stringpathname):

该构造方法通过指定的文件路径字符串来创建一个新的File类对象实例,语法格式:

Filef=newFile(filename);-包含文件名创建一个文件对象

Filef=newFile("F:

/ok/HelloWorld.class")-包含文件路径创建一个文件对象

pathname:

文件路径字符串,包括文件名。

(2)publicFile(Stringpath,Stringfilename):

该构造方法根据指定的父路径和子路径字符串(包括文件名)创建File类对象实例,语法格式:

Filef=newFile(path,filename);//以文件目录的绝对路径和文件名创建File对象实例

path:

文件父路径字符串(文件名或目录的绝对或相对路径)

filename:

文件名或子路径字符串,不能为空。

Filef=newFile(""F:

/ok/","HelloWorld.class"")

(3)publicFile(Filedir,Stringname):

第一个参数dir代表已存在的磁盘目录File对象指明新创建的文件名或目录的绝对或相对路径,第二个参数表示文件名或路经名,如:

Filep=newFile("F:

/ok")//以文件目录的绝对路径创建目录对象实例()

Filef=newFile(p,"HelloWorld.class")//以磁盘文件目录创建File对象实例

File类提供的常用方法

方法名称

功能描述

StringgetName()

获取文件名或目录名

StringgetParent()

获取文件的父路径字符串

StringgetPath()

获取文件的相对路径字符串

StringgetAbsolutePath()

获取文件的绝对路径字符串

booleanrenameTo(FilenewFile)

将当前文件名改名

booleanexists()

判断文件或文件夹是否存在

booleancanRead()

判断文件是否可读的

booleanisFile()

判断文件是否是一个正常的文件,而不是目录

booleancanWrite()

判断文件是否可被写入

booleanisDirectory()

判断是不是文件夹类型

booleanisAbsolute()

判断是不是绝对路径

booleanisHidden()

判断文件是否是隐藏文件

longlastModified()

获取文件的最后修改日期

booleandelete()

删除文件或文件夹,如果删除成功返回结果为true

booleanmkdir()

创建文件夹,如果创建成功返回结果为true

booleanmkdirs()

创建路径中包含的所有父文件夹和子文件夹,如果所有父文件夹和子文件夹都成功创建,返回结果为true

booleancreateNewFile()

创建一个新文件

longlength()

获取文件的长度,以字节为单位

String[]list()

返回文件或目录列表

例6-3fileOperate.java---创建目录和文件

importjava.io.*;

publicclassfileOperate{

staticFiledir;//声明文件类的静态成员变量dir代表目录对象

voidcreateDir(StringdirName){//声明建立目录带形参的方法(c:

/qq-实参)

dir=newFile(dirName);//以目录名为实参创建文件目录对象实例

if(dir.exists())//如果该目录存在

{

System.out.println("目录已经存在");//输出目录已经存在

}

dir.mkdirs();//否则创建目录

}

voidcreateFiles(intnum)throwsIOException{//定义创建n个文件带参数的方法(8-实参)

for(inti=0;i

{

Filefile=newFile(dir,"/file"+i+".txt");//以文件目录对象和文件名创建文件对象实例

file.createNewFile();//调用创建新文件的方法建立新文件

}

}

voidcreateFiles()throwsIOException{//定义创建多个文件不带参数的方法

Filefile=newFile(dir,"/ReadMe.txt");//在dir中创建3个文本文件对象

Filefile1=newFile(dir,"/Read.txt");

Filefile2=newFile(dir,"/write.txt");

file.createNewFile();//新建3个文本文件

file1.createNewFile();

file2.createNewFile();

}

voidfileSearch(Stringfilename){//定义文件搜索带形参数的方法

Filef=newFile(dir,filename);//以文件目录对象和文件名创建文件对象实例

if(f.exists())//如果该目录和文件对象存在

{

System.out.println("文件路径:

"+f.getAbsolutePath());//输出文件绝对路径

System.out.println("是否可读:

"+f.canRead());//输出该文件是否可读

System.out.println("是否可写:

"+f.canWrite());//输出该文件是否可写

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

"+f.length()/1000+"KB");//输出该文件大小KB

}

else//否则

System.out.println("文件不存在");//输出该文件不存在

}

voidcountFiles(){//计算文件数的方法

System.out.println("所在目录文件数:

"+dir.list().length);//输出该目录下的文件数

}

voiddeleteDir(FiledirName){//删除该目录下的文件带形参的方法

File[]files=dirName.listFiles();//将该目录下的文件列表存储到数组files中

for(inti=0;i

files[i].delete();//删除文件

}

}

publicstaticvoidmain(String[]args)throwsIOException{

fileOperatefo=newfileOperate();//创建文件操作类的对象实例fo

fo.createDir("c:

/qq");//在C:

盘创建目录qq

fo.createFiles(8);//通过调用建立文件方法将实参传入新建8个文本文件

fo.createFiles();//新建3个文本文件

fo.countFiles();//调用文件计数方法

fo.fileSearch("file5.txt");//调用搜索file5.txt文件的方法

//fo.deleteDir(dir);//调用删除该目录列表下所有文件的方法

}

}

例6-4FileTest1.java-File类方法的应用(FileTest1\FileTest1.java)

importjava.io.*;

classFileTest1{

publicstaticvoidmain(Stringargs[]){

System.out.println("pathseparater"+File.pathSeparator);//输出文件路径分隔符

System.out.println("pathseparaterchar"+File.pathSeparatorChar);

System.out.println("separater"+File.separator);//输出文件路径间分隔字符

System.out.println("separaterchar"+File.separatorChar);

Filep=newFile("c:

/qq/");//以磁盘目录为参数创建目录路径对象实例

Filef=newFile(p,"ReadMe.txt");//以磁盘目录对象和文件名创建文件对象实例

System.out.println();//输出空行

System.out.println(f);//输出包含目录和文件名的文件对象路径c:

/qq/ReadMe.txt

System.out.println("exist?

"+f.exists());//判断文件对象c:

/qq/ReadMe.txt是否存在

System.out.println("name"+f.getName());//返回文件对象中的文件名

System.out.println("len"+f.length());

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1