IO流综合实例(文件复制的相关操作)

本文通过具体案例介绍了Java中IO流的基本操作,包括文件的创建、数据的读写及复制等过程。重点演示了如何利用字符缓冲流进行高效的数据处理,并展示了如何实现文件内容的指定位置插入。

   
   案例:分别在D盘、F盘下创建目录aa、bb,并且在aa,bb目录下分别创建a.txt、b.txt两个文件,往这两个文件中写入数据,然后将两个文件复制到E盘中,并且将E盘中的b.txt里边的内容复制到a.txt文件内容指定偏移量为5处。
   分析:1.首先要创建目录aa、bb,和原始文件a.txt和b.txt。
      2.写入数据和复制文件两个方法。
      3.写入数据 字符高级缓冲流(自动刷新)println ,此时a.txt和b.txt有内容了。
      4.复制文件的过程是先创建E盘下a.txt和b.txt两个文件,再往里复制内容,此时E盘的两个文件都复制成功。
      5.插入数据,把b内容插入a里。
   注意:1.换行符的问题。2.File[i]数组建立。3.临时文件的创建。
   
   

案例复习了IO流中的字符高级缓冲流、随机访问流中对象的创建,构造方法、有关方法的在文件操作的使用
对文件读取、写入、复制基本操作,临时文件的创建

package zonghe_IO流总结;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;



public class IoStreamDemo {

    public static void main(String[] args) {
        IoStreamDemo file = new IoStreamDemo();
        file.createFiles();
    }

    /*
     * 创建文件
     */
    private void createFiles(){
        File file = new File("d:\\aa");
        File file0 =new File("f:\\bb");
        file.mkdir();//创建目录aa
        file0.mkdir();//创建目录bb
        File file1 = new File(file,"a.txt");
        File file2 = new File(file0,"b.txt");
        try {
            file1.createNewFile();//创建目录aa下的文件a.txt
            file2.createNewFile();//创建目录bb下的文件b.txt
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        write(file1,file2);//写入数据
        copy(file1,file2);//复制文件
    }

    /*
     * 复制文件
     */
    private void copy(File file1, File file2) {
        //e盘创建目录,和文件ee.txt
        File file = new File("e:"+File.separator+"ee");
        file.mkdir();//创建目录ee

        File file3 = new File(file,"a.txt");//在目录ee下创建文件a.txt
        File file4 = new File(file,"b.txt");//在目录ee下创建文件b.txt

        try {
            file3.createNewFile();
            file4.createNewFile();
            //到此为止已经有了4个文件了,还没有复制
            File[] files =new File[4];
            files[0]=file1;
            files[1]=file2;
            files[2]=file3;
            files[3]=file4;
            //分别往e盘复制a.txt 和b.txt两个文件
            for(int i=0;i<2;i++){
                copyAll(files[i],files[i+2]);
            }
            // 此时e盘里边有了a.txt 和b.txt 两个文件  插入数据 
            insert(file3,file4);

        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }

    /*
     * 插入数据 
     *   把b.txt插入到a.txt
     */
    private void insert(File file3, File file4) {
        try {
            RandomAccessFile raf1 = new RandomAccessFile(file3, "rw");
            File tmpFile = File.createTempFile("raf", ".tmp");//创建临时文件
            RandomAccessFile raf2 = new RandomAccessFile(tmpFile, "rw");
            RandomAccessFile raf3 = new RandomAccessFile(file4, "rw");
            //将raf1的偏移量移到5,在把后面的内容复制到tmpFile
            raf1.seek(5);
            byte[] bys = new byte[1024];
            int len =0;
            while((len=raf1.read(bys))>0){
                raf2.write(bys, 0, len);
            }
            //raf1的偏移量重移至5
            raf1.seek(5);
            len =0;
            while((len=raf3.read(bys))>0){
                raf1.write(bys, 0, len);
            }

            //raf2的偏移量至回0
            raf2.seek(0);
            len=0;
            while((len=raf2.read(bys))>0){
                raf1.write(bys, 0, len);
            }
            //删除临时文件tmpFile
            tmpFile.deleteOnExit();
            //释放资源
            raf1.close();
            raf2.close();
            raf3.close();
        } catch (FileNotFoundException e) {  //抛异常
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /*
     * 执行复制
     * 复制文件d盘复制到e
     */
    private void copyAll(File string, File string2) {

        try {
            //创建对象流,读、写流
            BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(string)));//字符缓冲输入流,读数据
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(string2)),true);//高级字符缓冲输出流,写数据,可以自动刷新

            //复制文件,先读后写
            String str =null;
            while((str=br.readLine())!=null){
                pw.println(str);
            }
            //释放资源
            br.close();
            pw.close();
        } catch (FileNotFoundException e) {
            System.out.println("该文件未找到");
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /*
     * 写入数据
     */
    private void write(File file1, File file2) {
        //写数据到a.txt
        try {
            //创建字符高级缓冲流
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file1)),true);//构造方法可以自动启动刷新功能
            String[] strs = new String[1];
            for(int i=0;i<1;i++){
                strs[i]="abcdefghijklmnopqrstuvwxyz";
                pw.println(strs[i]);//往a.txt循环写入数据
            }

            PrintWriter pw0 = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file2)),true);
            String str="ABC";
            pw0.print(str);//往b.txt文件里写入数据

            //释放资源
            pw.close();
            pw0.close();
        } catch (FileNotFoundException e) {
            System.out.println("该文件未找到");
            e.printStackTrace();
        }


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值