FileUtils走读笔记

 

 最近在做文件类相关的操作,走读了org.apache.commons.io.FileUtils代码。特分享我的走读过程如下:

 

一、概要

pom依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
包名称:org.apache.commons.io
类名:FileUtils.java
 
二、方法
1. public static File getFile(File directory, String... names)
说明:获取基目录下的某个文件,directory与多个name组合成一个路径
范例:
    @Test
    public void TestGetFile() {
        try {
            File file = FileUtils.getFile(new File("E:/data"), "gpslog", "msg.log");
            List<String> contents = FileUtils.readLines(file);

            for (String string : contents) {
                System.out.println(string);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
2. public static File getFile(String... names)
说明:获取目录下某个文件,多个name组合成一个路径
范例:
    @Test
    public void TestGetFile() {
        try {
            File file = FileUtils.getFile("E:/data/gpslog", "msg.log");
            List<String> contents = FileUtils.readLines(file);

            for (String string : contents) {
                System.out.println(string);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
3. public static String getTempDirectoryPath()
说明:获取默认的临时文件路径
范例:
    @Test
    public void TestGetTempDirectoryPath() {
        try {
            String directoryPath = FileUtils.getTempDirectoryPath();

            System.out.println(directoryPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
4. public static File getTempDirectory()
说明:获取默认的临时文件路径对应的文件夹对象
范例:
    @Test
    public void TestGetTempDirectory() {
        try {
            File directoryPathFile = FileUtils.getTempDirectory();
            if (directoryPathFile.isDirectory()) {
                String[] childs = directoryPathFile.list();
                for (String child : childs) {
                    System.out.println(child);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
5. public static String getUserDirectoryPath()
说明:获取用户目录文件路径
范例:
    @Test
    public void TestGetUserDirectoryPath() {
        try {
            String userDirectoryPath = FileUtils.getUserDirectoryPath();
            System.out.println(userDirectoryPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
6. public static String getUserDirectoryPath()
说明:获取用户目录文件路径
范例:
    @Test
    public void TestGetUserDirectory() {
        try {
            File directoryPathFile = FileUtils.getUserDirectory();
            if (directoryPathFile.isDirectory()) {
                String[] childs = directoryPathFile.list();
                for (String child : childs) {
                    System.out.println(child);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
  7. public static FileInputStream openInputStream(File file) throws IOException
说明:获取文件对应的输入流
范例:
    @Test
    public void TesTopenInputStream() {
        try {
            FileInputStream openInputStream = FileUtils.openInputStream(new File("E:/data/gpslog/msg.log"));
            byte[] data = new byte[openInputStream.available()];

            while (openInputStream.read(data) != -1) {
                System.out.println(new String(data));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
8. public static FileInputStream openInputStream(File file) throws IOException
说明:获取文件对应的输出流。每次执行方法不是去追加内容,而是去覆盖。
范例:
    @Test
    public void TestOpenOutputStream() {
        try {
            FileOutputStream openOutputStream = FileUtils.openOutputStream(new File("E:/data/gpslog/msg.log"));
            openOutputStream.write("hello world2".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
9. public static FileOutputStream openOutputStream(File file, boolean append) throws IOException
说明:获取文件对应的输出流。append为true时表示追加内容,否则表示覆盖文件内容。
范例:
    @Test
    public void TestOpenOutputStream() {
        try {
            FileOutputStream openOutputStream = FileUtils.openOutputStream(new File("E:/data/gpslog/msg.log"), true);
            openOutputStream.write("hello girl".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
10. public static String byteCountToDisplaySize(long size)
说明:获取size对应的文件大小转换值,最小单位为byte。单位包含:bytes、KB、MB、GB、TB、PB、EB
范例:
    @Test
    public void TestByteCountToDisplaySize() {
        try {
            String byteCountToDisplaySize = FileUtils.byteCountToDisplaySize(1024 * 1024 * 1024);
            System.out.println("size=" + byteCountToDisplaySize);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  输出: size=1 GB
 
 
11. public static String byteCountToDisplaySize(BigInteger size)
说明:获取size对应的文件大小转换值,最小单位为byte。单位包含:bytes、KB、MB、GB、TB、PB、EB
 
12. public static void touch(File file) throws IOException
说明:修改文件的最后更新时间。若文件存在,修改文件的最后更新为当前时间;如果不存在,则创建文件并修改文件最后更新时间为当前时间。
范例:
    @Test
    public void TestTouch() {
        try {
            FileUtils.touch(new File("E:/data/gpslog/msg.log"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
13. public static File[] convertFileCollectionToFileArray(Collection<File> files)
说明:文件集合转换为文件数组
范例:
    @Test
    public void TestConvertFileCollectionToFileArray() {
        try {
            List<File> files = Lists.newArrayList(
                    new File("E:/data/gpslog/msg.log"),
                    new File("E:/data/gpslog/msg_null.log"));
            File[] convertFiles = FileUtils.convertFileCollectionToFileArray(files);
            for (File file : convertFiles) {
                System.out.println(file.getName() + " --> " + FileUtils.readFileToString(file));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
14. public static Collection<File> listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
说明:依据文件过滤器、文件夹过滤器,遍历目录下符合过滤器条件的文件。参数说明如下:
a. 第一个参数表示需要进行遍历的文件夹,不允许为空。
b. 第二个参数表示文件夹下面的文件需要满足的过滤器条件,不允许为空。过滤器有很多,比如EmptyFileFilter、NameFileFilter、PrefixFileFilter等。
c. 第三个参数,一般表示是否递归遍历文件夹。为空表示不进行递归遍历, DirectoryFileFilter.INSTANCE表示递归遍历文件夹。
 
范例:
    @Test
    public void TestListFiles() {
        try {
            File directory = new File("E:/data/gpslog");
            IOFileFilter fileFilter = FileFilterUtils.and(EmptyFileFilter.NOT_EMPTY,
                    FileFilterUtils.suffixFileFilter("log"));

            List<File> found = (List<File>) FileUtils.listFiles(directory, fileFilter, DirectoryFileFilter.INSTANCE);
            for (File file : found) {
                System.out.println(file.getAbsolutePath());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 
15. public static Collection<File> listFilesAndDirs( File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
说明: 依据文件过滤器、文件夹过滤器,遍历目录下符合过滤器条件的文件及文件夹。参数说明如下:
a. 第一个参数表示需要进行遍历的文件夹,不允许为空。
b. 第二个参数表示文件夹下面的文件需要满足的过滤器条件,不允许为空。过滤器有很多,比如EmptyFileFilter、NameFileFilter、PrefixFileFilter等。
c. 第三个参数,一般表示是否递归遍历文件夹。为空表示不进行递归遍历, DirectoryFileFilter.INSTANCE表示递归遍历文件夹。
范例:
    @Test
    public void TestListFilesAndDirs() {
        try {
            File directory = new File("E:/data/gpslog");
            IOFileFilter fileFilter = FileFilterUtils.and(EmptyFileFilter.NOT_EMPTY,
                    FileFilterUtils.suffixFileFilter("log"));

            List<File> found = (List<File>) FileUtils.listFilesAndDirs(directory, fileFilter,
                    DirectoryFileFilter.INSTANCE);
            for (File file : found) {
                if (file.isDirectory()) {
                    System.out.println("文件夹:" + file.getAbsolutePath());
                } else {
                    System.out.println("文件##" + file.getAbsolutePath());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  输出:
文件夹:E:\data\gpslog
文件##E:\data\gpslog\msg_null.log

 

16. public static Collection<File> listFiles(File directory, String[] extensions, boolean recursive)
说明: 依据文件名称过滤扩展数组,遍历目录下符合条件的文件。参数说明如下:
a. 第一个参数表示需要进行遍历的文件夹,不允许为空。
b. 第二个参数表示文件名称过滤扩展数据。
c. 第三个参数:true表示递归,false表示非递归。
范例:
    @Test
    public void TestListFiles2() {
        try {
            File directory = new File("E:/data/gpslog");
            List<File> found = (List<File>) FileUtils.listFiles(directory, new String[] { "log", "msg", "2" }, true);
            for (File file : found) {
                if (file.isDirectory()) {
                    System.out.println("文件夹:" + file.getAbsolutePath());
                } else {
                    System.out.println("##文件##:" + file.getAbsolutePath());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
17. public static boolean contentEquals(File file1, File file2) throws IOException
说明:比较两个文件的内容以确定它们是否相等。
范例:
    @Test
    public void TestContentEquals() {
        try {
            boolean eq = FileUtils.contentEquals(FileUtils.getFile("E:\\data\\gpslog\\msg_null.log"),
                    FileUtils.getFile("E:\\data\\gpslog\\msg_null.log"));
            System.out.println(eq);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
18. public static boolean contentEqualsIgnoreEOL(File file1, File file2, String charsetName) throws IOException
说明:依据编码比较两个文件的内容以确定它们是否相等。
范例:
    @Test
    public void TestContentEqualsIgnoreEOL() {
        try {
            boolean eq = FileUtils.contentEqualsIgnoreEOL(FileUtils.getFile("E:\\data\\gpslog\\msg_null.log"),
                    FileUtils.getFile("E:\\data\\gpslog\\msg_null.log"), "UTF-8");
            System.out.println(eq);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
19. public static File toFile(URL url)
说明:将file协议的URL文件路径,读取为文件
范例:
    @Test
    public void TestToFile() {
        try {
            File urlFile = FileUtils.toFile(new URL("file:///E:/data/gpslog/msg_null.log"));

            System.out.println(FileUtils.readFileToString(urlFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
20. public static URL[] toURLs(File[] files) throws IOException
说明:依据文件数组生成对应的URL数组
范例:
    @Test
    public void TestToFile() {
        try {
            File[] files = new File[] { FileUtils.getFile("E:/data/gpslog/msg_null.log") };

            URL[] urls = FileUtils.toURLs(files);
            for (URL url : urls) {
                System.out.println(url.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 输出:file:/E:/data/gpslog/msg_null.log
 
21. public static void copyFileToDirectory(File srcFile, File destDir) throws IOException
说明:将文件拷贝一份到目标目录
范例:
    @Test
    public void TestCopyFileToDirectory() {
        try {
            FileUtils.copyFileToDirectory(FileUtils.getFile("E:/data/gpslog/msg_null.log"),
                    FileUtils.getFile("E:/data/gpslog2"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值