毕老师将的很清楚了。
和字符流与字节流没关系。
一般数据IO操作要使用InputStream OutputStream(字节流)和Reader Writer(字节流)。
以将文本文件读到控制台为例(使用字符流):
当不用提高效率时,直接使用FileReader和FileWriter,这时由于,读和写文件时需要用到read和writer方法,其中read(char[] cbuf)是指将字符读入数组,当读到结尾时返回-1,所以说这里就出现了While循环里的-1;
代码如下:
- package io1;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- /**
- * 通过FileReader将b.txt文件中的内容读到控制台上
- *
- * @author BigKarel
- *
- */
- public class FileReaderT {
- public static void main(String[] args) {
- FileReader fr = null;
- try {
- fr = new FileReader("E:/b.txt");
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- // 定义一个字符数组存储读到的字符 char通常定义为1024的整数倍
- char[] buf = new char[1024];
- int ch = -1;// 读到结尾后返回-1;
- try {
- while ((ch = fr.read(buf)) > -1) {// 进行判断当没读到结尾时继续读取,一次读取的最大长度为ch
- System.out.println(new String(buf, 0, ch));
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fr.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
复制代码
当需要提高效率时就会用到BufferedInputStream, BufferedOutputStream,BufferedReader,BufferedWriter。
这里这些增强功能的装饰类有了一个新的方法叫readLine(),这个方法一次读取一行文本信息,返回值为字符串,当读完后,也就是读不到内容了自然返回值就是Null字符串了,这时就有了循环条件!=null
以复制文本文件为例:
- package cn.it.zifuliu;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- public class CopyTxt {
- public static void main(String[] args) {
- BufferedReader br = null;
- BufferedWriter bw = null;
- try {
- br = new BufferedReader(new FileReader("C:/copy.txt"));
- bw = new BufferedWriter(new FileWriter("D:/copy2.txt"));
- String str = null;
- //当读到结尾时没有内容可读也就返回null
- while ((str = br.readLine()) != null) {
- bw.write(str);
- bw.newLine();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (bw != null) {
- try {
- bw.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
复制代码 |