java的文件流练习

java的文件流练习

拷贝文件

1.  题目:指定一个路径,把路径下的txt文件进行拷贝粘贴到一个新的路径
import java.io.File;
import java.io.FileFilter;

public class Exercise03 {
    public static void main(String[] args) {
        method01();
    }

    /**
     * 指定一个路径,把路径下的txt文件进行拷贝
     * 粘贴到一个新的路径
     */
    public static void method01(){
        String str="F:/file2/100txt";
        File f=new File(str);

        File fa[]=f.listFiles();
        for (File f1:fa){
            boolean b=f1.isFile();
//            System.out.println((b?"文件":"路径")+"文件名:"+f1.getName()+",父路径:"+f1.getParent());

        }
        File[] fs=f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                String regex=".+\\.txt";
                return pathname.isFile()&&pathname.getName().matches(regex);
            }
        });
        createFile(fs);
    }

    public static void createFile(File[] fs){
        String path="F:/file3";
        File f=new File(path);
        if(!f.exists()){
            f.mkdirs();
            System.out.println("文件创建成功!");
        }

        try {
            boolean b;
            for(File f1:fs)
            {
                File f2=new File(f,f1.getName());
                b=f2.createNewFile();
                if (b){
                    System.out.println(f2.getName());

                }

            }
        }catch (Exception e){e.printStackTrace();}
    }
}

移动文件

 2.题目
 分别输入两个路径pa,pb 把pa路径的文件(子路径),都移动到pb中(这里是移动不是拷贝),文
 本文件(txt)使用字符流,其他文件使用字节流来实现 ,注意如果pa==pb不能执行, 也不能移
 动到pa的子目录下
    public static void method(){
        String pa="F:"+File.separator+"file4"+File.separator+"pa";
        String pb="F:"+File.separator+"file4"+File.separator+"pb";
        if (pa.equals(pb)){
            return;
        }

        if(pb.toUpperCase().startsWith(pa.toLowerCase())){
            System.out.println("不能移动到子目录下");
            return;
        }

        File fa = new File(pa);
        File fb = new File(pb);
        FileUtil.createDir(fb);

        copyAndPaste(fa,fb);

    }

    public static void copyAndPaste(File fa,File fb){
        if (fa.isDirectory()&& fb.isDirectory()){
            File[] f1=fa.listFiles();
            for (File file1:f1){
                String fileName=file1.getName();
                if (file1.isDirectory()){
                    File file2=new File(fb,fileName);
                    FileUtil.createDir(file2);
                    copyAndPaste(file1,file2);
                }else {
                    File file22 = new File(fb,fileName);
                    FileUtil.createFile(file22);
                    String regex=".+\\.((java)|(html)|(txt)|(jsp))";
                    if (fileName.matches(regex))FileUtil.fileReaderAndWriter(file1,file22);
                    else FileUtil.fileInputAndOutput(file1,file22);
                }
                file1.delete();
            }
        }
        fa.delete();
    }

删除文件

题目:指定一个路径实现把该路径下的txt文件删除, 如果该路径下已经没有文件,也要删除该路径,
 如果还有其他路径则不删除该路径
public static void method02(File f){
        if (f.isDirectory()){
            //把txt文件进行过滤
            File[] f1=f.listFiles(new FileFilter() {
                @Override
                public boolean accept(File f) {
                    String regex=".+\\.txt";

                    return f.getName().matches(regex)||f.isDirectory();
                }
            });
            if (f1.length==0){
                System.out.println(f.getName()+"是一个路径");
                f.delete();
            }
            for(File f2:f1){
                method02(f2);

        }
        }else {
            System.out.println(f.getName()+"是一个文件");
            String regex=".+\\.txt";
            f.delete();
        }
    }

复制粘贴产生副本问题

题目:指定一个路径实现对该路径的文件复制粘贴3次,每完成一次粘贴就随机删除该路径的(n>2)
个文件,如果文件的名称出现; 重复则自动添加副本,若“副本"名字已经存在则给名字添加序号,
如“副本(2)”且数字必须连续
    public static void method04(){
        try {
            String str="F:/file";
            File f=new File(str);
            System.out.println("开始执行。。。。");
            findFiles(f);
            System.out.println("执行完成。。。。");
        }catch (Exception e){e.printStackTrace();}

    }

    public static void findFiles(File file) throws Exception{
        if (file.isDirectory()){
            File[] files=file.listFiles();
            for(File file1:files){
                findFiles(file1);
            }
        }else {
            String newFileName = FileUtil.createFileName(file);
            File file2 = new File(file.getParent(),newFileName);
            FileUtil.createFile(file2);
            Thread.sleep(100);
        }

    }
    /**
     * 创建文件
     * @param f
     * @return
     */
    public static boolean createFile(File f){
        boolean b = false;
        try {
            if (!f.exists()){
                b = f.createNewFile();
            }else {
                b = true;
            }
        }catch (IOException e){
            b = false;
            System.out.println("路径出错或不存在!");
        }
        return b;
    }

    /**
     * 生成带副本的文件的名称
     * @param f
     */
    public static String createFileName(File f){
        if(f.isDirectory()){
            return f.getName();
        }
        String newFileName = "";
        int i = 0;
        while (true){
            String fileName = f.getName();
            int index = fileName.lastIndexOf(".");
            String suffix = fileName.substring(index);
            String prefix = fileName.substring(0,index);
            if(i == 0){
                prefix += "-副本";
            }else {
                prefix += "-副本(" + (i+1) +")";
            }

            newFileName = prefix + suffix;
            File f1 = new File(f.getParent(),newFileName);
            if (f1.exists()){
                i++;
                continue;
            }
            break;
        }
        return newFileName;
    }

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值