commons-io工具包常用方法

1 FileUtils常用方法

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.apache.commons.io.filefilter.NameFileFilter;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
import java.util.Date;
import java.util.List;

public class FileUtilTest {

    public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\Test\\aa.txt");
        File file2 = new File("D:\\Test\\bb.txt");
        File fileDirectory = new File("D:\\Test");

        //1.创建文件(获取文件)
        //1.1创建文件
        //1)从文件夹中获取指定文件
        File file = FileUtils.getFile(fileDirectory, "aa.txt");
        //2)获取获取临时文件
        File tmpFile = FileUtils.getTempDirectory();
        //3)获取临时文件路径
        String tmpFilePath = FileUtils.getTempDirectoryPath();
        //4)获取用户文件
        File userFileDirectory = FileUtils.getUserDirectory();
        //5)获取用户文件路径
        String userFileDirectoryPath = FileUtils.getUserDirectoryPath();

        //1.2 创建文件夹
        //1)强制创建文件夹
        FileUtils.forceMkdir(fileDirectory);
        //2)强制创建父文件夹
        FileUtils.forceMkdirParent(file1);

        //2删除文件
        //2.1删除文件夹
        //1)删除文件夹中的内容(包括子文件夹和子文件)
        FileUtils.cleanDirectory(new File("D:\\Test"));
        //2)温和的删除文件,不抛出异常
        FileUtils.deleteQuietly(file1);
        //3)强制删除文件
        FileUtils.forceDelete(file1);
        //4)JVM退出时强制删除文件
        FileUtils.forceDeleteOnExit(file1);


        //3修改文件
        //3.1修改文件
        //1)移动文件夹
        FileUtils.moveDirectory(file1,file2);
        //3.2修改文件夹
        //1)移动文件夹
        FileUtils.moveDirectory(file1,file2);
        //2)将文件移到指定的文件夹
        FileUtils.moveFileToDirectory(file1,fileDirectory,true);
        //3)移动文件或文件夹到指定的文件夹
        FileUtils.moveToDirectory(file1,fileDirectory,true);

        //4.文件查找
        //1)是否递归查找指定扩展名的文件
        String[] extensions  = new String[]{"txt","jpg","png"};
        Collection<File> fileList = FileUtils.listFiles(fileDirectory, extensions, true);

        //5.读取文件
        //1)根据文件获取文件输入流
        FileInputStream fileInputStream = FileUtils.openInputStream(file1);
        //2)读取文件到字节数组
        byte[] bytes = FileUtils.readFileToByteArray(file1);
        //3)读取文件到字符串
        String fileContent = FileUtils.readFileToString(file1, "UTF-8");
        //4)读取文件到集合中
        List<String> fileContentList = FileUtils.readLines(file1, "UTF-8");
        //5)获取文件大小
        long fileSize = FileUtils.sizeOf(file1);


        //6.写文件
        //1)根据文件获取输出流
        FileOutputStream fileOutputStream = FileUtils.openOutputStream(file1);
        //2)获取文件输出流并指定是否追加到文件中
        FileOutputStream fileOutputStream1 = FileUtils.openOutputStream(file1, true);
        //3)将字节数组内容写到文件中,文件不存在时创建
        FileUtils.writeByteArrayToFile(file1, bytes);
        //4)将字节数组内容写到文件中,文件不存在时创建,并指定是否追加
        FileUtils.writeByteArrayToFile(file1,bytes,true);
        //5)将集合数据按行写到文件中
        FileUtils.writeLines(file1,fileContentList);
        //6)将集合数据按行写到文件中,并指定是否追加
        FileUtils.writeLines(file1,fileContentList,true);
        //7)将字符串写到文件中,并指定编码
        FileUtils.writeStringToFile(file,fileContent,"UTF-8");
        //8)将字符串数据写到文件中,并指定编码和是否追加的方式
        FileUtils.writeStringToFile(file,fileContent,"UTF-8",true);

        //7.复制文件
        //7.1复制文件目录
        //1)复制文件目录中的内容到另一个目录
        File fileDir = new File("D:\\Test");
        File destDir = new File("D:\\Test1");
        FileUtils.copyDirectory(fileDir, destDir);
        //2)复制文件目录,并指定是否保存文件日期
        FileUtils.copyDirectory(fileDir,destDir,true);
        //3)使用文件过滤器过滤文件
        FileUtils.copyDirectory(fileDir,destDir,new NameFileFilter("aa"));
        //7.2复制文件
        //1)复制文件
        FileUtils.copyFile(file1, file2);
        //2)复制文件并指定是否保留文件日期
        FileUtils.copyDirectory(file1,file2,true);
        //3)复制文件夹到目录
        FileUtils.copyFileToDirectory(file1,destDir);
        //4)将url资源复制到指定文件
        FileUtils.copyURLToFile(new URL(""), file);

        //8.文件过滤

        //9.文件比较与判断
        //1)比较文件内容是否相同
        System.out.println(FileUtils.contentEquals(file1, file2));
        //2)判断一个文件夹是否包含另外一个文件夹
        System.out.println(FileUtils.directoryContains(file1,file2));
        //3)判断文件是否新文件
        System.out.println(FileUtils.isFileNewer(file1, new Date()));
        System.out.println(FileUtils.isFileOlder(file1,new Date()));
        //4)判断文件和另外一个文件比是否是新的
        System.out.println(FileUtils.isFileNewer(file1,file2));
        System.out.println(FileUtils.isFileOlder(file1,file2));

        //10.涉及文件操作的数据转换
        //1)将文件集合转换为文件数组
        File[] fileArray = FileUtils.convertFileCollectionToFileArray(fileList);
        //2)将url资源转换为文件对象
        File newUrlFiles = FileUtils.toFile(new URL(""));
        //3)将多个url资源转换为文件数组
        URL[] urls = new URL[]{};
        File[] newUrlFiles1 = FileUtils.toFiles(urls);
        //4将文件数组转化为url资源
        URL[] urls1 = FileUtils.toURLs(newUrlFiles1);

        //11.文件迭代
        LineIterator iterator = FileUtils.lineIterator(file1, "UTF-8");
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

2 FilenameUtil常用方法

import org.apache.commons.io.FilenameUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FilenameUtilTest {

    public static void main(String[] args) throws IOException {
        /**
         * 文件相关俗语
         * C:\dev\project\file.txt
         * the prefix   C:\
         * the path     dev\project\
         * the full     C:\dev\project\
         * the name     file.txt
         * the base     file
         * the extension    txt
         */
        // 1判断父目录是否包含子元素(文件或目录)
        System.out.println(FilenameUtils.directoryContains("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\oo.png"));//true

        // 2判断两个文件名是否相等
        System.out.println(FilenameUtils.equals("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\00.png"));//false

        // 3两个文件名标准化后判断是否相等
        System.out.println(FilenameUtils.equalsNormalized("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\00.png"));//false

        // 4获取文件基本名
        System.out.println(FilenameUtils.getBaseName("C:\\Users\\Administrator\\Downloads\\test00.png"));//test00

        // 5获取文件扩展名
        System.out.println(FilenameUtils.getExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//png

        // 6获取文件完整路径,不含文件名
        System.out.println(FilenameUtils.getFullPath("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\

        // 7获取文件不含结尾分隔符的完整路径,不含文件名
        System.out.println(FilenameUtils.getFullPathNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads

        // 8获取单独的文件名和后缀
        System.out.println(FilenameUtils.getName("C:\\Users\\Administrator\\Downloads\\test00.png")); // test00.png

        // 9获取不含前缀的完整文件路径,不含文件名
        System.out.println(FilenameUtils.getPath("C:\\Users\\Administrator\\Downloads\\test00.png"));//Users\Administrator\Downloads\

        // 10获取不含前缀和结尾分隔符的完整文件路径,不含文件名
        System.out.println(FilenameUtils.getPathNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//Users\Administrator\Downloads

        // 11获取文件路径前缀
        System.out.println(FilenameUtils.getPrefix("C:\\Users\\Administrator\\Downloads\\test00.png"));//C;\

        // 12获取文件路径前缀长度
        System.out.println(FilenameUtils.getPrefixLength("C:\\Users\\Administrator\\Downloads\\test00.png"));//3

        // 13获取文件扩展索引
        System.out.println(FilenameUtils.indexOfExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//39

        // 14获取文件最后一个分隔符索引
        System.out.println(FilenameUtils.indexOfLastSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//32

        // 15判断文件扩展名是否符合给定的
        List<String> suffixList = new ArrayList<String>();
        suffixList.add("png");
        suffixList.add("txt");
        suffixList.add("xlsx");
        System.out.println(FilenameUtils.isExtension("C:\\Users\\Administrator\\Downloads\\test00.png", suffixList));// true

        // 16判断文件扩展名是否符合指定的
        System.out.println(FilenameUtils.isExtension("C:\\Users\\Administrator\\Downloads\\test00.png","png")); //true

        // 17标准化文件路径
        System.out.println(FilenameUtils.normalize("C:\\Users\\Administrator\\Downloads\\test00.png")); //C:\Users\Administrator\Downloads\test00.png

        // 18标准化文件路径,不含最后的结尾分隔符
        System.out.println(FilenameUtils.normalizeNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png")); //C:\Users\Administrator\Downloads

        // 19获取不含后缀的文件路径和文件名
        System.out.println(FilenameUtils.removeExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00

        // 20转换文件分隔符为系统分隔符
        System.out.println(FilenameUtils.separatorsToSystem("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00.png

        // 21转换文件分隔符为Unix系统分隔符
        System.out.println(FilenameUtils.separatorsToUnix("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:/Users/Administrator/Downloads/test00.png

        // 22转换文件分割符为windows系统分隔符
        System.out.println(FilenameUtils.separatorsToWindows("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00.png

        // 23 判断文件名是否符合指定的规则
        System.out.println(FilenameUtils.wildcardMatch("C:\\Users\\Administrator\\Downloads\\test00.png", "*.png"));//true
    }
}

3 IOUtils常用方法

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.URI;
import java.util.List;

public class IOUtilsTest {

    public static void main(String[] args) throws Exception {
        FileInputStream fileInputStream1 = new FileInputStream("D:\\Test\\aa.txt");
        FileInputStream fileInputStream2 = new FileInputStream("D:\\Test\\bb.txt");
        FileOutputStream outputStream = new FileOutputStream("D:\\Test\\aa.txt");
        FileReader fileReader1 = new FileReader("D:\\Test\\aa.txt");
        FileReader fileReader2 = new FileReader("D:\\Test\\bb.txt");
        FileWriter fileWriter = new FileWriter("D:\\Test\\aa.txt");

        //1静态变量
        //1.1获取文件路径分隔符字符
        char dirSeparator = IOUtils.DIR_SEPARATOR;
        // 获取Unix系统文件路径分隔符字符
        char dirSeparatorUnix = IOUtils.DIR_SEPARATOR_UNIX;
        // 获取windows系统文件路径分隔符
        char didSeparatorWindows = IOUtils.DIR_SEPARATOR_WINDOWS;
        //1.2获取行分隔符
        String lineSeparator = IOUtils.LINE_SEPARATOR;
        //获取Unix系统行分隔符
        String lineSeparatorUnix = IOUtils.LINE_SEPARATOR_UNIX;
        //获取windows系统行分隔符
        String lineSeparatorWindows = IOUtils.LINE_SEPARATOR_WINDOWS;

        //2静态方法
        //2.1获取输入流
        //根据InputStream获取BufferedInputStream
        BufferedInputStream bufferedInputStream = IOUtils.buffer(fileInputStream1);
        //根据outputStream获取BufferedOutputStream
        BufferedOutputStream bufferedOutputStream = IOUtils.buffer(outputStream);
        //根据reader获取BufferedReader
        BufferedReader bufferedReader = IOUtils.buffer(fileReader1);

        //2.2按行读取数据
        // 从InputStream输入流中获取行数据
        List<String> lineContent = IOUtils.readLines(fileInputStream1, "UTF-8");
        // 从Reader输入流中获取行数据
        List<String> lineContent1 = IOUtils.readLines(fileReader1);

        //2.3从输入流中获取字节数组数据
        //从inputStream获取文件字节数组
        byte[] data = IOUtils.toByteArray(fileInputStream1);
        //从reader获取文件字节数组,并指定编码
        byte[] data1 = IOUtils.toByteArray(fileReader1, "UTF-8");
        //从url资源中获取文件字节数组
        byte[] data2 = IOUtils.toByteArray(new URI("www...."));

        //2.4从输入流中获取字符数据
        //从InputStream输入流获取字符数据
        char[] charData = IOUtils.toCharArray(fileInputStream1, "UTF-8");
        //从reader输入流中获取字符数组
        char[] charData1 = IOUtils.toCharArray(fileReader1);

        //2.5从输入流中获取字符串数据
        //从InputStream输入流中获取字符串数据
        String stringData3 = IOUtils.toString(fileInputStream1, "UTF-8");
        //从reader输入流中获取字符串数据
        String stringData4 = IOUtils.toString(fileReader1);
        //从url中获取字符串数据
        String stringData5 = IOUtils.toString(new URI("www..."), "UTF-8");


        //3写数据
        //3.1将字节数组数据通过输出流写到文件
        //将字节数组数据通过Writer写到文件,并指明编码
        IOUtils.write(data, fileWriter, "UTF-8");
        //将字节数组数据通过outputStream写到文件
        IOUtils.write(charData,outputStream,"UTF-8");
        //将字符数组数据通过writer写到文件
        IOUtils.write(charData, fileWriter);

        //3.2 将字符串通过输出流写到文件
        //将字符串数据通过OutpurStream输出流,写到文件
        IOUtils.write(stringData5, outputStream, "UTF-8");
        //将字符串数据通过Writer输出流写到文件
        IOUtils.write(stringData5,fileWriter);

        //3.3将集合数据通过输出流写到文件
        //将集合数据通关outputStream输出流写到文件
        IOUtils.writeLines(lineContent,"UTF-8",outputStream,"UTF-8");
        //将集合数据通过writer输出流写到文件
        IOUtils.writeLines(lineContent,"UTF-8",fileWriter);

        //4.获取文件输入迭代器
        //从inputStream输入流中获取行迭代器
        LineIterator lineIterator = IOUtils.lineIterator(fileInputStream1, "UTF-8");
        //从Reader输入流中获取行迭代器
        LineIterator lineIterator1 = IOUtils.lineIterator(fileReader1);

        //5复制文件
        //复制文件输入流到输出流
        System.out.println(IOUtils.copy(fileInputStream1,outputStream));
        //复制文件输入流到输出流,并设置缓冲大小
        System.out.println(IOUtils.copy(fileInputStream1,outputStream,1024));
        //复制InputStream文件到输出流Writer,并设置输出流编码
        IOUtils.copy(fileInputStream1, fileWriter, "UTF-8");
        //复制reader文件到writer
        IOUtils.copy(fileReader1, fileWriter);
        //从inputstream复制大文件到outputstream,文件大小超过2g
        IOUtils.copy(fileInputStream1, outputStream);
        //从reader复制大文件到writer,文件大小超过2g
        IOUtils.copy(fileReader1, fileWriter);

        //6IO流比较
        //比较两个InputStream是否相等
        System.out.println(IOUtils.contentEquals(fileInputStream1,fileInputStream2));
        //判断两个reader是否相等
        System.out.println(IOUtils.contentEquals(fileReader1,fileReader2));

    }

}
发布了98 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/musi_m/article/details/103963014