笔记:文件晒选复制;

    //筛选文件:
    // 1. 匿名内部类
    // 2. lambda表达式
    // 3. 单独创建一个类去实现 FileFilter或者FilenameFilter接口

1.匿名内部类实现文件晒选

    public static void main(String[] args) {
        File directory = new File("D:\\idea工作区\\第二册\\13_io\\src\\file\\file");
        //new FilenameFilter接口时使用立即实现,即把此接口中的方法全部实现。这种叫做匿名内部类
        String[] fileNames = directory.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 实现筛选文件的规则: 找出大于500k的*.doc & *.docx的文件
                File testFile = new File(dir, name);
                return name.endsWith(".txt");
            }
        });
        for (String f : fileNames) {
            System.out.println(f);
        }
    }

2.箭头函数实现文件晒选

public static void main(String[] args) {
        File directory = new File("C:\\Users\\Administrator\\Desktop\\Learn");
        File[] files = directory.listFiles((dir , name ) -> {
            File testFile = new File(dir, name);
            return (testFile.length() > 2*1024) && ( name.endsWith(".txt"));
        });
        for (File f : files) {
            System.out.println(f.getName() + ", size:" + f.length());
        }
    }

3.单独创建一个类去实现 FileFilter或者FilenameFilter接口

1.建的类

package filefiler;
import java.io.File;
import java.io.FilenameFilter;
public class FileExtentionFilter implements FilenameFilter {
    //文件扩展名: txt, mp3
    private String extention;

    public FileExtentionFilter(String extention) {
        this.extention = extention;
    }
    /**
     * 筛选文件,被筛选目录中的每一个文件都会调用此方法
     */
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(this.extention);
    }
}

2.使用

    public static void main(String[] args) {
        File directory = new File("D:\\idea工作区\\第二册\\13_io\\src\\file\\file");
        //返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
        File[] files = directory.listFiles(new FileExtentionFilter(".java"));
        for (File file : files) {
            System.out.println(file);
        }
    }

4.实现文件复制

第三种方式实现文件复制;

package filefiler;
import java.io.*;
public class TypeFileCopy {
    public static void main(String[] args) {
        //资源文件地址
        File dir = new File("e:\\mp3");
        //晒选java文件
        File[] txtFiles = dir.listFiles(new FileExtentionFilter(".java"));
        //写出地址
        File txtOutDir = new File("e:\\text");
        if (!txtOutDir.exists()) {
            // 目录不存在则创建
            txtOutDir.mkdirs();
        }
        // 遍历每个要写出去的文件
        for (File txtFile : txtFiles) {
            // 写出的文件
            File outFile = new File(txtOutDir, txtFile.getName());
            try (BufferedReader br = new BufferedReader(new FileReader(txtFile));
                 // 读源文件
                 BufferedWriter bw = new BufferedWriter(new FileWriter(outFile))  
                 // 写目标文件
            ) {
                String line = null;
                while ((line=br.readLine()) != null) {
                    bw.write(line);
                    bw.newLine();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        

    }
}

5.图片复制

    public static void main(String[] args) {
        //创建输入输出字节流
        try (FileInputStream fileInputStream = new FileInputStream("E:\\a1.jpg");
             FileOutputStream fileOutputStream = new FileOutputStream("E:\\aaa.jpg")
        ) {
            //创建缓冲区
            byte[] bytes = new byte[1024 * 10];
            int len = -1;
            while ((len=fileInputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,len);
            }
        } catch (IOException e) {
        }
    }

6.mp3截取

public static void main(String[] args) {
        //截取MP3音乐
        try (FileInputStream fileInputStream = new FileInputStream("E:\\123.mp3");
             FileOutputStream fileOutputStream = new FileOutputStream("E:\\音乐.mp3");
        ) {
            //10秒长的MP3文件
            byte[] bytes = new byte[409600];
            //跳过n个字节
            fileInputStream.skip(409600);
            //写进缓冲区
            fileInputStream.read(bytes);
            //写出到文件
            fileOutputStream.write(bytes);
        } catch (IOException e) {
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值