zoukankan      html  css  js  c++  java
  • Java课程作业之动手动脑(六)

    1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件。

    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.FileVisitOption;
    import java.nio.file.FileVisitResult;
    import java.nio.file.FileVisitor;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.PathMatcher;
    import java.nio.file.Paths;
    import java.nio.file.attribute.BasicFileAttributes;
    import java.util.EnumSet;
    public class Search implements FileVisitor {
     private final PathMatcher matcher;
     private final long accepted_size;
     public Search(String glob,long accepted_size) {
          matcher= FileSystems.getDefault().getPathMatcher("glob:" +glob);
          this.accepted_size=accepted_size; 
        }
       void search(Path file) throws IOException {
        long size = (Long) Files.getAttribute(file, "basic:size");
        if(size ==accepted_size) {
         System.out.println(file);
        }
       }
       @Override
       public FileVisitResult postVisitDirectory(Object dir, IOException exc)throws IOException {
        return FileVisitResult.CONTINUE;
       }
       @Override
       public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)throws IOException {
        return FileVisitResult.CONTINUE;
       }
       @Override
       public FileVisitResult visitFile(Object file, BasicFileAttributes attrs)throws IOException {
      search((Path) file);
         return  FileVisitResult.CONTINUE;
      }
       @Override
       public FileVisitResult visitFileFailed(Object file, IOException exc)throws IOException {
      return FileVisitResult.CONTINUE;
       }
       public static void main(String[] args) throws IOException{
        String glob= "*.jpg";
        long size = 1048576;//1M=1024k=1048576字节
        Path fileTree = Paths.get("C:/");
        Search walk=new Search(glob, size);
        EnumSet opts=EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        System.out.println("C盘中大小等于1M的文件有");
        Files.walkFileTree(fileTree, opts, Integer.MAX_VALUE, walk);
       }
    }

    2.使用Files. walkFileTree()找出指定文件夹下所有扩展名为.txt和.java的文件。

    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.FileVisitResult;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.PathMatcher;
    import java.nio.file.Paths;
    import java.nio.file.SimpleFileVisitor;
    import java.nio.file.attribute.BasicFileAttributes;
    
    public class FileGlobNIO {
    
        public static void main(String args[]) throws IOException {
            String glob = "glob:**/*.{java,txt}";
            String path = "C:/";
            match(glob, path);
        }
    
        public static void match(String glob, String location) throws IOException {
    
            final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher( glob);
    
            Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
    
                @Override
                public FileVisitResult visitFile(Path path,
                        BasicFileAttributes attrs) throws IOException {
                    if (pathMatcher.matches(path)) {
                        System.out.println(path);
                    }
                    return FileVisitResult.CONTINUE;
                }
    
                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc)
                        throws IOException {
                    return FileVisitResult.CONTINUE;
                }
            });
        }
    
    }

    3.使用Files. walkFileTree()找出指定文件夹下所有包容指定字符串的txt文件。

    import java.io.IOException;
    import java.io.*;
    import java.nio.file.FileSystems;
    import java.nio.file.FileVisitResult;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.PathMatcher;
    import java.nio.file.Paths;
    import java.nio.file.SimpleFileVisitor;
    import java.nio.file.attribute.BasicFileAttributes;
    
    public class FileGlobNIO {
    
        public static void main(String args[]) throws IOException {
            String glob = "glob:**/*.txt";
            String path = "C:/";
            match(glob, path);
        }
    
        public static void match(String glob, String location) throws IOException {
    
            final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher( glob);
    
            Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
    
                @Override
                public FileVisitResult visitFile(Path path,
                        BasicFileAttributes attrs) throws IOException {
                    if (pathMatcher.matches(path)) {
                     BufferedReader reader =Files.newBufferedReader(path);//读取文件内的内容 
                      String line=null;
                      while((line = reader.readLine()) !=null) {
                       if(line=="asdfghjkl")//若读取的内容等于“asdfghjkl"则输出文件名
                       {
                             System.out.println(path);
                             break;
                       }
                      }
                    }
                      return FileVisitResult.CONTINUE;
                }
    
                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc)
                        throws IOException {
                    return FileVisitResult.CONTINUE;
                }
            });
        }
    
    }

    4.请通过查询JDK文件和使用搜索引擎等方式,看懂此示例代码,并弄明白Watchable、WatchService等类型之间的关系,使用UML类图表示出这些类之间的关系。

    java.nio.file.WatchService文件系统监视服务的接口类,它的具体实现由监视服务提供者负责加载。

          java.nio.file.Watchable 实现了 java.nio.file.Watchable 的对象才能注册监视服务 WatchService。java.nio.file.Path实现了 watchable 接口,后文使用 Path 对象注册监视服务。

          java.nio.file.WatchKey 该类代表着 Watchable 对象和监视服务 WatchService 的注册关系。WatchKey 在 Watchable 对象向 WatchService 注册的时候被创建。它是 Watchable 和 WatchService 之间的关联类。

    实现文件变更监视服务步骤:

    创建 WatchService 的一个实例变量 "watcher"。

    1).创建 WatchService 的一个实例变量 "watcher"。

    2).使用 watcher 注册每一个想要监视的目录。注册目录到监视服务时,需要指定想要接收文件更改通知的事件类型。注册目录会返回一个 WatchKey 实例 key。

    3).执行一个无限循环来监控要到来的事件。当一个事件发生时,对实例 key 发出信号通知并且将它放到 watcher 的队列中。

    4).从 watcher 的队列中重新得到 key 实例。Key 实例包含发生变更的文件名。

    5).从 key 实例中得到挂起的事件,然后根据需要对这些事件进行处理。

    6).重置 key 实例并重新开始监控事件。

    7).监控完毕,关掉监视服务。

    5.编写一个程序,指定一个文件夹,能自动计算出其总容量。

    import java.io.File;
    import java.util.ArrayList;
     
    public class Size {
       static long size=0;
     private static ArrayList<String> filelist=new ArrayList<String>();
     public static void main(String[] args) {
      Size s=new Size();
      String filePath="D:\java";
      s.getFiles(filePath);
      
     }
     //通过递归得到某一路径下所有的目录及文件
     void getFiles(String filePath) {
      
      File root=new File(filePath);
      File[] files=root.listFiles();
      for(File file:files) {
       if(file.isDirectory()) {
        getFiles(file.getAbsolutePath());
        filelist.add(file.getAbsolutePath());
        
       }
       else {
        size+=file.getAbsolutePath().length();
       }
      }
      System.out.println("大小是"+size);
    
      
     }
       
    }
  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/zwang/p/9979836.html
Copyright © 2011-2022 走看看