博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动手动脑(文件与流)
阅读量:6080 次
发布时间:2019-06-20

本文共 10893 字,大约阅读时间需要 36 分钟。

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);    }   }   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);   }}

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 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
() { @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
() { @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
filelist=new ArrayList
(); 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); }}

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

import 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");        }}

运行前:

 

运行后:

转载于:https://www.cnblogs.com/liujinxin123/p/9975407.html

你可能感兴趣的文章
shell常用命令集合
查看>>
【转】【C#】在 Windows 窗体 DataGridView 单元格中承载控件
查看>>
【Based Android】让你的android应用使用可爱的iphone备忘录字体
查看>>
第二部分:开发简要指南-第三章 Hello,本地化
查看>>
好胜决定态度 态度决定成败
查看>>
主机访问虚拟机中linux上的web服务
查看>>
poj 3253:Fence Repair(堆排序应用)
查看>>
Entity Framework系列
查看>>
Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
查看>>
如何制作一款HTML5 RPG游戏引擎——第一篇,地图类的实现
查看>>
Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题
查看>>
破解物联网落地困境-阿里云硬件接入最佳实践
查看>>
POJ 2503 字符串(两种方法)
查看>>
ArcGIS API for Flex 调用天地图、e都市瓦片地图
查看>>
【Yaml】Yaml学习笔记
查看>>
Mockito教程
查看>>
筛选并保留最后一次记录(如筛选最后一次缴纳电费的记录 )
查看>>
亚马逊开源 Neo-AI 框架,可优化 AI 模型提升部署速度
查看>>
新网盘时代,私有云斐讯天天链N1开启智能家居新生活!
查看>>
《西游伏妖篇》明星全阵容曝光 相约大年初一
查看>>