概述
一、IO流概述
IO流的作用和分类:
1) IO流用来处理设备之间的数据传输
2) Java对数据的操作时通过流的方式
3) Java用于操作流的对象都在IO包中
4) 流按操作数据分为两种:字节流与字符流
字符流的抽象基类:Reader/Writer
字节流的抽象基类:InputStream/OutputStream
5) 流按流向分为:输入流与输出
Writer与Reader:是字符输入输出的抽象类
InputStream与OutputStream:是字节输入输出的抽象类
FileWriter与FileReader:是可以读写文件的类,用于操作文本
FileInputStream与FileOutputStream:是可以读写文件中字节数据的类,用于操作二进制数据
InputStreamReader与OutputStreamWriter:是字节通向字符的桥梁
BufferedWriter与BufferedReader:字符流的缓冲区,用于为了提高流的效率
BufferedInputStream与BufferedOutputStream:是字节流的缓冲区,用于为了提高流的效率。
二、字符流
1.读写文件中的字符
FrileWriter中的一些方法:
write(Stringa);方法将字符串写到流中
flush();强制刷新流对像中的缓冲区中的数据。
close();关闭流资源,但是关闭之前会刷新一次内部的缓冲区中的数据;
FileReader字符输入流:用于读取已过滤的字符流的抽象类;
int read();方法每次读取一个字符,如果已到达流的末尾,则返回 -1
int read(char[] cbuf);将字符读入数组,返回读到字符的个数;
例子1:FrileWriter写入和读取文件中的文本数据,创建一个文件并写入一些字符数据。
public class Test1 {
public static void main(String[] args) {
try {
//创建一个FileWriter对象,该对象一被初始化,指定读取文件路径
Writer w=new FileWriter("D:/test.text");
//写入一行数据
w.write("第一行文本!");
//刷新该流的缓冲。将数据刷新到文件中
w.flush();
//关闭资源
w.close();
int ch=0;
//创建一个FileWriter对象,将文件里的内容读出
Reader r=new FileReader("D:/test.text");
//r.read()返回值不为-1的时候打印字符,如果为-1说明文件读取完毕
while((ch=r.read())!=-1){
System.out.print((char)ch);
}
//关闭资源
r.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
例子2:对已有文件进行续写,不覆盖当前文件的内容:
public class Test2 {
// 对已有文件的数据进行续写
public static void main(String[] args) {
FileWriter fw = null;
try {
/* 传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写 */
fw = new FileWriter("d:/text.txt",true);
fw.write("第二行数据!");
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}
例子2:文件的复制
void write(buf,0,len);将字符写入数组的某一部分,此方法没有返回值,buf要写入的字符缓冲区,off从该处开始读取字符,len要写入字符的数量。
public class Test3 {
public static void main(String[] args){
FileWriter fw=null;
FileReader fr=null;
try{
fw=new FileWriter("d:/text.txt");
fr=new FileReader("c:/text.txt");
//定义数组缓存大小
char[] buf=newchar[1024];
int len=0;
while((len=fr.read(buf))!=-1){
//将文件写出
fw.write(buf,0,len);
}
}catch(IOException e){
throw new RuntimeException("读写失败");
}finally{
if(fw!=null)
try{
//关闭写出流
fw.close();
}catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
if(fr!=null)
try{
//关闭写入流
fr.close();
}catch(IOException e){
thrownew RuntimeException("读取关闭失败");
}
}
}
}
2.字符缓冲区
字符缓冲区的作用:提高了字符读取效率。
相关类:BufferedWriter与BufferedReader,缓冲区要结合流才能使用,是在流的基础上对流功能的增强。
例子:通过缓冲区复制Java文件
public class Test4 {
public static void main(String[] args) {
BufferedWriter bfw = null;
BufferedReader bfr = null;
try {
//定义写入缓存区
bfw = new BufferedWriter(new FileWriter("d:/text.java"));
//定义写出缓冲区
bfr = new BufferedReader(new FileReader("c:/text.java"));
for(String line=null;(line = bfr.readLine()) !=null;)
{
bfw.write(line);
//写入一个行分隔符,newLine是跨平台的
bfw.newLine();
//刷新缓存区的flush,即使关闭缓冲区
bfw.flush();
}
} catch (IOException e) {
throw new RuntimeException("复制文件失败");
} finally {
try {
if (bfw !=null) {
bfw.close();
}
} catch (IOException e) {
throw new RuntimeException("读取关闭失败");
}
try {
if (bfr !=null) {
bfr.close();
}
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
}
}
}
最后
以上就是靓丽发夹为你收集整理的黑马程序员-字符流的全部内容,希望文章能够帮你解决黑马程序员-字符流所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复