IO流

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中。

流按操作数据分为字节流和字符流,按流向分为输入流,输出流。

字节流的抽象基类:

InputStream和OutputStream

字符流的抽象基类:

Reader,Writer

注:这4个类派生出的子类名称都是以其父类名作为子类名的后缀。

IO流是用于操作数据的,数据的最常见体现形式是:文件。

需求:在硬盘上,创建一个文件并写入一些数据。

FileWriter

FileReader:

import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest {
    public static void main(String[] args)throws IOException {
        //创建一个文件读取流对象,和指定名称的文件相关联
        //要保证该文件已经存在,若不存在,会发生FileNotFoundException
        FileReader fr = new FileReader("demo.txt");
        //read():一次读一个字符,而且会自动往下读
        //范围在0~65535之间,如果已到达流的末尾,返回-1
        int ch = 0;
        while((ch=fr.read())!=-1){
            System.out.println("ch=" + (char) ch);
        }
        /*
        while(true) {
            int ch = fr.read();
            if(ch==-1)
                break;
            System.out.println("ch=" + (char) ch);
        }
        */
        fr.close();
    }

}
将C盘文件复制到D盘
step:
1.在D盘创建一个文件,用于存储
2定义读取流和C盘文件关联
3.通过不断的读写完成数据存储
4.关闭资源
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class CopyTest {
    public static void main(String[] args)throws IOException{
        copu_1();
    }
    //方法一:从C盘读一个字符,就往D盘写一个字符
    public static void copu_1()throws IOException {
        //创建目的地
        FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");
        //与已有文件关联
        FileReader fr = new FileReader("RuntimeDemo.txt");
        int ch=0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        fw.close();
        fr.close();


    }
    public static void copu_2(){
        //创建目的地
        FileWriter fw = null;
        //与已有文件关联
        FileReader fr = null;
        try{
            fw = new FileWriter("RuntimeDemo_copy.txt");
            //与已有文件关联
            fr = new FileReader("RuntimeDemo.txt");
            char[] buf = new char[1024];
            int len=0;
            while ((len=fr.read(buf))!=-1){
                fw.write(buf,0,len);//写入字符数组
            }
        }
        catch (IOException e){
            throw new RuntimeException("读写失败");
        }
        finally {
            if(fr!=null)
                try {
                fr.close();
                }
                catch (IOException e){

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

                }
        }

    }
}

文件复制图例:

字符流的缓冲区:

缓冲区的出现是为了提高了数据读写的效率。在创建缓冲区之前,必须先有流对象。

对应类:BufferedWriter

              BufferedReader

readLine()方法原理:最终使用的是read方法一次读一个

import java.io.*;

/*
通过缓冲区复制一个.java文件
 */
public class CopyTextByBuf {
    public static void main(String[] args){
        BufferedReader bufr = null;
        BufferedWriter bufw = null;
        try {
            bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));
            bufw = new BufferedWriter(new FileWriter("bufWriter_copy.txt"));
            String line=null;
            while( (line=bufr.readLine())!=null){
                bufw.write(line);
                bufw.newLine();//换行
                bufw.flush();
            }
        }
        catch (IOException e){
            throw new RuntimeException("读写失败");
        }
        finally {
            try{
                if(bufr!=null)
                    bufr.close();
            }
            catch (IOException e){
                throw new RuntimeException("读取关闭失败");
            }
            try{
                if(bufw!=null)
                    bufw.close();
            }
            catch (IOException e){
                throw new RuntimeException("写入关闭失败");
            }
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值