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示例
2.FileReader:文件字符输出流;
构造函数:
FileReader(String fileName);
根据给定的文件名构造一个FileReader对象。
FileReader示例:
3.FileWriter与FileReader综合运用:复制文本文件。
三,字符流缓冲区
1.BufferedWriter缓冲字符输出流:
构造函数:
BufferedWriter(Writer out):创建一个使用默认大小的输出缓冲区的缓冲字符输出流。
特有方法:
newLine():换行
示例:
2.BufferedReader:缓冲字符输入流;
构造函数:
BufferedReader(Reader in):创建一个使用默认大小的输出缓冲区的缓冲字符输入流。
特有方法:
readLine():读取一行字符,并返回其字符串形式;
示例:
3.BufferedWriter与BufferedReader的综合运用,复制文件:
四,自定义字符输入流缓冲区
用自定义的缓冲区按行读取文本文件
说明:字符流千万不能忘记刷新。
一,字符流简介
字符输入流:
字符输入流类型体系的父类是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(); } }
相关文章推荐
- Java Servlet概述
- 灵活封装Struts2的action类
- java动态代理原理及简单模拟
- Struts JSON方式 提交数据 检查后返回检查结果
- Java 垃圾回收策略调优
- eclipse导出jar包如何正常显示图片
- MyEclipse:Resource is out of sync with the file system问题的解决办法
- java监听事件
- Java数组
- eclipse中的build和clear
- 关于java之socket输入流输出流可否放在不同的线程里进行处理
- Spring事务管理(四) 该选择编程式事务管理还是声明式事务管理
- Eclipse中修改作者变量${user}
- Java中容器的迭代器的fail-fast机制
- Java之集合类型篇
- Spring事务管理(三) 编程式事务管理
- java.lang.UnsatisfiedLinkError在web工程下的解决办法
- Spring初级:Spring应用上下文
- ThreadLocal实践
- Java中的byte