commons-io的Java文件處理常用方法

Java文件處理常用方法

歸納整理一些常用的處理文件的方法

Java Apache FileUtils

Maven依賴引入

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

常用的方法

package com.cn.ybwn.file;

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;

import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.zip.CRC32;

/**
 * @author 25724
 * @date 2023/3/16 9:36
 * @description
 */

public class FileUtilsTest {
    private static File parent = new File("D://test");

    public void getDirTest() {
        //獲得基本的信息
        //獲取臨時目錄 java.io.tmpdir,getUserDirectoryPath返回路徑字符串
        System.out.println(FileUtils.getTempDirectory());
        //獲取用戶主目錄 user.home,getUserDirectoryPath返回路徑字符串
        System.out.println(FileUtils.getUserDirectory());
        //以可讀的方式,返回文件的大小EB, PB, TB, GB, MB, KB or bytes
        System.out.println(FileUtils.byteCountToDisplaySize(10000000));
        System.out.println(FileUtils.byteCountToDisplaySize(1));
    }

    public void openStream() throws IOException {
        //獲取文件輸入和輸出的文件流
        //文件是目錄或者不存在,都會跑出異常
        InputStream in = FileUtils.openInputStream(new File("D://test/test1"));
        OutputStream out = FileUtils.openOutputStream(new File("D://test/test2"));
        //是否追加的形式添加內容
        out = FileUtils.openOutputStream(new File("D://test/test3"), true);
    }

    public void FileOperation() throws IOException {
        //創建文件,如果文件存在則更新時間;如果不存在,創建一個空文件
        //創建空文件的方式爲:
        FileUtils.touch(new File("D://test/test4"));

        //文件內容的對比
        FileUtils.contentEquals(new File("D://test/test1"), new File("D://test/test2"));
        //忽略換行符,第三個參數是字符集
        FileUtils.contentEqualsIgnoreEOL(new File("D://test/test1"), new File("D://test/test2"), null);

        //根據URL獲取文件
        FileUtils.toFile(new URL("file://D://test/test1"));
        FileUtils.toFiles(null);
        FileUtils.toURLs(new File[]{new File("D://test/test1")});

        //文件拷貝
        //第三個參數是否更新時間
        FileUtils.copyFileToDirectory(new File("/test1"), new File("/dir"), true);
        FileUtils.copyFile(new File("/source"), new File("/target"), true);

        //目錄拷貝
        File srcDir = new File("/source");
        File destDir = new File("/target");

        FileUtils.copyDirectoryToDirectory(new File("/source"), new File("/target"));
        FileUtils.copyDirectory(new File("/source"), new File("/target"));
        //僅僅拷貝目錄
        FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);
        // 創建.txt過濾器
        IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
        IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
        // 創建包含目錄或者txt文件的過濾器
        FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
        // Copy using the filter
        FileUtils.copyDirectory(srcDir, destDir, filter);

        //文件拷貝
        FileUtils.copyInputStreamToFile(new FileInputStream("/test"), new File("/test"));
        FileUtils.copyURLToFile(new URL("file:/test"), new File("/test"));

        //刪除文件
        //刪除目錄下所有的內容
        FileUtils.deleteDirectory(new File("/test"));
        //如果是目錄,會級聯刪除;不會拋出異常
        FileUtils.deleteQuietly(new File("/test"));

        //判斷文件是否存在
        FileUtils.directoryContains(new File("/dir"), new File("/file"));

        //清除目錄中的內容,不會刪除該目錄;
        //先verifiedListFiles檢查目錄,檢查目錄是否爲目錄、是否存在,然後調用listFiles,如果返回null,則拋出異常
        //遍歷目錄中的文件,如果是目錄則遞歸刪除;如果是文件則強制刪除,刪除失敗(文件不存在或無法刪除)都會拋出異常
        FileUtils.cleanDirectory(new File("/dir"));

        //等待一個文件xx秒,知道文件創建後才返回。每max(100,remainning)循環檢查一次
        while (FileUtils.waitFor(new File("/dir"), 60)) {
        }

        //讀取目標文件,內部調用IOUtils.toString(inputstream,"utf-8")
        String str = FileUtils.readFileToString(new File("/dir"), "utf-8");

        //內部調用IOUtils.toByteArray(in)
        byte[] bytes = FileUtils.readFileToByteArray(new File("/dir"));

        //內部調用IOUtils.readLines(in, Charsets.toCharset(encoding));
        List<String> strs = FileUtils.readLines(new File("/dir"), "utf-8");

        //內部調用IOUtils.lineIterator(in, encoding)
        FileUtils.lineIterator(new File("/dir"), "utf-8");

        //四個參數分別爲:目標文件,寫入的字符串,字符集,是否追加
        FileUtils.writeStringToFile(new File("/target"), "string", "utf-8", true);

        FileUtils.write(new File("/target"), "target char sequence", "utf-8", true);

        //(file,字符數組)
        FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes());
        //(file,字符數組,是否追加)
        FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), true);
        //(file,字符數組,起始位置,結束位置)
        FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), 0, 10);
        //(file,字符數組,起始位置,結束位置,是否追加)
        FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), 0, 10, true);

        //writeLines多了一個lineEnding參數
        FileUtils.writeLines(new File("/target"), "utf-8", FileUtils.readLines(new File("/target"), "utf-8"));

        //強制刪除
        FileUtils.forceDelete(new File("/target"));

        //在JVM
        FileUtils.forceDeleteOnExit(new File("/target"));

        //強制創建文件目錄,如果文件存在,會拋出異常
        FileUtils.forceMkdir(new File("/target"));

        //強制創建父級目錄
        FileUtils.forceMkdirParent(new File("/xxxx/target"));

        //如果是文件,直接讀取文件大小;如果是目錄,級聯計算文件下的所有文件大小
        //返回Long
        FileUtils.sizeOf(new File("/target"));
        //返回BigInteger
        FileUtils.sizeOfAsBigInteger(new File("/target"));
        FileUtils.sizeOfDirectory(new File("/target"));
        FileUtils.sizeOfDirectoryAsBigInteger(new File("/target"));

        //對比文件新舊
        FileUtils.isFileNewer(new File("/target"), new File("/file"));

        FileUtils.isFileOlder(new File("/target"), new Date());

        FileUtils.checksum(new File("/target"), new CRC32());
        FileUtils.checksumCRC32(new File("/target"));

        FileUtils.moveDirectory(new File("/target"), new File("/file"));
        FileUtils.moveDirectoryToDirectory(new File("/target"), new File("/file"), true);
        FileUtils.moveFile(new File("/target"), new File("/file"));
        FileUtils.moveFileToDirectory(new File("/target"), new File("/dir"), true);
        FileUtils.moveToDirectory(new File("/target"), new File("/dir"), true);

        FileUtils.isSymlink(new File("/target"));
    }


    public void findFiles() {
        //返回文件的列表
        List<File> files = (List<File>) FileUtils.listFiles(parent, new String[]{"test1", "test2"}, true);
        //返回文件迭代器
        Iterator<File> files_iter = FileUtils.iterateFiles(parent, new String[]{"test1", "test3"}, true);
        //把collection<File>轉換成File[]
        FileUtils.convertFileCollectionToFileArray(files);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章