All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.hugh.util.file.FileUtils Maven / Gradle / Ivy

The newest version!
package com.github.hugh.util.file;

import com.github.hugh.exception.ToolboxException;
import com.github.hugh.util.EmptyUtils;
import com.github.hugh.util.StringUtils;
import com.google.common.io.Files;
import lombok.Cleanup;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

/**
 * 文件工具类
 *
 * @author hugh
 * @since 1.0.5
 */
public class FileUtils {

    /**
     * 根据路径判断文件目录是否存在、不存在则进行创建
     *
     * @param path 路径
     */
    public static void createDir(String path) {
        File file = new File(path);
        if (file.exists()) {//文件存在
            return;
        }
        if (file.isDirectory()) {//文件目录存在
            return;
        }
        file.mkdirs();
    }

    /**
     * 根据url链接判断对应图片是否存在
     *
     * @param url 网址链接
     * @return boolean {@code true}存在返回
     */
    public static boolean urlFileExist(String url) {
        if (EmptyUtils.isEmpty(url)) {
            return false;
        }
        try {
            URL u = new URL(url);
            URLConnection uc = u.openConnection();
            InputStream in = uc.getInputStream();
            if (url.equalsIgnoreCase(uc.getURL().toString()))
                in.close();
            return true;
        } catch (Exception e) {
//            e.printStackTrace();
            return false;
        }
    }

    /**
     * URL 文件不存在
     *
     * @param url 网址链接
     * @return boolean {@code true} 文件不存在返回
     * @since 1.4.15
     */
    public static boolean urlNotFileExist(String url) {
        return !urlFileExist(url);
    }

    /**
     * 删除文件下所有空文件夹
     *
     * @param dir 文件
     */
    public static void delEmptyDir(File dir) {
        File[] dirs = dir.listFiles();
        assert dirs != null;
        for (File file : dirs) {
            if (file.isDirectory()) {
                delEmptyDir(file);
            }
        }
        if (dir.isDirectory()) {
            dir.delete();
        }
    }

    /**
     * 根据路径删除空文件夹
     *
     * @param path 文件夹路径
     * @since 1.4.4
     */
    public static void delEmptyDir(String path) {
        delEmptyDir(new File(path));
    }

    /**
     * 删除文件夹与旗下所有文件
     *
     * @param file file
     */
    public static void deleteDir(File file) {
        if (file == null) {
            throw new ToolboxException("file is null ");
        }
        if (file.isDirectory()) {//文件为目录
            File[] files = file.listFiles();
            if (files == null) {
                return;
            }
            for (File f : files)//遍历删除所有文件
                deleteDir(f);
        }
        file.delete();
    }

    /**
     * 根据文件路径删除文件夹下所有文件及文件夹
     * 

通过创建一个文件后调用{@link #deleteDir(File)}方法

* * @param path 路径 * @since 1.4.2 */ public static void deleteDir(String path) { if (path == null) { return; } deleteDir(new File(path)); } /** * 根据文件路径删除文件,后如果目录为空,也会删除 * * @param path 路径 * @since 1.4.1 */ public static void delFile(String path) throws IOException { if (path == null) { return; } File file = new File(path); if (file.exists()) { if (file.delete()) {//删除文件 String directory = StringUtils.before(file.getCanonicalPath(), File.separator); delEmptyDir(directory);//删除目录 } } } /** * 通过url访问图片信息后、存储到本地 *

V1.5.1 后多线程使用{@link FileUtils#downloadByNio(String, String)}

* * @param fileUrl 网络资源地址 * @param savePath 保存路径 * @return boolean 成功返回true */ public static boolean downloadByStream(String fileUrl, String savePath) { try { URL url = new URL(fileUrl); /* 将网络资源地址传给,即赋值给url */ /* 此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流 */ HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); var dataInputStream = new DataInputStream(httpURLConnection.getInputStream()); /* 此处也可用BufferedInputStream与BufferedOutputStream 需要保存的路径*/ var dataOutputStream = new DataOutputStream(new FileOutputStream(savePath)); try (dataInputStream; dataOutputStream) { /* 将参数savePath,即将截取的图片的存储在本地地址赋值给out输出流所指定的地址 */ byte[] buffer = new byte[4096]; int count; /* 将输入流以字节的形式读取并写入buffer中 */ while ((count = dataInputStream.read(buffer)) > 0) { dataOutputStream.write(buffer, 0, count); } /* 关闭输入输出流以及网络资源的固定格式 */ httpURLConnection.disconnect(); return true;/* 网络资源截取并存储本地成功返回true */ } } catch (Exception e) { e.printStackTrace(); return false; } } /** * 网络TRL中下载图片 *

采用nio从URL流数据创建字节通道。然后使用文件输出流将其写入文件。

*

使用了{@link Cleanup}进行通道与流的关闭。

* * @param uri URL * @param path 存放文件的路径 * @return boolean {@code true}存储成功 * @since 1.5.1 */ public static boolean downloadByNio(String uri, String path) { if (urlNotFileExist(uri)) { return false; } try { URL url = new URL(uri); ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream()); FileOutputStream fileOutputStream = new FileOutputStream(path); try (readableByteChannel; fileOutputStream) { fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE); return true; } } catch (IOException e) { e.printStackTrace(); return false; } } /** * 根据图片路径读取文件并转化为Byte[] *

调用{@link #toByteArray(File)}

* * @param path 文件路径 * @return byte[] 文件数组 * @since 1.3.6 */ public static byte[] toByteArray(String path) throws IOException { File file = new File(path); return toByteArray(file); } /** *

使用{@link Files#asByteSource(File)}读取文件

* * @param file 文件 * @return byte * @throws IOException IO异常 * @since 1.5.2 */ public static byte[] toByteArray(File file) throws IOException { if (file == null) { throw new ToolboxException("file is null !"); } if (!file.exists()) { throw new ToolboxException("file not exists !"); } return Files.asByteSource(file).read(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy