zoukankan      html  css  js  c++  java
  • 使用apache 的FileUtils处理文件的复制等操作

    今日思语:春风很柔,夏风很烈,秋风清爽,东风凛冽,愿你就是春夏秋冬的风~

    平时对一些文件进行操作,比如说写文件,读文件,复制一个文件等,使用原生File操作需要读取源文件,生成流对象,再写入一个新的文件中一系列过程,使用apache commons-io帮我们封装了这些实现,有些操作可以很容易的使用它的api来实现。这里使用2.6版本,javadoc参照commons-io-2.6

    1、pom依赖加入commons-io

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>

    2、常用API使用

    2.1 获取文件

    File fileA = FileUtils.getFile(testPath + "a.txt");
    // 最终路径为入参拼接起来即testPath + "a.txt"
    File fileAA = FileUtils.getFile(testPath, "a.txt");
    // 获取某个目录下的文件,后面参数是拼接而成的
    File fileAAA = FileUtils.getFile(new File(testPath), "a.txt");

    2.2 获取临时目录和用户目录

    // 获取临时目录路径
    // 每种操作系统有所不同,Windows一般是C:DOCUME~1用户~1LOCALS~1Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp
    // Windows的java.io.tmpdir属性值可以看环境变量->用户变量中的TMP。
    File tempDirectory = FileUtils.getTempDirectory();
    String tempDirectoryPath = FileUtils.getTempDirectoryPath();
    File userDirectory = FileUtils.getUserDirectory();
    String userDirectoryPath = FileUtils.getUserDirectoryPath();
    System.out.println(tempDirectoryPath + "  -  " + tempDirectory);
    System.out.println(userDirectoryPath + "  -  " + userDirectory.getName());

    2.3  创建文件

    // 创建文件(实现与Unix上“ touch”实用程序相同的行为。它会创建一个大小为0的新文件,或者如果文件已经存在,则将其打开和关闭而不进行修改,而是更新文件的日期和时间。)
    File fileD = new File(testPath + "d.txt");
    FileUtils.touch(fileD);

    2.4 写内容到文件

    // 写文件
    File fileB = new File(testPath + "b.txt");
    if (!fileB.exists()) {
        fileB.createNewFile();
    }
    // 通过字节写入文件
    FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());
    FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);
    // 通过行写入文件(覆盖)
    FileUtils.writeLines(fileB, Lists.newArrayList("春夏秋冬, 三餐四季,只愿有你"));
    // 通过行写入文件(追加)
    FileUtils.writeLines(fileB, Lists.newArrayList("春风很柔,夏风很烈,秋风清爽,东风凛冽,你就是春夏秋冬的风"), true);
    // 字符串写入,不换行追加
    FileUtils.writeStringToFile(fileB, "唯美有你", "UTF-8", true);
    FileUtils.writeStringToFile(fileB, "哪里有你", Charset.defaultCharset(), true);
    File fileC = new File(testPath + "c.txt");
    if (!fileC.exists()) {
        fileC.createNewFile();
    }
    //  流操作
    fileInputStream   = FileUtils.openInputStream(fileB);
    //  fileOutputStream = FileUtils.openOutputStream(fileC);
    fileOutputStream = FileUtils.openOutputStream(fileC, true);
    // 字节数组
    byte[] buffer = new byte[1024];
    // 将文件内容写到文件中
    while (fileInputStream.read(buffer) != -1) {
        fileOutputStream.write(buffer);
    }

    2.5 读取文件内容

    // 按行读取文件内容
    List list = FileUtils.readLines(fileAAA, "UTF-8");
    System.out.println(list.size() > 0 ? list.get(0) : "" + list.size());
    List<String> lines = FileUtils.readLines(fileB, Charset.defaultCharset());
    System.out.println(lines.size() > 0 ? lines.get(0) : "" + lines.size());
    // 读取文件内容为字节
    byte[] bytes = FileUtils.readFileToByteArray(fileB);
    System.out.println(new String(bytes));
    // 读取文件为String
    String fileToString = FileUtils.readFileToString(fileB, "UTF-8");
    System.out.println(fileToString);
    String fileToString2 = FileUtils.readFileToString(fileB, Charset.defaultCharset());
    System.out.println(fileToString2);

    2.6 获取目录文件及目录

    // recursive是否递归查询,这里查询.txt文件,也可以指定其他格式的,如果extensions为null则查询所有类型的文件
    Collection<File> listFiles = FileUtils.listFiles(new File(testPath), null, true);
    Collection<File> listFiles2 = FileUtils.listFiles(new File(testPath), new String[]{"txt"}, true);
    // 获取某个目录下的所有文件 TrueFileFilter.INSTANCE表示匹配所有的
    Collection<File> files1 = FileUtils.listFiles(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    // 获取某个目录下的所有文件和文件目录 TrueFileFilter.INSTANCE表示匹配所有的
    Collection<File> files2 = FileUtils.listFilesAndDirs(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);

    2.7 文件内容比较

    // 文件内容比较
    boolean aa = FileUtils.contentEquals(fileA, fileAA);
    boolean ab = FileUtils.contentEquals(fileA, fileB);

    2.8 文件或目录拷贝

    // 文件复制,将文件A的内容复制给文件D
    FileUtils.copyFile(fileA, fileD);
    // 把文件复制到某个目录下
    FileUtils.copyFileToDirectory(fileD, new File(testPath + "inner"));
    // 把某个目录拷贝到另外一个目录
    FileUtils.copyDirectoryToDirectory(new File(testPath + "inner"), new File(testPath + "other"));
    // 把文件或目录拷贝到指定目录
    FileUtils.copyToDirectory(fileB, new File(testPath + "inner"));
    // 文件目录复制
    FileUtils.copyDirectory(new File(testPath + "inner"), new File(testPath + "first"));

    2.9 文件或目录删除

    // 删除目录
    FileUtils.deleteDirectory(new File(testPath + "first"));
    // 删除文件或目录
    FileUtils.deleteQuietly(fileD);
    FileUtils.deleteQuietly(new File(testPath + "first"));

    以上是FileUtils工具类的一些常用操作API使用

    Github源码参照

  • 相关阅读:
    GCD and LCM HDU 4497 数论
    c++ const 修饰变量位置含义
    洛谷 P1017 进制转换
    洛谷 P1029 最大公约数和最小公倍数问题
    Buses and People CodeForces 160E 三维偏序+线段树
    Python学习-第三天-面向对象编程基础
    Python学习-第二天-字符串和常用数据结构
    关于Python学习的一点说明
    Python学习-第一天-函数和模块的使用
    Super Mario HDU 4417 主席树区间查询
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/11799885.html
Copyright © 2011-2022 走看看