版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA应用开发详解第12章:JAVAIO ——字节流与字符流MLDN软件教学研发部本章目标掌握流的概念掌握字节流与字符流的作用掌握文件的标准操作步骤掌握字节与字符操作的区别流在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。字节流与字符流在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。操作流程在JAVA中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:使用File类打开一个文件通过字节流或字符流的子类,指定输出的位置进行读/写操作关闭输入/输出字节流字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream。字节输出流:OutputStream字节输入流:InputStreamOutputStream类OutputStream是整个io包中字节输出流的最大父类,此类的定义如下:publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable从以上的定义中可以发现,此类是一个抽象类,如果要想使用此类的话,则首先必须通过子类实例化对象,那么如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化。OutputStream类的常用方法要想使用以上方法,必须使用子类实例化,此时使用FileOutputStream子类,此类的构造方法如下:publicFileOutputStream(Filefile)throwsFileNotFoundExceptionNo.方法或常量类型描述1publicvoidclose()throwsIOException普通关闭输出流2publicvoidflush()throwsIOException普通刷新缓冲区3publicvoidwrite(byte[]b)throwsIOException普通将一个byte数组写入数据流4publicvoidwrite(byte[]b,intoff,intlen)throwsIOException普通将一个指定范围的byte数组写入数据流5publicabstractvoidwrite(intb)throwsIOException普通将一个字节数据写入数据流向文件中写入字符串packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo01{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
OutputStreamout=null; //准备好一个输出的对象
out=newFileOutputStream(f); //通过对象多态性,进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!"; //准备一个字符串
byteb[]=str.getBytes();//只能输出byte数组,所以将字符串变为byte数组
out.write(b); //将内容输出,保存文件
//第4步:关闭输出流
out.close(); //关闭输出流
}}使用write(intt)的方式写入文件内容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
OutputStreamout=null; //准备好一个输出的对象
out=newFileOutputStream(f); //通过对象多态性,进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!"; //准备一个字符串
byteb[]=str.getBytes();//只能输出byte数组,所以将字符串变为byte数组
for(inti=0;i<b.length;i++){ out.write(b[i]); //将内容输出
}
//第4步:关闭输出流
out.close(); //关闭输出流
}}追加新内容之前的所有操作中,如果重新执行程序,则肯定会覆盖文件中的已有内容,那么此时可以通过FielOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法:publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。修改之前的程序,追加文件内容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
OutputStreamout=null; //准备好一个输出的对象
out=newFileOutputStream(f,true);//此处表示在文件末尾追加内容
//第3步:进行写操作
Stringstr="HelloWorld!!!"; //准备一个字符串
byteb[]=str.getBytes();//只能输出byte数组,所以将字符串变为byte数组
for(inti=0;i<b.length;i++){ out.write(b[i]); //将内容输出
}
//第4步:关闭输出流
out.close(); //关闭输出流
}}字节输入流:InputStream既然程序可以向文件中写入内容,则就可以通过InputStream从文件中把内容读取进来,首先来看InputStream类的定义:publicabstractclassInputStreamextendsObjectimplementsCloseable与OutputStream类一样,InputStream本身也是一个抽象类,必须依靠其子类,如果现在是从文件中读取,子类肯定是FileInputStream。观察FileInputStream类的构造方法:publicFileInputStream(Filefile)throwsFileNotFoundExceptionInputStream类的常用方法No.方法或常量类型描述1publicintavailable()throwsIOException普通可以取得输入文件的大小2publicvoidclose()throwsIOException普通关闭输入流3publicabstractintread()throwsIOException普通读取内容,以数字的方式读取4publicintread(byte[]b)throwsIOException普通将内容读到byte数组之中,同时返回读入的个数从文件中读取内容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStramDemo01{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
InputStreaminput=null; //准备好一个输入的对象
input=newFileInputStream(f); //通过对象多态性,进行实例化
//第3步:进行读操作
byteb[]=new
byte[1024]; //所有的内容读到此数组之中
input.read(b); //把内容取出,内容读到byte数组之中
//第4步:关闭输入流
input.close(); //关闭输入流
System.out.println("内容为:"+newString(b));//把byte数组变为字符串输出
}}输出数组中指定位置的内容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
InputStreaminput=null; //准备好一个输入的对象
input=newFileInputStream(f); //通过对象多态性,进行实例化
//第3步:进行读操作
byteb[]=new
byte[1024]; //所有的内容读到此数组之中
intlen=input.read(b); //将内容读出
//第4步:关闭输入流
input.close(); //关闭输入流
System.out.println("读入数据的长度:"+len); System.out.println("内容为:"+newString(b,0,len));//把byte数组变为字符串输出
}}开辟指定大小的byte数组packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
InputStreaminput=null; //准备好一个输入的对象
input=newFileInputStream(f); //通过对象多态性,进行实例化
//第3步:进行读操作
byteb[]=new
byte[(int)f.length()]; //所有的内容读到此数组之中,数组大小由文件决定
input.read(b); //将内容读出
//第4步:关闭输入流
input.close(); //关闭输入流
System.out.println("内容为:"+newString(b));//把byte数组变为字符串输出
}}使用read()通过循环读取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo04{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
InputStreaminput=null; //准备好一个输入的对象
input=newFileInputStream(f); //通过对象多态性,进行实例化
//第3步:进行读操作
byteb[]=new
byte[(int)f.length()]; //所有的内容读到此数组之中
for(inti=0;i<b.length;i++){ b[i]=(byte)input.read(); //将内容读出
}
//第4步:关闭输入流
input.close(); //关闭输入流
System.out.println("内容为:"+newString(b));//把byte数组变为字符串输出
}}另一种方式的读取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo05{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
InputStreaminput=null; //准备好一个输入的对象
input=newFileInputStream(f); //通过对象多态性,进行实例化
//第3步:进行读操作
intlen=0; //用于记录读取的数据个数
byteb[]=new
byte[1024]; //所有的内容读到此数组之中
inttemp=0; //接收读取的每一个内容
while((temp=input.read())!=-1){
//将每次的读取内容给temp变量,如果temp的值不是-1,则表示文件没有读完
b[len]=(byte)temp; len++; }
//第4步:关闭输入流
input.close(); //关闭输入流
System.out.println("内容为:"+newString(b,0,len)); }}字符流在程序中一个字符等于2个字节,那么JAVA提供了Reader、Writer两个专门操作字符流的类。字符输出流:Writer字符输入流:Reader字符输出流:WriterWriter本身是一个字符流的输出类,此类的定义如下:publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable此类本身也是一个抽象类,如果要想使用此类,则肯定要使用其子类,此时如果是向文件中写入内容,所以应该使用FileWriter的子类。FileWriter类的构造方法定义如下:publicFileWriter(Filefile)throwsIOExceptionWriter类的常用方法No.方法或常量类型描述1publicabstractvoidclose()throwsIOException普通关闭输出流2publicvoidwrite(Stringstr)throwsIOException普通将字符串输出3publicvoidwrite(char[]cbuf)throwsIOException普通将字符数组输出4publicabstractvoidflush()throwsIOException普通强制性清空缓存向文件中写入数据packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo01{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
Writerout=null; //准备好一个输出的对象
out=newFileWriter(f); //通过对象多态性,进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!"; //准备一个字符串
out.write(str); //将内容输出
//第4步:关闭输出流
out.close(); //关闭输出流
}}使用FileWriter追加文件的内容在使用字符流操作的时候,也可以实现文件的追加功能,直接使用FileWriter类中的以下构造即可实现追加:publicFileWriter(Filefile,booleanappend)throwsIOException将append的值设置成true,就表示追加。追加文件内容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo02{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
Writerout=null; //准备好一个输出的对象
out=newFileWriter(f,true); //通过对象多态性,进行实例化
//第3步:进行写操作
Stringstr="\r\nLIXINGHUA\r\nHelloWorld!!!"; //准备一个字符串
out.write(str);//将内容输出
//第4步:关闭输出流
out.close(); //关闭输出流
}}字符输入流:ReaderReader是使用字符的方式从文件之中取出数据,Reader类的定义如下:publicabstractclassReaderextendsObjectimplementsReadable,CloseableReader本身也是抽象类,如果现在要从文件中读取内容,则可以直接使用FileReader子类。FileReader的构造方法定义如下:publicFileReader(Filefile)throwsFileNotFoundExceptionReader类的常用方法No.方法或常量类型描述1publicabstractvoidclose()throwsIOException普通关闭输出流2publicintread()throwsIOException普通读取单个字符3publicintread(char[]cbuf)throwsIOException普通将内容读到字符数组之中,返回读入的长度从文件中读取内容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileReader;importjava.io.Reader;public
classReaderDemo01{
public
static
voidmain(String[]args)throwsException{//异常抛出,不处理
//第1步、使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
Readerreader=null; //准备好一个输入的对象
reader=newFileReader(f); //通过对象多态性,进行实例化
//第3步:进行读操作
charc[]=new
char[1024]; //所有的内容读到此数组之中
intlen=reader.read(c); //将内容输出
//第4步:关闭输入流
reader.close(); //关
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年女式皮夹克项目投资价值分析报告
- 2024至2030年双面活动密集架项目投资价值分析报告
- 2024至2030年中国石英管双色液位计数据监测研究报告
- 2024至2030年中国电眼探布器数据监测研究报告
- 2024至2030年中国EVA进排水波纹管数据监测研究报告
- 2024年中国木制卷笔刀市场调查研究报告
- 2024年度假旅游项目申请报告
- 山东省烟台一中2025届高考英语必刷试卷含解析
- 2025届山东省全国新课标试卷高考英语三模试卷含解析
- 2025届内蒙古自治区通辽市科尔沁左翼后旗甘旗卡第二高级中学高三最后一模英语试题含解析
- 实用针灸学-经络养生与康复-暨南大学中国大学mooc课后章节答案期末考试题库2023年
- 入团志愿书(2016版本)(可编辑打印标准A4) (1)
- 基于PLC及温度控制系统设计
- 地块颜色标准
- 106kW水冷式管壳冷凝器 设计说明书
- 宝石类采样规范手册
- 航海模型教学设计和计划
- 第三方安全检查报告模板
- 公司内部市场化实施方案
- 浙江省公路山岭隧道机械化装备应用指导手册
- 医师定期考核简易程序练习及答案
评论
0/150
提交评论