mirror of
https://gitee.com/dromara/hutool.git
synced 2025-10-07 23:24:43 +08:00
add methods
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package cn.hutool.v7.core.io.file;
|
||||
|
||||
import cn.hutool.v7.core.array.ArrayUtil;
|
||||
import cn.hutool.v7.core.func.PredicateUtil;
|
||||
import cn.hutool.v7.core.io.IORuntimeException;
|
||||
import cn.hutool.v7.core.io.IoUtil;
|
||||
import cn.hutool.v7.core.io.resource.FileResource;
|
||||
@@ -33,6 +34,8 @@ import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* NIO中Path对象操作封装
|
||||
@@ -95,6 +98,26 @@ public class PathUtil {
|
||||
|
||||
// region ----- loop and walk
|
||||
|
||||
/**
|
||||
* 获取目录下所有文件和子目录,此方法不判断是否为目录
|
||||
*
|
||||
* @param dirPath 目录路径
|
||||
* @param filter 文件过滤规则,{@code null}表示接收全部文件
|
||||
* @return 文件列表
|
||||
* @since 7.0.0
|
||||
*/
|
||||
public static Path[] listFiles(final Path dirPath, Predicate<? super Path> filter) {
|
||||
if (null == filter) {
|
||||
filter = PredicateUtil.alwaysTrue();
|
||||
}
|
||||
|
||||
try (final Stream<Path> list = Files.list(dirPath)) {
|
||||
return list.filter(filter).toArray(Path[]::new);
|
||||
} catch (final IOException e) {
|
||||
throw new IORuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归遍历目录以及子目录中的所有文件<br>
|
||||
* 如果提供path为文件,直接返回过滤结果
|
||||
|
@@ -16,12 +16,6 @@
|
||||
|
||||
package cn.hutool.v7.extra.compress;
|
||||
|
||||
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
|
||||
import org.apache.commons.compress.archivers.StreamingNotSupportedException;
|
||||
import org.apache.commons.compress.compressors.CompressorException;
|
||||
import org.apache.commons.compress.compressors.CompressorInputStream;
|
||||
import org.apache.commons.compress.compressors.CompressorOutputStream;
|
||||
import org.apache.commons.compress.compressors.CompressorStreamFactory;
|
||||
import cn.hutool.v7.core.io.IoUtil;
|
||||
import cn.hutool.v7.core.text.StrUtil;
|
||||
import cn.hutool.v7.extra.compress.archiver.Archiver;
|
||||
@@ -30,11 +24,18 @@ import cn.hutool.v7.extra.compress.archiver.StreamArchiver;
|
||||
import cn.hutool.v7.extra.compress.extractor.Extractor;
|
||||
import cn.hutool.v7.extra.compress.extractor.SevenZExtractor;
|
||||
import cn.hutool.v7.extra.compress.extractor.StreamExtractor;
|
||||
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
|
||||
import org.apache.commons.compress.archivers.StreamingNotSupportedException;
|
||||
import org.apache.commons.compress.compressors.CompressorException;
|
||||
import org.apache.commons.compress.compressors.CompressorInputStream;
|
||||
import org.apache.commons.compress.compressors.CompressorOutputStream;
|
||||
import org.apache.commons.compress.compressors.CompressorStreamFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* 压缩工具类<br>
|
||||
@@ -63,7 +64,7 @@ public class CompressUtil {
|
||||
* @param out 输出流,可以输出到内存、网络或文件
|
||||
* @return {@link CompressorOutputStream}
|
||||
*/
|
||||
public static CompressorOutputStream getOut(final String compressorName, final OutputStream out) {
|
||||
public static CompressorOutputStream<?> getOut(final String compressorName, final OutputStream out) {
|
||||
try {
|
||||
return new CompressorStreamFactory().createCompressorOutputStream(compressorName, out);
|
||||
} catch (final CompressorException e) {
|
||||
@@ -86,13 +87,13 @@ public class CompressUtil {
|
||||
* </ul>
|
||||
*
|
||||
* @param compressorName 压缩名称,见:{@link CompressorStreamFactory},null表示自动检测
|
||||
* @param in 输出流,可以输出到内存、网络或文件
|
||||
* @param in 输出流,可以输出到内存、网络或文件
|
||||
* @return {@link CompressorOutputStream}
|
||||
*/
|
||||
public static CompressorInputStream getIn(String compressorName, InputStream in) {
|
||||
in = IoUtil.toMarkSupport(in);
|
||||
try {
|
||||
if(StrUtil.isBlank(compressorName)){
|
||||
if (StrUtil.isBlank(compressorName)) {
|
||||
compressorName = CompressorStreamFactory.detect(in);
|
||||
}
|
||||
return new CompressorStreamFactory().createCompressorInputStream(compressorName, in);
|
||||
@@ -187,11 +188,11 @@ public class CompressUtil {
|
||||
return new SevenZExtractor(file);
|
||||
}
|
||||
|
||||
if(StrUtil.isBlank(archiverName)){
|
||||
if (StrUtil.isBlank(archiverName)) {
|
||||
final String name = file.getName().toLowerCase();
|
||||
if(name.endsWith(".tgz")){
|
||||
if (name.endsWith(".tgz")) {
|
||||
archiverName = "tgz";
|
||||
} else if(name.endsWith(".tar.gz")){
|
||||
} else if (name.endsWith(".tar.gz")) {
|
||||
archiverName = "tar.gz";
|
||||
}
|
||||
}
|
||||
@@ -256,4 +257,23 @@ public class CompressUtil {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取归档条目名
|
||||
*
|
||||
* @param fileName 文件名,包括主名称和扩展名,不包括路径
|
||||
* @param path 路径
|
||||
* @param fileNameEditor 文件名编辑器
|
||||
* @return 归档条目名
|
||||
* @since 7.0.0
|
||||
*/
|
||||
public static String getEntryName(final String fileName, final String path, final Function<String, String> fileNameEditor) {
|
||||
String entryName = (fileNameEditor == null) ? fileName : fileNameEditor.apply(fileName);
|
||||
if (StrUtil.isNotEmpty(path)) {
|
||||
// 非空拼接路径,格式为:path/name
|
||||
entryName = StrUtil.addSuffixIfNot(path, StrUtil.SLASH) + entryName;
|
||||
}
|
||||
|
||||
return entryName;
|
||||
}
|
||||
}
|
||||
|
@@ -42,11 +42,11 @@ public interface Archiver extends Closeable {
|
||||
* 将文件或目录加入归档,目录采取递归读取方式按照层级加入
|
||||
*
|
||||
* @param file 文件或目录
|
||||
* @param predicate 文件过滤器,指定哪些文件或目录可以加入,{@link Predicate#test(Object)}为{@code true}时加入,null表示全部加入
|
||||
* @param filter 文件过滤器,指定哪些文件或目录可以加入,{@link Predicate#test(Object)}为{@code true}时加入,null表示全部加入
|
||||
* @return this
|
||||
*/
|
||||
default Archiver add(final File file, final Predicate<File> predicate) {
|
||||
return add(file, null, predicate);
|
||||
default Archiver add(final File file, final Predicate<File> filter) {
|
||||
return add(file, null, filter);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -16,11 +16,12 @@
|
||||
|
||||
package cn.hutool.v7.extra.compress.archiver;
|
||||
|
||||
import cn.hutool.v7.core.io.file.FileUtil;
|
||||
import cn.hutool.v7.core.array.ArrayUtil;
|
||||
import cn.hutool.v7.core.io.IORuntimeException;
|
||||
import cn.hutool.v7.core.io.IoUtil;
|
||||
import cn.hutool.v7.core.text.StrUtil;
|
||||
import cn.hutool.v7.core.array.ArrayUtil;
|
||||
import cn.hutool.v7.core.io.file.FileUtil;
|
||||
import cn.hutool.v7.core.io.file.PathUtil;
|
||||
import cn.hutool.v7.extra.compress.CompressUtil;
|
||||
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
|
||||
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
|
||||
|
||||
@@ -28,6 +29,8 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.channels.SeekableByteChannel;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@@ -144,11 +147,7 @@ public class SevenZArchiver implements Archiver {
|
||||
}
|
||||
final SevenZOutputFile out = this.sevenZOutputFile;
|
||||
|
||||
String entryName = (null == fileNameEditor) ? file.getName() : fileNameEditor.apply(file.getName());
|
||||
if (StrUtil.isNotEmpty(path)) {
|
||||
// 非空拼接路径,格式为:path/name
|
||||
entryName = StrUtil.addSuffixIfNot(path, StrUtil.SLASH) + entryName;
|
||||
}
|
||||
final String entryName = CompressUtil.getEntryName(file.getName(), path, fileNameEditor);
|
||||
out.putArchiveEntry(out.createArchiveEntry(file, entryName));
|
||||
|
||||
if (file.isDirectory()) {
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
package cn.hutool.v7.extra.compress.archiver;
|
||||
|
||||
import cn.hutool.v7.extra.compress.CompressUtil;
|
||||
import org.apache.commons.compress.archivers.ArchiveEntry;
|
||||
import org.apache.commons.compress.archivers.ArchiveException;
|
||||
import org.apache.commons.compress.archivers.ArchiveOutputStream;
|
||||
@@ -172,11 +173,7 @@ public class StreamArchiver implements Archiver {
|
||||
}
|
||||
final ArchiveOutputStream out = this.out;
|
||||
|
||||
String entryName = (fileNameEditor == null) ? file.getName() : fileNameEditor.apply(file.getName());
|
||||
if (StrUtil.isNotEmpty(path)) {
|
||||
// 非空拼接路径,格式为:path/name
|
||||
entryName = StrUtil.addSuffixIfNot(path, StrUtil.SLASH) + entryName;
|
||||
}
|
||||
final String entryName = CompressUtil.getEntryName(file.getName(), path, fileNameEditor);
|
||||
out.putArchiveEntry(out.createArchiveEntry(file, entryName));
|
||||
|
||||
if (file.isDirectory()) {
|
||||
|
Reference in New Issue
Block a user