Java文件操作- org.apache.commons.io FileUtils类

一、FileUtils类的应用

1、写入一个文件;
2、从文件中读取;
3、创建一个文件夹,包括文件夹;
4、复制文件和文件夹;
5、删除文件和文件夹;
6、从URL地址中获取文件;
7、通过文件过滤器和扩展名列出文件和文件夹;
8、比较文件内容;
9、文件最后的修改时间;
10、计算校验和。

二、 复制文件或文件夹方法:

示例:

import java.io.File;
import java.io.FileFilter;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.FileFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;

public class File_3_FileUtils_CopyFileorDirectory {
    public static void main(String[] args) throws Exception {
        //创建文件路径。
        File newDir = new File("file_3/");
        boolean dirCreated = newDir.mkdir();
        System.out.print("\r\n 文件路径创建结果:" + dirCreated);

        File test1 = new File(newDir,"test1.txt");
        File dir2 = new File(newDir,"dir2");
        File test3 = new File(newDir,"test3.txt");
        File dir4 = new File(newDir,"dir4");
        File dir5 = new File(newDir,"dir5");
        File test6 = new File(newDir,"test6.png");
        //将文件复制到指定文件夹中,保存文件日期的时间。
        // 该方法将指定源文件的内容复制到指定目标目录中相同名称的文件中。
        // 如果不存在,则创建目标目录。如果目标文件存在,则该方法将覆盖它。
        if (!test1.exists()) test1.createNewFile();
        if(!dir2.exists()) dir2.mkdir();
        FileUtils.copyFileToDirectory(test1, dir2);//文件不重命
        //将文件复制到一个新的地方(重命名文件)并保存文件日期的时间。
        if(!test3.exists())test3.createNewFile();
        FileUtils.copyFile(test1, test3);

        //复制文件夹到指定目录下,如果指定目录不存在则创建
        FileUtils.copyDirectoryToDirectory(dir2, dir4);

        //复制文件夹到指定目录下并重命名
        FileUtils.copyDirectory(dir4, dir5);

        //该方法将指定的源目录结构复制到指定的目标目录中。
        FileUtils.copyDirectory(dir4, dir5, DirectoryFileFilter.DIRECTORY);

        // 复制文件夹下第一级内容中指定后缀文件
        IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
        IOFileFilter txtFiles = FileFilterUtils.and(FileFileFilter.FILE, txtSuffixFilter);
        FileUtils.copyDirectory(dir4, dir5, txtFiles);

        // 复制文件目录结构及文件夹下第一级目录内指定后缀文件
        FileFilter filter = FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, txtFiles);
        FileUtils.copyDirectory(dir4, dir5, filter, false);//preserveFileDate参数默认为true。

        //将字节从URL源复制到文件目的地。如果它们还不存在,则将创建到目的地的目录。如果已经存在,文件将被覆盖。
        URL source = new URL("https://wx.qlogo.cn/mmopen/vi_32/eea6hLZUxhPrYyXIvichYg32cPWtZYias96n1g1bTG6r5icH3voKVqBfy2lhhHq1pibGOZjESXP3qcgDIWAKEDd7Hg/132");
        FileUtils.copyURLToFile(source, test6, 1000, 1000);

        // 等待NFS传播文件创建,并强制执行超时。该方法重复测试File.exists(),直到它返回true,或直到秒内指定的最大时间。
        File file = new File("/abc/");
        boolean d = FileUtils.waitFor(file, 100);
        System.out.println(d);
    }
}

三、删除文件或文件方法

public class FileorDirectoryDelete {
    public static void main(String[] args) throws Exception{
        File file = new File("path1");
        File directory = new File("path2");
        //递归删除一个目录(包括内容)。
        FileUtils.deleteDirectory(directory);

        //删除一个文件,不会抛出异常。如果文件是一个目录,删除它和所有子目录。
        FileUtils.deleteQuietly(file);

        //清理内容而不删除它。
        FileUtils.cleanDirectory(directory);

        //删除一个文件,会抛出异常
        //如果file是文件夹,就删除文件夹及文件夹里面所有的内容。如果file是文件,就删除。
        //如果某个文件/文件夹由于某些原因无法被删除,会抛出异常
        FileUtils.forceDelete(file);
    }
}

四、创建目录

public class CreatDirectory {
    public static void main(String[] args) throws Exception {
        File file = new File("path");
        //创建一个文件夹,如果由于某些原因导致不能创建,则抛出异常
        //一次可以创建单级或者多级目录
        FileUtils.forceMkdir(new File("/Users/wuguibin/Downloads/folder"));
        //为指定文件创建文件的父级目录
        FileUtils.forceMkdirParent(file);
    }
}

五、移动文件夹,并重新命名

FileUtils.moveDirectory(new File("/Users/Downloads/file1"),
       new File("/Users/Downloads/file2/file3"));

//移动文件夹,并给定是否重命名
FileUtils.moveDirectoryToDirectory(new File("/Users/Downloads/file1"),
       new File("/Users/Downloads/file2/"),false);

//移动文件到指定文件夹中,并重新命名
FileUtils.moveFile(file1,new File("/Users/Downloads/海葡萄.jpen"));

//移动文件到指定文件夹中,并给定是否创建文件夹
FileUtils.moveFileToDirectory(new File("/Users/Downloads/海葡萄.jpeg"),
        new File("/Users/Downloads/file2"),false);

六、判断文件是否相同或包含关系、获取文件或文件夹大小

//确定父目录是否包含指定子元素(一个文件或目录)。即directory是否包含file2,在比较之前,文件是标准化的。
boolean a = FileUtils.directoryContains(directory,file2);
//比较两个文件的内容,以确定它们是否相同。
boolean b = FileUtils.contentEquals(file1, file2)

//获取指定文件或文件夹大小,有可能溢出,变为负值
long l = FileUtils.sizeOf(file1);
System.out.println(l+"KB");
//获取指定文件或文件夹大小,不溢出
BigInteger bi= FileUtils.sizeOfAsBigInteger(file1);
System.out.println(bi+"kb");
//递归地计算一个目录的大小(所有文件的长度的总和)。
//注意,sizeOfDirectory()没有检测溢出,如果溢出发生,返回值可能为负。sizeOfDirectoryAsBigInteger()方法则不溢出。
FileUtils.sizeOfDirectory(file1);
FileUtils.sizeOfDirectoryAsBigInteger(file1);

七、比较文件新旧

//比较指定文件是否比参考文件创建或修改后时间晚
  boolean b = FileUtils.isFileNewer(file1,file2));
 
  //如果指定的文件比指定的日期更新。
  SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
  String date1 = "2017/06/20";
  boolean c = FileUtils.isFileNewer(file1,date.parse(date1));
  boolean d = FileUtils.isFileNewer(file1,23243);
        
   //指定文件创建或修改后的时间是否比参考文件或日期早
   FileUtils.isFileOlder(file1,232434);
   FileUtils.isFileOlder(file1,System.currentTimeMillis());

八、写入文件

//把集合里面的内容写入文件,以指定字符串结束写入
 //void writeLines(File file,Collection<?> lines,String lineEnding,boolean append)
 ArrayList<String> list = new ArrayList<>();
 String str1 = "Java";
 String str2 = "JSP";
 list.add(str1);
 list.add(str2);
 FileUtils.writeLines(file8,"GBK",list,"java",true);

 //把字符串写入文件
 //参数1:需要写入的文件,如果文件不存在,将自动创建。  参数2:需要写入的内容
 //参数3:编码格式     参数4:是否为追加模式( ture: 追加模式,把字符串追加到原内容后面)
 String data1 = "认真";
 FileUtils.writeStringToFile(file,data1, "UTF-8", true);

 //把字节数组写入文件
 byte [] buf = {13,123,34};
 System.out.println(new String(buf));
 FileUtils.writeByteArrayToFile(file13,buf,0,buf.length,true);

参考
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html
https://www.cnblogs.com/gdwkong/p/7105823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值