您的位置:首页 > 编程语言 > Java开发

Java知识总结-IO字符流

2014-02-23 23:00 507 查看
4000

说明:字符流千万不能忘记刷新。

一,字符流简介

字符输入流:

字符输入流类型体系的父类是Reader抽象类。

字符输入流常见子类:

--StringReader 字符串读取流 
--BufferedReader 字符读取流缓冲区 
  --LineNumberReader 跟踪行号的缓冲字符输入流
--CharArrayReader 字符数组读取流缓冲区 
--InputStreamReader 字节转换字符流
  --FileReader 字符文件读取流 

字符输入流共性方法:

read():读取单个字符;返回这个字符的int型。

read(char[] cbuf):读取字符到字符数组;返回读取的字符数,读取完毕返回-1。

read(char[] cbuf,int off,int len):读取字符到数组的某一部分;返回读取的字符数,读取完毕返回-1。

close():关闭流并释放资源;

字符输出流:

字符输出流类型体系的父类是Writer抽象类。

字符输出流常见子类:

--PrintWriter 字符打印流                                         
--StringWriter 字符串写入流                                   
--BufferedWriter 字符写入流缓冲区                               
--CharArrayWriter 字符数组写入流缓冲区             
--OutputStreamWriter 字符转换字节流                 
    --FileWriter 字符文件写入流 

字符输出流共性方法:

write(int c):写入单个字符;

write(String str):写入字符串;

write(char[] cbuf):写入字符数组;

flush():刷新这个流的缓冲;

close():关闭此流,但要先进行刷新;

二,文件字符流

1.FileWriter:文件字符输出流;

构造函数:

FileWriter(String fileName);

根据给定的文件名构造一个FileWriter对象,如果这个文件已存在,则对原有文件进行覆盖。

FileWriter(String fileName,boolean append);

根据给定文件名以及append值来判断来构造FileWriter对象,当append值为true时,则不会对原有文件进行覆盖,而是对已有文件进行续写。

FileWriter示例

import java.io.*;
public class Test {
public static void main(String[] args) throws IOException{
//根据文件名字符串创建文件字符输出流
FileWriter fw=new FileWriter("111.txt");
//写入字符串
fw.write("abcdefg");
//刷新流的缓冲
fw.flush();
//关闭流
fw.close();
}
}


2.FileReader:文件字符输出流;

构造函数:

FileReader(String fileName);

根据给定的文件名构造一个FileReader对象。

FileReader示例:

import java.io.*;
public class Test {
public static void main(String[] args) throws IOException{
//根据文件名字符串创建文件字符输入流
FileReader fr=new FileReader("111.txt");
//定义字符数组
char[] buf=new char[1024];
int num;
//将文件中字符读取到字符数组中
while((num=fr.read(buf))!=-1){
//打印字符数组的字符串形式
System.out.println(new String(buf,0,num));
}
//关闭流
fr.close();
}
}

3.FileWriter与FileReader综合运用:复制文本文件。

import java.io.*;
public class Test {
public static void main(String[] args){
//定义流
FileReader fr=null;
FileWriter fw=null;
try {
//实例化流对象
fr=new FileReader("111.txt");
fw=new FileWriter("333.txt");
//定义字符数组
char[] buf=new char[1024];
int num;
//将文件中字符读取到字符数组中
while((num=fr.read(buf))!=-1){
fw.write(buf,0,num);
fw.flush();
}
} catch (IOException e) {
throw new RuntimeException("复制失败");
}
finally{
if(fr!=null)
try {
fr.close();
} catch (Exception e2) {
}
if(fw!=null)
try {
fw.close();
} catch (Exception e2) {
}
}
}
}


三,字符流缓冲区

1.BufferedWriter缓冲字符输出流:

构造函数:

BufferedWriter(Writer out):创建一个使用默认大小的输出缓冲区的缓冲字符输出流。

特有方法:

newLine():换行

示例:

import java.io.*;
public class Test {
public static void main(String[] args) throws IOException{
//根据指定文件名创建FileWriter对象
FileWriter fw=new FileWriter("123.txt");
//为FileWriter对象建立缓冲区
BufferedWriter bw=new BufferedWriter(fw);
//写入字符串
bw.write("qwertyuiop");
//换行
bw.newLine();
bw.write("asdfghjkl");
//关闭流
bw.close();
}
}


2.BufferedReader:缓冲字符输入流;

构造函数:

BufferedReader(Reader in):创建一个使用默认大小的输出缓冲区的缓冲字符输入流。

特有方法:

readLine():读取一行字符,并返回其字符串形式;

示例:

import java.io.*;
public class Test {
public static void main(String[] args) throws IOException{
//根据指定文件名创建FileReader对象
FileReader fr=new FileReader("123.txt");
//为FileReader对象建立缓冲区
BufferedReader br=new BufferedReader(fr);
String buf;
//按行读取文件内容
while((buf=br.readLine())!=null){
System.out.println(buf);
}
//关闭流
br.close();
}
}

3.BufferedWriter与BufferedReader的综合运用,复制文件:

import java.io.*;
public class Test {
public static void main(String[] args){
//定义缓冲区
BufferedWriter bw=null;
BufferedReader br=null;
try {
//实例化
bw=new BufferedWriter(new FileWriter("xyz.txt"));
br=new BufferedReader(new FileReader("123.txt"));
String line;
//复制文本
while((line=br.readLine())!=null){
bw.write(line);
//bw.newLine();
bw.flush();
}
} catch (Exception e) {
throw new RuntimeException("复制失败");
}
finally{
//关闭流
if(bw!=null)
try {
bw.close();
} catch (Exception e2) {
}
if(bw!=null)
try {
bw.close();
} catch (Exception e2) {
}
}
}
}


四,自定义字符输入流缓冲区

//自定义字符输入流缓冲区
class MyBufferedReader extends Reader{
Reader r;
MyBufferedReader(Reader r){
this.r=r;
}
//重写父类抽象方法close();
public void close() throws IOException{
r.close();
}
//重写抽象方法
public int read(char[] cbuf, int off, int len) throws IOException {
return r.read(cbuf, off, len);
}
//自定义按行读取的方法
public String myReadLine() throws IOException{
char[] line=new char[1024];
int num=0;
int ch=0;
while((ch=r.read())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return new String(line,0,num);
else
line[num++]=(char)ch;
}
if(num!=0)
return new String(line,0,num);
return null;
}
}

用自定义的缓冲区按行读取文本文件

import java.io.*;
public class Test {
public static void main(String[] args) throws IOException{
MyBufferedReader br=new MyBufferedReader(new FileReader("123.txt"));
String line=null;
while((line=br.myReadLine())!=null){
System.out.println(line);
}
br.close();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: