您的位置:首页 > 职场人生

黑马程序员:Java基础总结----字符流Reader&Writer

2013-07-02 19:31 513 查看
黑马程序员:Java基础总结

字符流Reader&Writer

ASP.Net+Android+IO开发.Net培训、期待与您交流!

字符流

字符流两个基类:

ReaderWriter

类Writer 方法

Writer
append(char c)


将指定字符添加到此 writer。
abstractvoid
close()


关闭此流,但要先刷新它。
abstractvoid
flush()


刷新该流的缓冲。
void
write(String str)


写入字符串。
[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]

类 FileWriter

FileWriter(String fileName, boolean append)


根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
FileWriter(File file, boolean append)


根据给定的 File 对象构造一个 FileWriter 对象。
[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]

类 BufferedWriter

BufferedWriter(Writer out)


创建一个使用默认大小输出缓冲区的缓冲字符输出流。
缓冲区的出现是为了提高流的操作效率而出现的。

所以在创建缓冲区之前,必须要先有流对象。

该缓冲区中提供了一个跨平台的换行符。

newLine();

void
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]

类 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] 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]

类 LineNumberReader extends BufferedReader

特有方法:

int
getLineNumber()


获得当前行号。
void
setLineNumber(int lineNumber)


设置当前行号。
默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用
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培训、期待与您交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐