Java笔记 字符流

Java笔记 字符流

1.  OutputStreamWriter类

构造方法

 

构建流对象

FileOutputStream fileOutput = new FileOutputStream("TestIO\\demo04.txt");

OutputStreamWriter writer = new OutputStreamWriter(fileOutput,"GBK");

方法的调用

writer.write("我是一个好人");

                     writer.write(new char[] {'的','额'});

                     writer.flush();

想要在程序结束前将缓冲区里的数据写入磁盘,除了填满缓冲区或关闭输出流外,还可以主动调用flush()方法。

2.  InputStreamReader类

构造方法

 

构建流对象

InputStreamReader reader = new InputStreamReader(new FileInputStream("TestIO\\demo04.txt"),"GBK");

System.out.println((char)reader.read());//read()返回的是一个int类型的字节

                     char[] data = new char[1024];

                     int length = reader.read(data); // read(data)返回的是所读字节数

                     System.out.println(new String(data,0,length));

3.  FileReader类

FileReader是InputStreamReader的子类,重写了构造方法,其他方法基本没变

构造方法

 

构建流对象

FileReader writer = new FileReader(TestIO\\demo04.txt");

4.  FileWriter类

FileWriter是OutputStreamWriter的子类,重写了构造方法,其他方法基本没变

构造方法

 

构造流对象

FileWriter reader = new FileWriter("TestIO\\demo04.txt");

5.  BufferedWriter

使用缓冲流,可提高字符流处理的效率

构造方法

 

构建流对象

BufferedWriter  writer = new BufferedWriter(new FileWriter("TestIO\\demo05.txt"));

方法的调用

writer.write("www.sikiedu.com是一个很...的网站",0,3);

                    

              writer.flush();

6.  BufferedReader

构造方法

 

构建流对象

BufferedReader  reader = new BufferedReader(new FileReader("TestIO\\demo04.txt"));方法的调用

           System.out.println((char)reader.read());

                    

              char[] data = new char[1024];

              reader.read(data);

              System.out.println(new String(data));

7.  练习,运用字符流进行复制

导入包:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

测试方法:

public class Demo13_Practice {
@Test
public void testCopy() {
long start = System.currentTimeMillis();//记录法一开始复制的时间
copyByChar("TestIO\\demo04.txt", "TestIO\\demo05.txt");//调用法一复制
System.out.println(System.currentTimeMillis()-start);//输出复制法一所用时间
start = System.currentTimeMillis();//记录法二开始复制的时间
copyByCharArray("TestIO\\demo04.txt", "TestIO\\demo06.txt");//调用法二复制
System.out.println(System.currentTimeMillis()-start);//输出复制法二所用时间
}

法一,使用read();方法一个字节一个字节复制,效率慢,该方法返回的是一个int类型的字节

public void copyByChar(String sourceName,String targetName) {
BufferedReader reader=null;

//声明流对象 放在try外部,以便在finally关闭流


BufferedWriter writer = null;

try {
reader = new BufferedReader(new FileReader(sourceName));

//构建流对象


writer = new BufferedWriter(new FileWriter(targetName));

int data = -1;
while( (data = reader.read())!=-1 ) {
writer.write(data);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer!=null)
writer.close();
} catch (IOException e) {

e.printStackTrace();
}
try {
if(reader!=null)
reader.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}

法二,使用read(byte[] b)方法进行字节数组复制,效率快,该方法返回的是所读字节数。


public void copyByCharArray(String sourceName,String targetName) {
BufferedReader reader=null;
BufferedWriter writer = null;

try {
reader = new BufferedReader(new FileReader(sourceName));
writer = new BufferedWriter(new FileWriter(targetName));

char[] data = new char[1024];
int length = -1;

while( (length = reader.read(data))!=-1 ) {
writer.write(data, 0, length);
}

writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer!=null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(reader!=null)
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值