IO流综合案例

分析以下需求,并用代码实现

训练目标

​ 掌握java中字符流的基本使用,以及理解其在实际开发中的应用

需求描述

​ 编写一个程序,把一个目录里边的所有带.java文件拷贝到另一个目录中。

实现提示

  1. 用File对象封装目录
  2. 通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
  3. 遍历这个File数组,得到每一个File对象
  4. 判断该File对象是否是文件
    • 如果是文件
    • 继续判断是否以.java结尾
      • 是:复制文件
      • 否:不复制
        方法一
import org.junit.Test;

import java.io.*;
import java.util.ArrayList;

public class lx04 {
    public ArrayList<String> al = new ArrayList<>();
@Test
    public void test() throws IOException {
        File file = new File("D:\\project");
        name(file);
        for (String o : al) {
            File sourceFile = new File(o);
            if (sourceFile.exists()) {
                String name = sourceFile.getName();
                String targetPath = "D:\\java\\java\\" + name;
                try (InputStream is = new FileInputStream(sourceFile);
                     BufferedInputStream bis = new BufferedInputStream(is);
                     OutputStream os = new FileOutputStream(targetPath);
                     BufferedOutputStream bos = new BufferedOutputStream(os)) {
                    int c;
                    while ((c = bis.read())!= -1) {
                        bos.write((char) c);
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } else {
                System.out.println("源文件不存在:" + sourceFile.getAbsolutePath());
            }
        }
    }

    public void name(File file) {
        boolean directory = file.isDirectory();
        if (!directory) {
            String name = file.getName();
            if (name.length() > 5) {
                if (name.substring(name.length() - 5).equals(".java")){
                al.add(file.getAbsolutePath());
            }
            }
        } else {
            File[] files = file.listFiles();
            if (files!= null) {
                for (File f : files) {
                    name(f);
                }
            } else {
                System.out.println("目录为空:" + file.getAbsolutePath());
            }
        }
    }
}

方法二

 @Test
    public void test01() {
        File file = new File("D:\\qy178-course\\day0903");//查询的目录
        File file02 = new File("D:\\qy178-course\\bbbb");//目标目录
        test(file, file02);
    }

    private void test(File file, File target) {
        //判断目标目录是否存在。
        if (!target.exists()) {
            target.mkdirs();//创建目标目录
        }
        //判断传递的文件是否为目录
        boolean b = file.isDirectory();
        if(b){
            //获取指定目录下所有的子文件对象
            File[] files = file.listFiles();
            for(File f:files){
                test(f,target);
            }
        }else{
            //表示文件 并获取文件名称
            String name = file.getName();
            if(name.endsWith(".java")){//表示为java文件。
                //复制功能
                copy(file,new File(target.getPath()+"\\"+name)); //
            }
        }

    }

    private void copy(File file,File target){
        Reader reader= null;
        Writer writer= null;
        try {
            reader = new FileReader(file);
            writer = new FileWriter(target);
            int c;
            while ((c=reader.read())!=-1){
                writer.write(c);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                reader.close();
                writer.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }


    }

posted on 2024-09-06 16:15  小木不痞  阅读(6)  评论(0编辑  收藏  举报

导航