FileUtil和PathUtil增加Resource重载

This commit is contained in:
Looly 2024-03-11 23:10:57 +08:00
parent c5f37b062e
commit 21bf415eab
3 changed files with 84 additions and 23 deletions

View File

@ -2,13 +2,14 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.27(2024-03-07)
# 5.8.27(2024-03-11)
### 🐣新特性
* 【extra 】 FreemarkerEngine修改默认版本参数
* 【db 】 增加达梦数据库方言pr#1178@Gitee
* 【core 】 HexUtil#format方法增加prefix参数issue#I93PU9@Gitee
* 【core 】 StrUtil.replace歧义修改为replaceByCodePointissue#I96LWH@Gitee
* 【core 】 FileUtil和PathUtil增加Resource重载issue#I97FJT@Gitee
### 🐞Bug修复
* 【core 】 修复PathMover对目标已存在且只读文件报错错误问题issue#I95CLT@Gitee

View File

@ -10,6 +10,7 @@ import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.io.file.LineSeparator;
import cn.hutool.core.io.file.PathUtil;
import cn.hutool.core.io.file.Tailer;
import cn.hutool.core.io.resource.Resource;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.io.unit.DataSizeUtil;
import cn.hutool.core.lang.Assert;
@ -1037,6 +1038,40 @@ public class FileUtil extends PathUtil {
return copyFile(Paths.get(src), Paths.get(dest), options).toFile();
}
/**
* 通过JDK7+ Files#copy(InputStream, Path, CopyOption...) 方法拷贝文件
*
* @param src 源文件
* @param dest 目标文件或目录如果为目录使用与源文件相同的文件名
* @param options {@link StandardCopyOption}
* @return 目标文件
* @throws IORuntimeException IO异常
* @since 5.8.27
*/
public static File copyFile(Resource src, File dest, StandardCopyOption... options) throws IORuntimeException {
// check
Assert.notNull(src, "Source File is null !");
Assert.notNull(dest, "Destination File or directiory is null !");
return copyFile(src, dest.toPath(), options).toFile();
}
/**
* 通过JDK7+ Files#copy(InputStream, Path, CopyOption...) 方法拷贝文件
*
* @param src 源文件
* @param dest 目标文件或目录如果为目录使用与源文件相同的文件名
* @param options {@link StandardCopyOption}
* @return 目标文件
* @throws IORuntimeException IO异常
* @since 5.8.27
*/
public static File copyFile(InputStream src, File dest, StandardCopyOption... options) throws IORuntimeException {
// check
Assert.notNull(src, "Source File is null !");
Assert.notNull(dest, "Destination File or directiory is null !");
return copyFile(src, dest.toPath(), options).toFile();
}
/**
* 通过JDK7+ Files#copy(Path, Path, CopyOption...) 方法拷贝文件
*

View File

@ -1,33 +1,17 @@
package cn.hutool.core.io.file;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.file.visitor.CopyVisitor;
import cn.hutool.core.io.file.visitor.DelVisitor;
import cn.hutool.core.io.resource.FileResource;
import cn.hutool.core.io.resource.Resource;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.CharsetUtil;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.AccessDeniedException;
import java.nio.file.CopyOption;
import java.nio.file.DirectoryStream;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardCopyOption;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.EnumSet;
@ -197,6 +181,47 @@ public class PathUtil {
return true;
}
/**
* 通过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 copyFile(Resource src, Path target, CopyOption... options) throws IORuntimeException {
Assert.notNull(src, "Source is null !");
if(src instanceof FileResource){
return copyFile(((FileResource) src).getFile().toPath(), target, options);
}
return copyFile(src.getStream(), target, options);
}
/**
* 通过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 copyFile(InputStream src, Path target, CopyOption... options) throws IORuntimeException {
Assert.notNull(src, "Source is null !");
Assert.notNull(target, "Destination File or directory is null !");
try {
Files.copy(src, target, options);
} catch (IOException e) {
throw new IORuntimeException(e);
}
return target;
}
/**
* 通过JDK7+ {@link Files#copy(Path, Path, CopyOption...)} 方法拷贝文件<br>
* 此方法不支持递归拷贝目录如果src传入是目录只会在目标目录中创建空目录
@ -204,7 +229,7 @@ public class PathUtil {
* @param src 源文件路径如果为目录只在目标中创建新目录
* @param dest 目标文件或目录如果为目录使用与源文件相同的文件名
* @param options {@link StandardCopyOption}
* @return Path
* @return 目标Path
* @throws IORuntimeException IO异常
*/
public static Path copyFile(Path src, Path dest, StandardCopyOption... options) throws IORuntimeException {
@ -218,7 +243,7 @@ public class PathUtil {
* @param src 源文件路径如果为目录只在目标中创建新目录
* @param target 目标文件或目录如果为目录使用与源文件相同的文件名
* @param options {@link StandardCopyOption}
* @return Path
* @return 目标Path
* @throws IORuntimeException IO异常
* @since 5.4.1
*/