Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (C) 2018 Sun.Hao
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package lodsve.core.utils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.util.Assert;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 文件操作的工具类
*
* @author sunhao([email protected])
* @date 2012-3-16 下午08:25:56
*/
public class FileUtils {
private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);
/**
* 系统文件分割符
*/
private static final String FILE_SEPARATOR = System.getProperty("file.separator");
/**
* 文件大小的单位
*/
private static final List LIST_FILE_SIZE_UNIT = Arrays.asList("GB", "MB", "KB", "B");
/**
* 构造器私有化
*/
private FileUtils() {
super();
}
/**
* 根据给定path创建文件夹
*
* @param path 给定路径
*/
public static void createFolder(String path) {
Assert.hasText(path, "the given path is null!");
if (logger.isDebugEnabled()) {
logger.debug("given path is '{}'!", path);
}
File file = new File(path);
createFolder(file);
}
/**
* 根据给定file创建文件夹
*
* @param file 给定文件
*/
public static void createFolder(File file) {
if (file.exists()) {
logger.error("folder named '{}' is exist!", file.getName());
throw new RuntimeException(String.format("'%s'文件夹已存在", file.getName()));
} else {
try {
org.apache.commons.io.FileUtils.forceMkdir(file);
} catch (IOException e) {
logger.error("create folder '{}' error!", file.getName());
}
}
}
/**
* 删除文件夹
*
* @param folerName 文件名
* @param path 文件路径
* @return 删除结果
*/
public static boolean deleteFolder(String folerName, String path) {
return deleteFolder(folerName + path);
}
/**
* 删除文件夹
*
* @param filePath 路径名+文件名
* @return 删除结果
*/
public static boolean deleteFolder(String filePath) {
if (StringUtils.isEmpty(filePath)) {
logger.error("given filePath '{}' is null!", filePath);
return false;
}
File file = new File(filePath);
if (!file.exists()) {
logger.error("this file named '{}' is not exist!", file.getName());
return false;
}
return file.delete();
}
/**
* 创建文件
*
* @param path 文件路径
* @param file 文件字节流
*/
public static void createFile(String path, byte[] file) {
try (FileOutputStream fos = new FileOutputStream(path)) {
fos.write(file);
} catch (Exception e) {
logger.error("create file '{}' error!", path);
}
}
/**
* 重命名文件夹
*
* @param oldName 旧文件夹名
* @param newName 新文件夹名
* @param path 文件夹路径
* @return 重命名是否成功
*/
public static boolean renameFolder(String oldName, String newName, String path) {
File oldFile = new File(path + FILE_SEPARATOR + oldName);
return oldFile.renameTo(new File(path + FILE_SEPARATOR + newName));
}
/**
* 如是是文件,删除;如是是文件夹,删除它和它下面的所有文件
*
* @param dirPath 文件夹路径
*/
public static void deleteFiles(String dirPath) {
File file = new File(dirPath);
if (!file.isDirectory()) {
//如果不是文件夹,而是文件,则直接删除
file.delete();
return;
}
String[] fileNames = file.list();
if (ArrayUtils.isEmpty(fileNames)) {
return;
}
for (String fileName : fileNames) {
deleteFiles(dirPath + FILE_SEPARATOR + fileName);
}
file.delete();
}
/**
* 获得文件的扩展名,如果是文件夹,返回null.没有扩展名,返回""
*
* @param file 要获取信息的文件
* @return 文件的扩展名
*/
public static String getFileExt(File file) {
if (!file.isFile() || !file.exists()) {
return StringUtils.EMPTY;
}
int i = file.getName().lastIndexOf(".");
if (i == -1) {
return StringUtils.EMPTY;
}
return file.getName().substring(i);
}
/**
* 获得文件的扩展名,如果是文件夹,返回null.没有扩展名,返回""
*
* @param fileName 文件名
* @return 文件的扩展名
*/
public static String getFileExt(String fileName) {
Assert.hasLength(fileName, String.format("given fileName '%s' is null!", fileName));
int i = fileName.lastIndexOf(".");
if (i == -1) {
return StringUtils.EMPTY;
}
return fileName.substring(i);
}
/**
* 获取文件名(不包括扩展名)
*
* @param fileName 文件名
* @return 文件名(不包括扩展名)
*/
public static String getFileName(String fileName) {
if (StringUtils.isEmpty(fileName)) {
logger.error("given fileName '{}' is null!", fileName);
}
int i = fileName.lastIndexOf(".");
if (i == -1) {
return fileName;
}
return fileName.substring(0, i);
}
/**
* 获取文件名(不包括扩展名)
*
* @param file 要获取信息的文件
* @return 文件名(不包括扩展名)
*/
public static String getFileName(File file) {
if (!file.isFile() || !file.exists()) {
return StringUtils.EMPTY;
}
return getFileName(file.getName());
}
/**
* 根据所给文件获取此文件的字节流
*
* @param file 文件
* @return 文件的字节流
* @throws IOException io异常
*/
public static byte[] getFileByte(File file) throws IOException {
if (!file.exists() || !file.isFile() || !file.canRead()) {
logger.error("given path '{}' is not a file, maybe a folder! or it can not read!", file);
return null;
}
FileInputStream fis = openInputStream(file);
return IOUtils.toByteArray(fis);
}
/**
* 根据所给路径获取此文件的字节流
*
* @param filePath 路径
* @return 字节流
* @throws IOException io异常
*/
public static byte[] getFileByte(String filePath) throws IOException {
if (StringUtils.isEmpty(filePath)) {
logger.error("given filePath is null!");
return null;
}
File file = new File(filePath);
return getFileByte(file);
}
/**
* 根据所给文件获取此文件的字节流
*
* @param file 文件
* @return 文件的字节流
* @throws IOException io异常
*/
public static char[] getFileChar(File file) throws IOException {
if (!file.exists() || !file.isFile() || !file.canRead()) {
logger.error("given path '{}' is not a file, maybe a folder! or it can not read!", file);
return null;
}
FileInputStream fis = openInputStream(file);
return IOUtils.toCharArray(fis);
}
/**
* 根据所给路径获取此文件的字节流
*
* @param filePath 路径
* @return 文件的字节流
* @throws IOException io异常
*/
public static char[] getFileChar(String filePath) throws IOException {
if (StringUtils.isEmpty(filePath)) {
logger.error("given filePath is null!");
return null;
}
File file = new File(filePath);
return getFileChar(file);
}
/**
* 根据所给文件获取输入流
*
* @param file 文件
* @return 输入流
* @throws IOException io异常
*/
public static FileInputStream openInputStream(File file) throws IOException {
if (file.exists()) {
if (file.isDirectory() || !file.canRead()) {
throw new IOException("File '" + file + "' exists but is a directory");
}
if (!file.canRead()) {
throw new IOException("File '" + file + "' cannot be read");
}
} else {
throw new FileNotFoundException("File '" + file + "' does not exist");
}
return new FileInputStream(file);
}
/**
* 根据所给路径获取输入流
*
* @param filePath 路径
* @return 输入流
* @throws IOException io异常
*/
public static FileInputStream openInputStream(String filePath) throws IOException {
if (StringUtils.isEmpty(filePath)) {
logger.error("given filePath is null!");
return null;
}
File file = new File(filePath);
return openInputStream(file);
}
/**
* 获取单个文件的大小
*
* @param file 要取得文件的大小
* @return 文件大小,单位字节
*/
public static Long getFileSize(File file) {
if (!file.exists() || file.isDirectory()) {
logger.warn("this file is not exists or it is not a file! file name is '{}'", file.getName());
return 0L;
}
return file.length();
}
/**
* 转换字符串型的文件大小为Long型的(结果是KB)
*
* @param size 字符串型的文件大小(单位MB.KB.B,不填默认为MB)
* @return byte为单位的大小
*/
public static Long converSizeToKB(String size) {
Long sizeLong = 0L;
if (StringUtils.isEmpty(size)) {
return sizeLong;
}
if (NumberUtils.isNumber(size)) {
return Long.valueOf(size);
}
boolean check = false;
for (String unit : LIST_FILE_SIZE_UNIT) {
String reg = "[0-9.]{0,}(" + unit + ")$";
check = size.matches(reg);
if (check) {
break;
}
}
if (!check) {
return sizeLong;
}
for (String unit : LIST_FILE_SIZE_UNIT) {
String number = size.replaceAll(unit, "");
if (!NumberUtils.isNumber(number)) {
continue;
}
Long d = Long.valueOf(number);
if ("GB".equals(unit)) {
sizeLong = d * (1024 * 1024 * 1024);
} else if ("MB".equals(unit)) {
sizeLong = d * (1024 * 1024);
} else if ("KB".equals(unit)) {
sizeLong = d * 1024;
} else {
sizeLong = Long.valueOf(d);
}
break;
}
return sizeLong;
}
/**
* 获取单个文件的大小
*
* @param filePath 要取得文件的path
* @return 文件大小,单位字节
*/
public static Long getFileSize(String filePath) {
if (StringUtils.isEmpty(filePath)) {
logger.error("given file path is null");
return 0L;
}
File file = new File(filePath);
return getFileSize(file);
}
/**
* 获取文件夹的大小
*
* @param file 文件夹
* @return 文件大小,单位字节
*/
public static Long getDirectorySize(File file) {
if (!file.exists()) {
logger.warn("given file '{}' is null!", file);
return 0L;
}
Long size = 0L;
if (file.isDirectory()) {
File[] files = file.listFiles();
if (ArrayUtils.isEmpty(files)) {
return size;
}
for (File f : files) {
if (f.isDirectory()) {
size = size + getDirectorySize(f);
} else {
size += getFileSize(f);
}
}
} else {
size += file.length();
}
return size;
}
/**
* 获取文件夹的大小
*
* @param filePath 文件夹路径
* @return 文件夹的大小
*/
public static Long getDirectorySize(String filePath) {
if (StringUtils.isEmpty(filePath)) {
logger.error("given file path is null");
return 0L;
}
File file = new File(filePath);
return getDirectorySize(file);
}
/**
* 遍历指定文件夹下的文件(可以指定扩展名)
*
* @param directory 文件夹
* @param extName 扩展名
* @return
*/
public static List getFileUnderDirectory(String directory, String extName) {
if (StringUtils.isEmpty(directory) || !new File(directory).exists()) {
logger.error("given no path or not exist!");
return Collections.emptyList();
}
List files = new ArrayList<>();
File file = new File(directory);
if (file.isDirectory()) {
// 是文件夹
// 获取文件夹下所有的文件或者文件夹
File[] underFiles = file.listFiles();
if (ArrayUtils.isEmpty(underFiles)) {
return files;
}
for (File uf : underFiles) {
if (!uf.isDirectory()) {
logger.debug("scan file '{}'!", uf.getName());
addFileToList(files, uf, extName);
} else {
files.addAll(getFileUnderDirectory(uf.getAbsolutePath(), extName));
}
}
} else {
logger.debug("scan file '{}'!", file.getName());
addFileToList(files, file, extName);
}
return files;
}
/**
* 将给定的文件放入list中(按扩展名)
*
* @param files 放文件的list
* @param file 指定的文件
* @param extName 扩展名
*/
private static void addFileToList(List files, File file, String extName) {
if (StringUtils.isEmpty(extName)) {
files.add(file);
} else if (StringUtils.isNotEmpty(extName) && file.getName().endsWith(extName)) {
files.add(file);
}
}
/**
* Reads the contents of a file into a String.
*
* @param filePath the file path to read, must not be null
* @param encoding the encoding to use, null means platform default
* @return contents
*/
public static String getFileText(String filePath, String encoding) {
if (StringUtils.isEmpty(filePath)) {
logger.error("given filePath is null!");
return StringUtils.EMPTY;
}
return getFileText(new File(filePath), encoding);
}
/**
* Reads the contents of a file into a String.
*
* @param file the file to read, must not be null
* @param encoding the encoding to use, null means platform default
* @return contents
*/
public static String getFileText(File file, String encoding) {
return getFileText(new FileSystemResource(file), encoding);
}
/**
* Reads the contents of a file into a String.
*
* @param resource the resource to read, must not be null
* @param encoding the encoding to use, null means platform default
* @return contents
*/
public static String getFileText(Resource resource, String encoding) {
try (InputStream in = resource.getInputStream()) {
return IOUtils.toString(in, encoding);
} catch (IOException e) {
logger.error(e.getMessage(), e);
return StringUtils.EMPTY;
}
}
/**
* Reads the contents of a file line by line to a List of Strings.
* The file is always closed.
*
* @param file the file to read, must not be null
* @param encoding the encoding to use, null means platform default
* @return the list of Strings representing each line in the file, never null
* @throws Exception in case of an I/O error
* @throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
* @since Commons IO 1.1
*/
public static List readLines(File file, String encoding) throws Exception {
return readLines(openInputStream(file), encoding);
}
/**
* Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.
* The file is always closed.
*
* @param file the file to read, must not be null
* @return the list of Strings representing each line in the file, never null
* @throws Exception in case of an I/O error
* @since Commons IO 1.3
*/
public static List readLines(File file) throws Exception {
return readLines(file, null);
}
/**
* Reads the contents of a file line by line to a List of Strings.
* The file is always closed.
*
* @param in the InputStream to read, must not be null
* @param encoding the encoding to use, null means platform default
* @return the list of Strings representing each line in the file, never null
* @throws Exception in case of an I/O error
* @throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
* @since Commons IO 1.1
*/
public static List readLines(InputStream in, String encoding) throws Exception {
if (in == null) {
return Collections.emptyList();
}
return IOUtils.readLines(in, encoding);
}
/**
* Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.
* The file is always closed.
*
* @param in the InputStream to read, must not be null
* @return the list of Strings representing each line in the file, never null
* @throws Exception in case of an I/O error
* @since Commons IO 1.3
*/
public static List readLines(InputStream in) throws Exception {
return readLines(in, null);
}
}