IO流

IO基础一
一. IO流常用基类
1.字节流的抽象基类
InputStream,OutputStream
2.字符流的抽象基类
Reader,Writer
注:有这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。

字符流的特点:既然IO流是用于操作数据的,那么数据最常见体现形式是:文件。以文件来演示。
需求:(1)在硬盘上,创建一个文件并写入一些文字数据。代码如下:

package IODemo;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteDemo {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args)  {
        FileWriter fw=null;
        try {
            //创建读写入字符流对象,如果该目录下有重名的文件将被覆盖
            fw = new FileWriter("F:\\demo.txt");
            //写入的内容
            fw.write("asdfg");
            //一定记得刷新
            fw.flush();
        } catch (IOException e) {
            System.out.println(e.toString());
        }finally{
            try {
                //必须要记住关闭文件
                if(fw!=null)
                fw.close();
            } catch (IOException e) {
                System.out.println(e.toString());
            }
        }


    }

}

(2)写完文件续写示例:

package IODemo;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteDemo02 {

    /**
     * 文件的续写
     * @param args
     */
    public static void main(String[] args)  {
        FileWriter fw=null;
        try {
            //创建流对象,并表明为true,可以让文件续写
            fw = new FileWriter("F:\\demo.txt",true);
            //在widow里写需要加上\r表示换行
            fw.write("\r\n一生一世");
            //刷新数据存入到文件中
            fw.flush();
        } catch (IOException e) {
            System.out.println(e.toString());
        }finally{
            try {
                //关闭文件
                if(fw!=null)
                fw.close();
            } catch (IOException e) {
                System.out.println(e.toString());
            }
        }


    }

}

(3)读取文件示例:

package IODemo;

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

public class FileReaderDemo02{

    /**
     * 读文件方式一
     * @param args
     */
    public static void main(String[] args) {
        FileReader fr=null;
        try {
            //建字符流,判断是否存在,用try catch处理异常
             fr = new FileReader("F:\\demo.txt");
            while (true) {
                int ch=fr.read();
                if (!(ch==-1)) {
                    System.out.println("ch="+(char)ch);
                }
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if (fr!=null) {

                try {
                    fr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }

}

(4)第二种读取文件方式,用数组:

package IODemo;

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

public class FileReaderDemo03 {

    /**
     * 文件读第二种方式
     * @param args
     */
    public static void main(String[] args) {
         FileReader fr=null;
        //创建字符流读取文件
         try {
            fr = new FileReader("f:\\Demo.txt");
            //创建数组存储读取的文件
            char[] buf=new char[1024];
            int num=0;
            while ((num=fr.read(buf))!=-1) {
                System.out.print("buf="+new String(buf,0,num));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //判断是否有文件
            if (fr!=null) {
                try {
                    //关闭文件
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

(5)将E盘文件复制到F盘
复制的原理:其实就是将E盘文件存储到F盘文件中
步骤
①在F盘中创建一个文件,用于存储E盘文件中的数据
②定义读取流与E盘文件发生关联
③通过不断的读取完成数据存储
④关闭资源
代码如下:

package IODemo;

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

public class FileCopyDemo {

    /**
     * 复制文件
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //copy_1();
        copy_2();
    }
    //方法一:从E盘读取一个文件,复制到F盘
    public static void copy_1(){
        FileWriter fw=null;
        FileReader fr=null;
        try {
            //创建写入的目的地
            fw=new FileWriter("F:\\copy_1.txt");
            //读文件字符流
            fr=new FileReader("E:\\说.txt");
            int num=0;
            while (true) {
                if ((num=fr.read())!=-1) {
                    fw.write(num);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException("读写失败");
        }finally{
            if (fw!=null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (fr!=null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    //方法二:从E盘读取一个文件,复制到F盘
    public static void copy_2(){
        FileWriter fw=null;
        FileReader fr=null;
        try {
            //创建复制的目的地
            fw=new FileWriter("F:\\copy_2.txt");
            //创建读取字符流
            fr=new FileReader("E:\\说.txt");
            //创建存储读取文件的数组
            char[] buf=new char[1024];
            int num=0;
            while ((num=fr.read(buf))!=-1) {
                fw.write(buf, 0, num);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException("读写失败");
        }finally{

            if (fw!=null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (fr!=null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值