mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
FileUtil和PathUtil增加Resource重载
This commit is contained in:
parent
5a677be852
commit
65b9a047ea
@ -19,6 +19,8 @@ import org.dromara.hutool.core.func.SerFunction;
|
|||||||
import org.dromara.hutool.core.io.BomReader;
|
import org.dromara.hutool.core.io.BomReader;
|
||||||
import org.dromara.hutool.core.io.IORuntimeException;
|
import org.dromara.hutool.core.io.IORuntimeException;
|
||||||
import org.dromara.hutool.core.io.IoUtil;
|
import org.dromara.hutool.core.io.IoUtil;
|
||||||
|
import org.dromara.hutool.core.io.resource.FileResource;
|
||||||
|
import org.dromara.hutool.core.io.resource.Resource;
|
||||||
import org.dromara.hutool.core.io.resource.ResourceUtil;
|
import org.dromara.hutool.core.io.resource.ResourceUtil;
|
||||||
import org.dromara.hutool.core.io.stream.BOMInputStream;
|
import org.dromara.hutool.core.io.stream.BOMInputStream;
|
||||||
import org.dromara.hutool.core.io.unit.DataSizeUtil;
|
import org.dromara.hutool.core.io.unit.DataSizeUtil;
|
||||||
@ -214,7 +216,7 @@ public class FileUtil extends PathUtil {
|
|||||||
* </ul>
|
* </ul>
|
||||||
* 此方法与{@link #loopFiles(File, FileFilter)}不同的是,处理目录判断,可减少无效目录的遍历。
|
* 此方法与{@link #loopFiles(File, FileFilter)}不同的是,处理目录判断,可减少无效目录的遍历。
|
||||||
*
|
*
|
||||||
* @param file 文件或目录,文件直接处理
|
* @param file 文件或目录,文件直接处理
|
||||||
* @param predicate 文件处理器,只会处理文件
|
* @param predicate 文件处理器,只会处理文件
|
||||||
* @since 5.5.2
|
* @since 5.5.2
|
||||||
*/
|
*/
|
||||||
@ -911,6 +913,31 @@ public class FileUtil extends PathUtil {
|
|||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
|
// region ----- copy
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拷贝资源到目标文件
|
||||||
|
* <ul>
|
||||||
|
* <li>如果src为{@link FileResource},调用文件拷贝。</li>
|
||||||
|
* <li>其它,调用JDK7+的 {@link Files#copy(InputStream, Path, CopyOption...)}。</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param src 源文件
|
||||||
|
* @param target 目标文件或目录,目标不存在会自动创建(目录、文件都创建)
|
||||||
|
* @param isOverride 是否覆盖目标文件
|
||||||
|
* @return 目标目录或文件
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
*/
|
||||||
|
public static File copy(final Resource src, final File target, final boolean isOverride) throws IORuntimeException {
|
||||||
|
Assert.notNull(src, "Src file must be not null!");
|
||||||
|
Assert.notNull(target, "target file must be not null!");
|
||||||
|
return copy(
|
||||||
|
src,
|
||||||
|
target.toPath(),
|
||||||
|
isOverride ? new CopyOption[]{StandardCopyOption.REPLACE_EXISTING} : new CopyOption[]{})
|
||||||
|
.toFile();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 复制文件或目录<br>
|
* 复制文件或目录<br>
|
||||||
* 如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
|
* 如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
|
||||||
@ -976,6 +1003,7 @@ public class FileUtil extends PathUtil {
|
|||||||
isOverride ? new CopyOption[]{StandardCopyOption.REPLACE_EXISTING} : new CopyOption[]{})
|
isOverride ? new CopyOption[]{StandardCopyOption.REPLACE_EXISTING} : new CopyOption[]{})
|
||||||
.toFile();
|
.toFile();
|
||||||
}
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 移动文件或目录到目标中,例如:
|
* 移动文件或目录到目标中,例如:
|
||||||
@ -1052,6 +1080,8 @@ public class FileUtil extends PathUtil {
|
|||||||
return rename(file.toPath(), newName, isOverride).toFile();
|
return rename(file.toPath(), newName, isOverride).toFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// region ----- getCanonicalPath and getAbsolutePath
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取规范的绝对路径
|
* 获取规范的绝对路径
|
||||||
*
|
*
|
||||||
@ -1160,6 +1190,7 @@ public class FileUtil extends PathUtil {
|
|||||||
// 给定的路径已经是绝对路径了
|
// 给定的路径已经是绝对路径了
|
||||||
return CharUtil.SLASH == path.charAt(0) || ReUtil.isMatch(PATTERN_PATH_ABSOLUTE, path);
|
return CharUtil.SLASH == path.charAt(0) || ReUtil.isMatch(PATTERN_PATH_ABSOLUTE, path);
|
||||||
}
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否为目录,如果path为null,则返回false
|
* 判断是否为目录,如果path为null,则返回false
|
||||||
@ -2438,27 +2469,27 @@ public class FileUtil extends PathUtil {
|
|||||||
* 将流的内容写入文件<br>
|
* 将流的内容写入文件<br>
|
||||||
* 此方法会自动关闭输入流
|
* 此方法会自动关闭输入流
|
||||||
*
|
*
|
||||||
* @param dest 目标文件
|
* @param target 目标文件
|
||||||
* @param in 输入流
|
* @param in 输入流
|
||||||
* @return dest
|
* @return dest
|
||||||
* @throws IORuntimeException IO异常
|
* @throws IORuntimeException IO异常
|
||||||
*/
|
*/
|
||||||
public static File writeFromStream(final InputStream in, final File dest) throws IORuntimeException {
|
public static File writeFromStream(final InputStream in, final File target) throws IORuntimeException {
|
||||||
return writeFromStream(in, dest, true);
|
return writeFromStream(in, target, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将流的内容写入文件
|
* 将流的内容写入文件
|
||||||
*
|
*
|
||||||
* @param dest 目标文件
|
* @param target 目标文件
|
||||||
* @param in 输入流
|
* @param in 输入流
|
||||||
* @param isCloseIn 是否关闭输入流
|
* @param isCloseIn 是否关闭输入流
|
||||||
* @return dest
|
* @return dest
|
||||||
* @throws IORuntimeException IO异常
|
* @throws IORuntimeException IO异常
|
||||||
* @since 5.5.6
|
* @since 5.5.6
|
||||||
*/
|
*/
|
||||||
public static File writeFromStream(final InputStream in, final File dest, final boolean isCloseIn) throws IORuntimeException {
|
public static File writeFromStream(final InputStream in, final File target, final boolean isCloseIn) throws IORuntimeException {
|
||||||
return FileWriter.of(dest).writeFromStream(in, isCloseIn);
|
return FileWriter.of(target).writeFromStream(in, isCloseIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2506,6 +2537,7 @@ public class FileUtil extends PathUtil {
|
|||||||
* @return 大小
|
* @return 大小
|
||||||
*/
|
*/
|
||||||
public static String readableFileSize(final File file) {
|
public static String readableFileSize(final File file) {
|
||||||
|
Assert.notNull(file);
|
||||||
return readableFileSize(file.length());
|
return readableFileSize(file.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ package org.dromara.hutool.core.io.file;
|
|||||||
import org.dromara.hutool.core.array.ArrayUtil;
|
import org.dromara.hutool.core.array.ArrayUtil;
|
||||||
import org.dromara.hutool.core.io.IORuntimeException;
|
import org.dromara.hutool.core.io.IORuntimeException;
|
||||||
import org.dromara.hutool.core.io.IoUtil;
|
import org.dromara.hutool.core.io.IoUtil;
|
||||||
|
import org.dromara.hutool.core.io.resource.FileResource;
|
||||||
|
import org.dromara.hutool.core.io.resource.Resource;
|
||||||
|
import org.dromara.hutool.core.lang.Assert;
|
||||||
import org.dromara.hutool.core.util.CharsetUtil;
|
import org.dromara.hutool.core.util.CharsetUtil;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@ -85,6 +88,7 @@ public class PathUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// region ----- loop and walk
|
||||||
/**
|
/**
|
||||||
* 递归遍历目录以及子目录中的所有文件<br>
|
* 递归遍历目录以及子目录中的所有文件<br>
|
||||||
* 如果提供path为文件,直接返回过滤结果
|
* 如果提供path为文件,直接返回过滤结果
|
||||||
@ -151,8 +155,6 @@ public class PathUtil {
|
|||||||
return fileList;
|
return fileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
// region ----- walkFiles
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 遍历指定path下的文件并做处理
|
* 遍历指定path下的文件并做处理
|
||||||
*
|
*
|
||||||
@ -224,6 +226,74 @@ public class PathUtil {
|
|||||||
PathDeleter.of(path).clean();
|
PathDeleter.of(path).clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// region ----- copy
|
||||||
|
/**
|
||||||
|
* 拷贝资源到目标文件
|
||||||
|
* <ul>
|
||||||
|
* <li>如果src为{@link FileResource},调用文件拷贝。</li>
|
||||||
|
* <li>其它,调用JDK7+的 {@link Files#copy(InputStream, Path, CopyOption...)}。</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param src 源文件资源{@link Resource}实现
|
||||||
|
* @param target 目标文件或目录,如果为目录使用与源文件相同的文件名
|
||||||
|
* @param options {@link StandardCopyOption}
|
||||||
|
* @return 目标Path
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
* @since 5.8.27
|
||||||
|
*/
|
||||||
|
public static Path copy(final Resource src, final Path target, final CopyOption... options) throws IORuntimeException {
|
||||||
|
Assert.notNull(src, "Source is null !");
|
||||||
|
if (src instanceof FileResource) {
|
||||||
|
return copy(((FileResource) src).getFile().toPath(), target, options);
|
||||||
|
}
|
||||||
|
try (final InputStream stream = src.getStream()) {
|
||||||
|
return copy(stream, target, options);
|
||||||
|
} catch (final IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过JDK7+的 {@link Files#copy(InputStream, Path, CopyOption...)} 方法拷贝文件
|
||||||
|
*
|
||||||
|
* @param src 源文件流,使用后不闭流
|
||||||
|
* @param target 目标文件或目录,如果为目录使用与源文件相同的文件名
|
||||||
|
* @param options {@link StandardCopyOption}
|
||||||
|
* @return 目标Path
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
* @since 5.8.27
|
||||||
|
*/
|
||||||
|
public static Path copy(final InputStream src, final Path target, final CopyOption... options) throws IORuntimeException {
|
||||||
|
Assert.notNull(target, "Destination File or directory is null !");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Files.copy(src, target, options);
|
||||||
|
} catch (final IOException e) {
|
||||||
|
throw new IORuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过JDK7+的 {@link Files#copy(InputStream, Path, CopyOption...)} 方法拷贝文件
|
||||||
|
*
|
||||||
|
* @param src 源文件流,使用后不闭流
|
||||||
|
* @param target 目标文件或目录,如果为目录使用与源文件相同的文件名
|
||||||
|
* @return 拷贝bytes数
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
* @since 6.0.0
|
||||||
|
*/
|
||||||
|
public static long copy(final Path src, final OutputStream target) throws IORuntimeException {
|
||||||
|
Assert.notNull(src, "Source is null !");
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Files.copy(src, target);
|
||||||
|
} catch (final IOException e) {
|
||||||
|
throw new IORuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 复制src到target中
|
* 复制src到target中
|
||||||
* <ul>
|
* <ul>
|
||||||
@ -267,6 +337,7 @@ public class PathUtil {
|
|||||||
public static Path copyContent(final Path src, final Path target, final CopyOption... options) throws IORuntimeException {
|
public static Path copyContent(final Path src, final Path target, final CopyOption... options) throws IORuntimeException {
|
||||||
return PathCopier.of(src, target, options).copyContent();
|
return PathCopier.of(src, target, options).copyContent();
|
||||||
}
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否为目录,如果file为null,则返回false<br>
|
* 判断是否为目录,如果file为null,则返回false<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user