黑马程序员:Java基础总结----字符流Reader&Writer
2013-07-02 19:31
513 查看
黑马程序员:Java基础总结
字符流Reader&Writer
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
字符流
字符流两个基类:
ReaderWriter
[align=left] //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。[/align]
[align=left] //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。[/align]
[align=left] //其实该步就是在明确数据要存放的目的地。[/align]
[align=left] FileWriter fw = new FileWriter("demo.txt" );[/align]
[align=left] //调用write方法,将字符串写入到流中。[/align]
[align=left] fw .write("abcde");[/align]
[align=left] //刷新流对象中的缓冲中的数据。[/align]
[align=left] //将数据刷到目的地中。[/align]
[align=left] //fw. flush();[/align]
[align=left] //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。[/align]
[align=left] //将数据刷到目的地中。[/align]
[align=left] //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。[/align]
[align=left] fw. close();[/align]
[align=left] //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。[/align]
[align=left] FileWriter fw = new FileWriter("demo.txt",true );[/align]
[align=left] fw.write( "nihao\r\nxiexie");[/align]
[align=left] fw.close()[/align]
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine();
[align=left] BufferedReader bufr = null ;[/align]
[align=left] BufferedWriter bufw = null;[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java" ));[/align]
[align=left] bufw = new BufferedWriter(new FileWriter("bufWriter_Copy.txt" ));[/align]
[align=left] String line = null;[/align]
[align=left] while((line=bufr.readLine())!=null)[/align]
[align=left] {[/align]
[align=left] bufw.write(line);[/align]
[align=left] bufw.newLine();[/align]
[align=left] bufw.flush();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] FileWriter fw = null;[/align]
[align=left] FileReader fr = null;[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] fw = new FileWriter("SystemDemo_copy.txt");[/align]
[align=left] fr = new FileReader("SystemDemo.java");[/align]
char[]
buf = new char[1024];//提高效率
int len
= 0;
[align=left] while((len=fr.read(buf))!=-1)[/align]
[align=left] {[/align]
[align=left] fw.write(buf,0,len);[/align]
[align=left] }[/align]
[align=left] }[/align]
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。(windows中回车是\r\n)
[align=left] String line = null ;[/align]
[align=left] while((line=bufr.readLine())!=null)[/align]
[align=left] {[/align]
[align=left] System.out.print(line);[/align]
[align=left] }[/align]
默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用
下面模拟了这一过程
[align=left]import java.io.*;[/align]
class MyLineNumberReader
{
[align=left] private Reader r ;[/align]
[align=left] private int lineNumber ;[/align]
[align=left] MyLineNumberReader(Reader r) {[/align]
this.r =
r;
[align=left] }[/align]
public String
myReadLine() throws IOException
{
[align=left] lineNumber++;[/align]
[align=left] StringBuilder sb = new StringBuilder();[/align]
int ch
= 0;
while ((ch
= r .read()) != -1) {
if (ch
== '\r' )
[align=left] continue;[/align]
if (ch
== '\n' )
[align=left] return sb.toString();[/align]
[align=left] else[/align]
sb.append(( char)
ch);
[align=left] }[/align]
if (sb.length()
!= 0)
[align=left] return sb.toString();[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
public void setLineNumber(int lineNumber)
{
this.lineNumber =
lineNumber;
[align=left] }[/align]
public int getLineNumber()
{
[align=left] return lineNumber ;[/align]
[align=left] }[/align]
public void myClose() throws IOException
{
[align=left] r.close();[/align]
[align=left] }[/align]
[align=left]}[/align]
public class Ts
{
public static void main(String[]
args) throws IOException {
[align=left] FileReader fr = new FileReader("copyTextByBuf.java" );[/align]
[align=left] MyLineNumberReader mylnr = new MyLineNumberReader(fr);[/align]
[align=left] String line = null;[/align]
[align=left] mylnr.setLineNumber(100);[/align]
while ((line
= mylnr.myReadLine()) != null)
{
System. out.println(mylnr.getLineNumber()
+ "::" + line);
[align=left] }[/align]
[align=left] mylnr.myClose();[/align]
[align=left] }[/align]
[align=left]}[/align]
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
字符流Reader&Writer
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
字符流
字符流两个基类:
ReaderWriter
类Writer 方法
Writer | append(char c) 将指定字符添加到此 writer。 |
abstractvoid | close() 关闭此流,但要先刷新它。 |
abstractvoid | flush() 刷新该流的缓冲。 |
void | write(String str) 写入字符串。 |
[align=left] //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。[/align]
[align=left] //其实该步就是在明确数据要存放的目的地。[/align]
[align=left] FileWriter fw = new FileWriter("demo.txt" );[/align]
[align=left] //调用write方法,将字符串写入到流中。[/align]
[align=left] fw .write("abcde");[/align]
[align=left] //刷新流对象中的缓冲中的数据。[/align]
[align=left] //将数据刷到目的地中。[/align]
[align=left] //fw. flush();[/align]
[align=left] //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。[/align]
[align=left] //将数据刷到目的地中。[/align]
[align=left] //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。[/align]
[align=left] fw. close();[/align]
类 FileWriter
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 |
[align=left] FileWriter fw = new FileWriter("demo.txt",true );[/align]
[align=left] fw.write( "nihao\r\nxiexie");[/align]
[align=left] fw.close()[/align]
类 BufferedWriter
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 |
所以在创建缓冲区之前,必须要先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine();
void | newLine() 写入一个行分隔符。 |
[align=left] BufferedWriter bufw = null;[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java" ));[/align]
[align=left] bufw = new BufferedWriter(new FileWriter("bufWriter_Copy.txt" ));[/align]
[align=left] String line = null;[/align]
[align=left] while((line=bufr.readLine())!=null)[/align]
[align=left] {[/align]
[align=left] bufw.write(line);[/align]
[align=left] bufw.newLine();[/align]
[align=left] bufw.flush();[/align]
[align=left] }[/align]
[align=left] }[/align]
类 Reader 方法
int | read() 读取单个字符。如果已到达流的末尾,则返回 -1 |
abstractint | read(char[] cbuf,int off,int len) 将字符读入数组的某一部分。 |
类 FileReader
构造同FileWriter,方法同Reader,[align=left] FileWriter fw = null;[/align]
[align=left] FileReader fr = null;[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] fw = new FileWriter("SystemDemo_copy.txt");[/align]
[align=left] fr = new FileReader("SystemDemo.java");[/align]
char[]
buf = new char[1024];//提高效率
int len
= 0;
[align=left] while((len=fr.read(buf))!=-1)[/align]
[align=left] {[/align]
[align=left] fw.write(buf,0,len);[/align]
[align=left] }[/align]
[align=left] }[/align]
类 BufferedReader
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。(windows中回车是\r\n)
String | readLine() 读取一个文本行。包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null |
[align=left] while((line=bufr.readLine())!=null)[/align]
[align=left] {[/align]
[align=left] System.out.print(line);[/align]
[align=left] }[/align]
类 LineNumberReader extends BufferedReader
特有方法:int | getLineNumber() 获得当前行号。 |
void | setLineNumber(int lineNumber) 设置当前行号。 |
setLineNumber(int)更改行号。但要注意的是,
setLineNumber(int)不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。
下面模拟了这一过程
[align=left]import java.io.*;[/align]
class MyLineNumberReader
{
[align=left] private Reader r ;[/align]
[align=left] private int lineNumber ;[/align]
[align=left] MyLineNumberReader(Reader r) {[/align]
this.r =
r;
[align=left] }[/align]
public String
myReadLine() throws IOException
{
[align=left] lineNumber++;[/align]
[align=left] StringBuilder sb = new StringBuilder();[/align]
int ch
= 0;
while ((ch
= r .read()) != -1) {
if (ch
== '\r' )
[align=left] continue;[/align]
if (ch
== '\n' )
[align=left] return sb.toString();[/align]
[align=left] else[/align]
sb.append(( char)
ch);
[align=left] }[/align]
if (sb.length()
!= 0)
[align=left] return sb.toString();[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
public void setLineNumber(int lineNumber)
{
this.lineNumber =
lineNumber;
[align=left] }[/align]
public int getLineNumber()
{
[align=left] return lineNumber ;[/align]
[align=left] }[/align]
public void myClose() throws IOException
{
[align=left] r.close();[/align]
[align=left] }[/align]
[align=left]}[/align]
public class Ts
{
public static void main(String[]
args) throws IOException {
[align=left] FileReader fr = new FileReader("copyTextByBuf.java" );[/align]
[align=left] MyLineNumberReader mylnr = new MyLineNumberReader(fr);[/align]
[align=left] String line = null;[/align]
[align=left] mylnr.setLineNumber(100);[/align]
while ((line
= mylnr.myReadLine()) != null)
{
System. out.println(mylnr.getLineNumber()
+ "::" + line);
[align=left] }[/align]
[align=left] mylnr.myClose();[/align]
[align=left] }[/align]
[align=left]}[/align]
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
相关文章推荐
- 黑马程序员:Java基础总结----字符字节转换流&system.in&out
- 黑马程序员:Java基础总结----递归的应用&File流的应用
- 黑马程序员:Java基础总结----GUI&网络&IO综合开发
- 黑马程序员——java基础知识篇——>异常总结
- 黑马程序员:Java基础总结----多线程安全性&同步
- 黑马程序员:Java基础总结----接口 Collection<E>&iterator
- JAVA基础再回首(二十二)——转换流概述及用法、简化写法FileWriter和 FileReader、字符缓冲流及特殊用法、字节流字符流复制文件方法总结
- 黑马程序员:Java基础总结----子接口 List<E>及其实现类
- 黑马程序员-7-java-IO流知识点串讲(1)-IO流概念及字符流Writer、Reader
- 黑马程序员:Java基础总结----编码&解码流
- 黑马程序员:Java基础总结----多线程安全性&同步
- Java基础知识IO流(BufferedWriter&BufferedReader)
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- 黑马程序员:Java基础总结----子接口 set<E>及其实现类
- 黑马程序员 java基础IO FileReader FileWriter
- JAVA学习笔记(三十二)- 字符流 FileReader & FileWriter
- 【Java.IO】I/O 字节 <-> 字符转换流 —— InputStreamReader,OutputStreamWriter(FileReader,FileWriter)
- 黑马程序员:Java基础总结----继承&抽象&接口
- Java——InputStreamReader&OutputStreamWriter字符流实现文本文件复制