• Java:IO/NIO篇,利用NIO遍历目录示范(示范:有选择地从光盘拷贝文件)


    1. 问题

    买了本《Android开发实战经典》书,附带光盘中有很多视频等内容,居然有两张DVD那么大,我想把光盘中的源代码部分拷贝到硬盘中,这样查看方便,但忽略某些文件(如:视频,过大的文件等)。

    2. 解决

    写了如下程序,功能就是将光盘目录完整拷贝到硬盘指定目录,但忽略某些文件(如:视频,过大的文件等)。

    package com.clzhang.sample.nio;
    
    import java.io.*;
    import java.nio.file.*;
    import java.nio.file.attribute.*;
    
    /**
     * 将整个光盘的内容拷贝到硬盘指定目录中,忽略某些文件(视频、可执行文件等)
     * 
     * @author acer
     * 
     */
    public class CopyFilesFromCD {
        private String srcDrive = "E:";
        private String destDirRoot = "D:\\MyDocuments\\Study\\android\\";
    
        public void process() throws Exception {
    
            // 遍历CD目录下的所有文件和子目录
            Files.walkFileTree(Paths.get(srcDrive), new SimpleFileVisitor<Path>() {
                // 访问文件时候触发该方法
                @Override
                public FileVisitResult visitFile(Path file,
                        BasicFileAttributes attrs) throws IOException {
                    String srcFile = file.toString().substring(2);
                    
                    // 忽略可执行文件、视频及特定的文件
                    if (srcFile.endsWith(".exe") || srcFile.endsWith(".wmv")
                            || srcFile.contains("[讲师 MLDN李兴华]")) {
                        System.out.println("忽略:" + file);
                    } else {
                        // 拷贝
                        System.out.println("正在拷贝:" + file);
                        String destFile = destDirRoot + srcFile;
    
                        // 是否需要程序手工关闭输出流?
                        FileOutputStream fout = new FileOutputStream(destFile);
                        Files.copy(file, fout);
                        fout.close();
                        
                        //Files.copy(file, new FileOutputStream(destFile));
    
                    }
                    
                    return FileVisitResult.CONTINUE;
                }
    
                // 开始访问目录时触发该方法
                @Override
                public FileVisitResult preVisitDirectory(Path dir,
                        BasicFileAttributes attrs) throws IOException {
                    // 创建目标路径,存在与否不管
                    String srcDir = dir.toString().substring(2);
                    String destDir = destDirRoot + srcDir;
                    File file = new File(destDir);
                    if (!file.exists()) {
                        file.mkdirs();
                    }
    
                    return FileVisitResult.CONTINUE;
                }
            });
    
            System.out.println("拷贝结束!");
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            CopyFilesFromCD ins = new CopyFilesFromCD();
            ins.process();
        }
    
    }
  • 相关阅读:
    Python day 34 并发编程、PID/PPID、实现多进程得两种方式
    Python Day33:粘包问题及粘包解决方案
    数据分析
    数据分析
    爬虫 之 mongodb数据库
    爬虫
    爬虫
    爬虫
    flask框架
    flask框架
  • 原文地址:https://www.cnblogs.com/nayitian/p/2866713.html
Copyright © 2020-2023  润新知