zoukankan      html  css  js  c++  java
  • 课堂测试06——课后作业

    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);
        }
       }
       public FileVisitResult postVisitDirectory(Object dir, IOException exc)throws IOException {
        return FileVisitResult.CONTINUE;
       }
       public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)throws IOException {
        return FileVisitResult.CONTINUE;
       }
       public FileVisitResult visitFile(Object file, BasicFileAttributes attrs)throws IOException {
      search((Path) file);
         return  FileVisitResult.CONTINUE;
      }
       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;
        Path fileTree = Paths.get("F:/");
        Search walk=new Search(glob, size);
        EnumSet opts=EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        System.out.println("F盘中大小等于1M的文件有");
        Files.walkFileTree(fileTree, opts, Integer.MAX_VALUE, walk);
       }
    }

    使用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 Search {
    
        public static void main(String args[]) throws IOException {
            String glob = "glob:**/*.{java,txt}";
            String path = "F:/";
            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 Search {
    
        public static void main(String args[]) throws IOException {
            String glob = "glob:**/*.txt";
            String path = "F:/";
            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=="student")//若读取的内容等于“student"则输出文件名
                       {
                             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 之间的关联类。

    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 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);
        }
        public static void main(String[] args) 
        {
            Size s=new Size();
            String filePath="F:\\Program Files";
            s.getFiles(filePath);
        }
    
    }

    编写一个文件加解密程序,通过命令行完成加解密工作

    mport java.io.File;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    public class Secret {
        private static final int numOfEncAndDec=0x99;//加密解密密钥
         private static int dataOfFile=0;//文件字节内容
    
         public static void main(String[] args) {
          File srcFile=new File("a.txt");//初始化文件
          File encFile=new File("b.txt"); //加密文件
          File decFile=new File("c.txt");  //解密文件
          
          try {
           EncFile(srcFile,encFile);  //加密操作
           DecFile(encFile,decFile);
          }catch(Exception e) {
           e.printStackTrace();
          }
         }
         private static void EncFile(File srcFile,File encFile)throws Exception{
          if(!srcFile.exists()) {
           System.out.println("source file not exixt");
           }
          if(!encFile.exists()) {
           System.out.println("encrypt file created");
           encFile.createNewFile();//若无加密文件,新建一个加密文件
          }
          InputStream fis=new FileInputStream(srcFile);
          OutputStream fos=new FileOutputStream(encFile);
          
          while((dataOfFile=fis.read())>-1) {//当读到文件内容时
           fos.write(dataOfFile^numOfEncAndDec);//将读出的内容加密后写入
          }
          fis.close();
          fos.flush();
          fos.close();
         }
         private static void DecFile(File encFile,File decFile)throws Exception{
          if(!encFile.exists()) {
           System.out.println("encrypt file not exixt");
          }
          if(!decFile.exists()) {
           System.out.println("decrypt file created");
           decFile.createNewFile();
          }
          InputStream fis=new FileInputStream(encFile);
          OutputStream fos=new FileOutputStream(decFile);
          
          while((dataOfFile=fis.read())>-1) {
           fos.write(dataOfFile^numOfEncAndDec);
          }
          fis.close();
          fos.flush();
          fos.close();
         }
    
    }

    7.编写一个文件分割工具,能把一个大文件分割成多个小的文件。并且能再次把它们合并起来得到完整的文件。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class Wenjian {
        private static void cutFile(String src, String endsrc, int num) {
            FileInputStream fis = null;
            File file = null;
            try {
                fis = new FileInputStream(src);
                file = new File(src);
                //创建规定大小的byte数组
                byte[] b = new byte[num];
                int len = 0;
                //name为以后的小文件命名做准备
                int name = 1;
                //遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
                while ((len = fis.read(b)) != -1) {
                    //分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备
                    String name2 = file.getName();
                    int lastIndexOf = name2.lastIndexOf(".");
                    String substring = name2.substring(0, lastIndexOf);
                    String substring2 = name2.substring(lastIndexOf, name2.length());
                    FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
                    //将byte数组写入对应的小文件中
                    fos.write(b, 0, len);
                    //结束资源
                    fos.close();
                    name++;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (fis != null) {
                        //结束资源
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        private static void togetherFile(String src, String endsrc){
            FileOutputStream fos = null;
            File file1 = null;
            File file2 = null;
            try {
                file1 = new File(endsrc);
                file2 = new File(src);
                //获得大文件的存储路径的FileOutputStream对象
                fos = new FileOutputStream(endsrc);
                //循环遍历对应文件夹中的所有小文件
                for(File file : file2.listFiles()){
    
                    FileInputStream fis = new FileInputStream(file.getAbsolutePath());
    
                    byte[] b = new byte[1024*1024];
                    int len = 0;
                    //将小文件读入byte数组,之后再将byte数组写入大文件中
                    while((len = fis.read(b)) != -1){
                        fos.write(b, 0, len);
                    }
                    //结束资源
                    fis.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    if(fos != null){
                        //结束资源
                        fos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
            public static void main(String[] args){
                cutFile("D:\\文件\\a.txt", "D:\\文件",10 * 10 * 20);
                //调用togetherFile()函数合并小文件到大文件   参数列表分别为 (小文件所在的父文件夹路径,所合成的大文件的路径)
                togetherFile("D:\\文件","D:\\文件1\\a.txt");
            }
  • 相关阅读:
    LeetCode "Median of Two Sorted Arrays"
    LeetCode "Distinct Subsequences"
    LeetCode "Permutation Sequence"

    LeetCode "Linked List Cycle II"
    LeetCode "Best Time to Buy and Sell Stock III"
    LeetCode "4Sum"
    LeetCode "3Sum closest"
    LeetCode "3Sum"
    LeetCode "Container With Most Water"
  • 原文地址:https://www.cnblogs.com/smartisn/p/9979669.html
Copyright © 2011-2022 走看看