zoukankan      html  css  js  c++  java
  • 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();
        }
    
    }
  • 相关阅读:
    处理了一个“服务器能ping得通,但telnet连接失败”导致数据库登录不了的问题
    解决了一个oracle登录缓慢的问题
    今天解决了一个mysql远程登录和本机ip登录都失败的问题
    c++笔记
    c语言笔记
    常见并发与系统设计
    linux网络IO笔记
    linux文件IO全景解析
    linux网络协议笔记
    长大后才懂的蜡笔小新 ​​​​
  • 原文地址:https://www.cnblogs.com/nayitian/p/2866713.html
Copyright © 2011-2022 走看看