第9章 输入输出流Word文档下载推荐.docx
- 文档编号:18416817
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:17
- 大小:31.29KB
第9章 输入输出流Word文档下载推荐.docx
《第9章 输入输出流Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第9章 输入输出流Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
FileInputStreamdatain=newFileInputStream(newFile("
"
));
文件没有指定路径,默认与应用程序在相同目录中。
如果未找到指定文件,则抛出FileNotFoundException异常。
(2)FileInputStream(FileDescriptorfdObj)用FileDescriptor对象创建一个FileInputStream对象。
FileInputStreamdatain=newFileInputStream();
FileDescriptor定义了3个静态对象,等价于,等价于,等价于。
创建FileInputStream对象时,只能使用。
采用这种方式创建的FileInputStream对象可以从键盘读取数据。
(3)FileInputStream(Stringname)用指定的文件名创建一个FileInputStream对象。
FileInputStreamdatain=newFileInputStream("
);
Windows环境中的路径分隔符号为“\”,可用“\\”或“/”作为路径分隔符。
d:
\\javatemp\\chapter09\\"
2、FileInputStream对象操作
FileInputStream对象常用操作如下:
available():
返回可读的字节数。
若没有可读数据,返回值为0。
close():
关闭文件输入流。
read():
从输入流读取一个字节,返回值类型为int。
若没有可读数据,返回-1。
read(byte[]b):
从输入流读取数据,按顺序放入b的各个数组元素中。
返方法回值类型为int,表示从流中读取的总的字节数。
若没有可读数据,返回值为-1。
read(byte[]b,intbindex,intcount):
最多从输入流读取count个字节,按顺序放入b数组中下标从bindex开始的元素中。
返方法回值类型为int,表示从流中读取的总的字节数。
若没有可读数据,返回值为-1。
skip(longn):
在流中跳过n个字节。
n不能为负数,否则产生错误。
FileInputStream对象的各个方法在出现错误时,会抛出IOException异常。
IOException异常属于检查异常,必须在代码中捕捉或声明方法抛出
【例】
使用FileInputStream对象读取文件数据。
(源文件位置:
光盘:
\chapter09\.,光盘:
\chapter09\)useFileInputStream从文本文件中读取数据,并显示在命令提示符窗口中。
文件内容如下:
1:
firstline2:
secondline3:
thirdline
程序代码如下:
import.*;
publicclassuseFileInputStream{publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamin=null;
try{in=newFileInputStream("
("
文件总字节数:
+());
****文件内容如下****"
intc;
while(()!
=0)//如果还有可读数据则循环{c=();
//读一个字节//read方法返回的是int型数据,要按字符输出,//所以用char强制转换数据类型。
//如果不转换,输出为字符ASCII码的十进制值((char)c);
//输出}("
****文件内容结束****"
();
//关闭流in=newFileInputStream("
//重新建立文件输入流intcount=0;
byteb[]=newbyte[5];
(16);
//跳过16个字节
if(()!
=0)count=(b);
//从流读取数据到字节数组("
用数组读出的数据:
for(inti=0;
i<
count;
i++)("
%-4d"
b[i]);
\n对应的字符:
%-4s"
(char)b[i]);
}finally{if(in!
=null)();
//关闭流}}}
代码中使用了FileInputStream的各种方法,这些方法可能产生IOException异常。
代码中没有使用catch处理IOException异常,所以在main方法的参数表之后使用throws关键字声明方法可能抛出IOException异常。
程序在finally代码块中关闭文件输入流。
如果没有在程序中调用close方法关闭流,系统可自动将其关闭。
close方法在关闭流的同时,释放维护流使用的相同资源,所以建议读者在代码中显式调用close方法关闭流,以便提供相同效率。
程序将关闭流操作放在finally代码块中,这是因为不管程序运行是否有错,finally代码都会执行,从而保证关闭流。
说明:
本例中文件内容为ASCII码字符。
如果文件中包含非ASCII码字符,比如汉字,按字节读取会导致非ASCII码字符不能读取和显示。
3、创建FileOutputStream对象
可用下列方法创建FileOutputStream对象:
(1)FileOutputStream(Filefile)用指定File对象创建文件输出流,向File对象指定的文件输出数据。
该方法始终创建一个新文件。
如果已存在同名文件,原文件被覆盖。
File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。
FileOutputStreamdataout=newFileOutputStream(newFile("
(2)FileOutputStream(Filefile,booleanappend)参数append为false时,与FileOutputStream(Filefile)相同。
参数append为true时,表示向文件添加数据。
),true);
(3)FileOutputStream(FileDescriptorfdObj)用FileDescriptor对象创建文件输出流。
FileOutputStreamdataout=newFileOutputStream();
(4)FileOutputStream(Stringname)用指定文件名创建文件输出流,向文件输出数据,与FileOutputStream(Filefile)方法类似。
FileOutputStreamdataout=newFileOutputStream("
(5)FileOutputStream(Stringname,booleanappend)参数append为false时,与FileOutputStream(Stringname)相同。
参数append为true时,表示向文件添加数据。
true);
4、FileOutputStream对象操作
FileOutputStream对象常用操作如下:
关闭文件输出流。
flush():
刷新流,即向流中的数据全部写入文件。
write(intn):
向文件写入一个字节。
如果n大于255,即多余一个字节,则将n的最后一个字节写入文件。
写入文件的字节n视为字符的ASCII码。
例如,write(65)写入文件的是字符AASCIIwrite(65)A(其ASCII码为65)。
write(byte[]b):
将字节数组b中的数据按顺序写入文件。
write(byte[]b,intbindex,intcount):
将字节数组b中下标从bindex开始的count个元素写入文件。
FileOutputStream对象的各个方法在出现错误时,会抛出IOException异常。
使用FileOutputStream对象向文件写数据。
(源文件位置:
光盘:
\chapter09\,光盘:
\chapter09\)useFileOutputStream首先将文本文件中的数据复制到新文件中,再为文件添加部分数据。
春晓春眠不觉晓处处闻啼鸟夜来风雨声花落知多少
//将文件中的数据复制到文件中,并添加部分数据import.*;
publicclassuseFileOutputStream{publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamin=null;
FileOutputStreamout=null;
out=newFileOutputStream("
//复制文件while(()!
=0)//如果还有可读数据则循环(());
//关闭输出流//重新打开文件,添加数据out=newFileOutputStream("
('
\n'
//写入一个换行符//24897的二进制为110000101000001,第二个字节为字符A的//ASCII码,所以下面的语句实际写入的是字符A(24897);
//写入一个换行符byteb[]=newbyte[10];
for(bytei=0;
;
i++)b[i]=(byte)(97+i);
(b);
//将输入写入文件,实际写入abcdefghij("
文件操作结束!
if(out!
}}}//关闭流//关闭流
字符流
字符流按字符读取和写入数据。
Java采用Unicode字符,在读写文件时,字符流可以自动将文件中的本地字符转换为Unicode字符。
本节介绍两个字符流类:
FileReader(读文件)和FileWriter(写文件)。
FileReader和FileWriter类的基类分别为InputStreamReader和OutputStreamWriter类,InputStreamReader和OutputStreamWriter类分别继承抽象类Reader和Writer。
InputStreamReader和OutputStreamWriter类可以按本地字符集和指定字符集读写文件。
文件中的数据仍按字节读写,InputStreamReader和OutputStreamWriter流完成字符和字节的转换。
FileReader和FileWriter流采用本地字符集读写文件。
1、创建FileReader对象
可用下列方法创建FileReader对象:
FileReader(Filefile)用File对象创建一个FileReader对象,File对象指定实际访问的磁盘文件。
FileReaderdatain=newFileReader(newFile("
FileReader(FileDescriptorfdObj)用FileDescriptor对象创建一个FileReader对象。
FileReaderdatain=newFileReader();
FileReader(Stringname)用指定的文件名创建一个FileReader对象。
FileReaderdatain=newFileReader("
2、FileReader流常用操作
FileReader流常用操作如下:
getEncoding():
返回文件采用的字符集。
关闭流。
从流读取一个字符,返回值类型为int。
若没有可读数据,返回-1。
read(char[]b):
从流读取字符,按顺序放入b的各个数组元素中。
返方法回值类型为int,表示从流中读取的总的字符数。
若没有可读数据,返回值为-1。
read(char[]b,intbindex,intcount):
最多从输入流读取count个字符,按顺序放入b数组中下标从bindex开始的元素中。
在流中跳过n个字符。
n不能为负数,否则产生错误。
3、创建FileWriter对象
可用下列方法创建FileWriter对象:
FileWriter(Filefile)用指定File对象创建FileWriter流,向File对象指定的文件输出数据。
该方法始终创建一个新文件。
如果已存在同名文件,原文件被覆盖。
File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。
FileWriterdataout=newFileWriter(newFile("
FileWriter(Filefile,booleanappend)参数append为false时,与FileWriter(Filefile)相同。
参数append为true时,表示向文件添加数据。
FileWriter(FileDescriptorfdObj)用FileDescriptor对象创建FileWriter流。
FileWriterdataout=newFileWriter();
FileWriter(Stringname)用指定文件名创建FileWriter流,向文件输出数据,与FileWriter(Filefile)方法类似。
FileWriterdataout=newFileWriter("
FileWriter(Stringname,booleanappend)参数append为false时,与FileWriter(Stringname)相同。
参数append为true时,表示向文件添加数据。
4、FileWriter对象操作
FileWriter对象常用操作如下:
关闭FileWriter流。
向文件写入一个字符,n为字符的Unicode码。
write(char[]b):
将字符数组b写入文件。
write(char[]b,intbindex,intcount):
将字符数组b中下标从bindex开始的count个元素写入文件。
write(Stringb):
将字符串b写入文件。
write(Stringb,intindex,intcount):
将字符串b中序号从index开始的count个字符写入文件。
append(charc):
将字符c写入文件。
append(CharSequence[]b):
将字符序列b写入文件。
String类型为一个典型的实现了CharSequence接口的类。
append(CharSequence[]b,intstart,intend):
将字符串序列b中下标start开始到end的字符写入文件。
缓冲流
前面前面介绍的字节流和字符流均未使用内存缓冲区,也就是说,每次读写一个字节或字符都是直接访问文件,这会导致大量数据读写时频繁访问文件。
缓冲输入输出流则是在内存中创建一个缓冲区来缓存数据。
程序只是从缓冲区读取数据,不直接访问文件。
输入数据时,缓冲流在缓冲区为空时自动从文件读取数据填满缓冲区。
输出数据时,数据首先写入缓冲区,缓冲区填满或执行flush方法时,缓冲流将缓冲的数据写入文件。
Java提供了4种缓冲流,BufferedInputStream和Java4BufferedInputStreamBufferedOutputStream用于缓冲字节流,BufferedReader和BufferedWriter用于缓冲字符流。
可以创建默认大小缓冲区的缓冲流。
BufferedReaderin=newBufferedReader(newFileReader("
也可创建指定大小缓冲区的缓冲流。
BufferedWriterout=newBufferedWriter(newFileWriter("
),100);
格式化输入输出
字节流和字符流只是按字节或字符读写文件。
如果要从读取特定类型的数据,例如读一个整数,则需要使用Scanner对象。
在将特定类型的数据写入文件,则可使用PrintWriter或PrintStream对象完成输出。
格式化输入
Scanner对象可以按基本数据类型从字符串或各种输入流中解析数据。
1、创建Scanner对象
Scanner类的构造方法有两种基本格式:
Scanner(数据源)Scanner(数据源,字符集)创建Scanner对象的数据源可以是一个字符串、File对象、InputStream对象、InputStream子类对象、Readable对象或ReadableByteChannel对象。
Scannerin1=newScanner("
1one2two"
Scannerin2=newScanner(newFile("
Scannerin3=newScanner(newFileReader("
Scannerin4=newScanner(newFileReader("
Scannerin5=newScanner(newFileInputStream("
Scannerin6=newScanner(newBufferedReader(newFileReader("
)));
在创建访问各种流的Scanner对象时,可用一个字符串指明数据源采用的字符集,默认为本地字符集。
从文件读出字节时,将其转换为指定字符集的字符。
例如:
),"
GB2312"
//指定采用的字符集Scanner对象在不使用之后,应调用close方法将其关闭。
in1close();
2、从数据源解析数据
Scanner对象用一系列的next方法从数据源解析各种类型的数据:
next():
从数据源读取一个字符串。
nextLine():
将当前位置到换行符号之前的全部内容作为一个字符串返回。
nextBoolean()nextBoolean():
从数据源读取一个boolean类型值。
booleannextByte():
从数据源读取一个byte类型值。
nextDouble():
从数据源读取一个double类型值。
nextFloat():
从数据源读取一个float类型值。
nextInt():
从数据源读取一个int类型。
nextLong():
从数据源读取一个long类型值。
nextShort():
从数据源读取一个short类型值。
在使用各种next方法读取数据时,可能会发生下列三种异常:
InputMismatchException:
如果下一个标记不能转换为指定类型的数据,或者超出了数据范围。
NoSuchElementException:
数据源中已无数据可读。
IllegalStateException:
Scanner对象已被关闭。
这3种异常属于不检查异常,可以不捕捉处理。
格式化输出
PrintStream和PrintWriter类提供了格式化输出方法,可用print、printf、println和format方法输出各种基本数据类型的数据,也可输出对象。
printf和format方法用法相同,均可使用格式字符串来控制数据的输出格式。
提示:
关于格式字符串、print、printf和println方法的使用请参考中的相关内容。
println方法会在输出数据后添加一个换行符号。
print、printf和format方法不自动添加换行符号,可在输出数据中包含换行符号来实现换行。
PrintStream对象将数据转换为字节流输出,PrintWriter对象将数据转换为字符流输出。
字符和字符串按照默认的本地字符集转换为字节。
可以在创建PrintStream或
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第9章 输入输出流 输入输出