| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679 |
- /*
- * FileName:FileUtil.java
- * <p>
- * Copyright (c) 2017-2020, <a href="http://www.webcsn.com">hermit (794890569@qq.com)</a>.
- * <p>
- * Licensed under the GNU General Public License, Version 3 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.gnu.org/licenses/gpl-3.0.html
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- package cn.com.lzt.common.util;
- import cn.com.lzt.core.common.Identities;
- import org.apache.commons.io.FileUtils;
- import java.io.*;
- import java.math.BigDecimal;
- import java.net.URL;
- import java.nio.ByteBuffer;
- import java.nio.channels.FileChannel;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.regex.Matcher;
- /**
- * 功能:文件操作工具类
- * @author
- *
- * mobile enterprise application platform
- * Version 0.1
- */
- public class FileUtil {
- /**
- * 获得去除扩展名的文件名
- * @param oldFilename
- * @return
- */
- public static String removeExtension(String oldFilename) {
- final File oldFile = new File(oldFilename);
- final int iExtPos = oldFile.getName().lastIndexOf('.');
- if (iExtPos != -1) {
- final String parentPath = oldFilename.substring(0,
- oldFilename.length() - oldFile.getName().length());
- return parentPath + oldFile.getName().substring(0, iExtPos);
- }
- return oldFilename;
- }
- /**
- * 返回文件名(比如abc.jpg)
- * @param path
- * @return
- */
- public static String getFileName(String path){
- if(ValidateUtil.isNull(path))return null;
- final int p = path.lastIndexOf(File.separatorChar);
- if (p != -1) {
- return path.substring(p + 1);
- } else {
- return "";
- }
- }
-
- /**
- * 返回文件名
- * @param file 文件对象
- * @param prefixDir 取文件地址前缀
- * @return
- */
- public static String getFileName(File file,File prefixDir){
- if(file==null)return null;
- if(prefixDir==null){
- return file.getName();
- }else{
- return StringUtil.substring(file.getPath(), prefixDir.getPath().length()+1, 0xFFFF);
- }
- }
-
- /**
- * 返回文件所在目录
- * @param path
- * @return
- */
- public static String getFileDirectory(String path){
- if(ValidateUtil.isNull(path))return null;
- final int p = path.lastIndexOf(File.separatorChar);
- if (p != -1) {
- return path.substring(0, p);
- } else {
- return "";
- }
- }
- /**
- * 更改扩展名
- * @param oldFilename
- * @param newExtension
- * @return
- */
- public static String changeExtension(String oldFilename, String newExtension) {
- String result = removeExtension(oldFilename);
- if (newExtension.length() != 0) {
- result = StringUtil.concat(result,".",newExtension);
- }
- return result;
- }
- /**
- * 获得文件扩展名
- * @param file
- * @return
- */
- public static String getExtension(File file) {
- final int ipos = file.getName().lastIndexOf(".");
- if (ipos != -1) {
- return file.getName().substring(ipos + 1);
- } else {
- return StringUtil.EMPTY_STRING;
- }
- }
-
- /**
- * 获得文件的扩展名
- * @param fileName
- * @return
- */
- public static String getExtension(String fileName){
- if(ValidateUtil.isNull(fileName))return "";
- return fileName.substring(fileName.lastIndexOf(".")+1);
- }
- /**
- * 获得文件格式问yyyyMMddHHmmss的文件名
- *
- * @return String format as "yyyyMMddHHmmss"
- */
- public static String getTempFileName() {
- return Identities.uuid()+".tmp";
- }
-
- /**
- * 剪切文件
- * @param sourceFile
- * @param destFile
- */
- public static void cutFile(File sourceFile, File destFile){
- copyFile(sourceFile,destFile);
- sourceFile.delete();
- }
- /**
- * 复制文件
- * @param sourceFile
- * @param destFile
- * @throws IOException
- */
- public static void copyFile(File sourceFile, File destFile) {
- try {
- if (sourceFile.equals(destFile)) {
- return;
- }
- if (!destFile.getParentFile().exists() && !destFile.getParentFile().mkdirs()) {
- throw new IOException("Cannot create directory " + destFile.getParent());
- }
- final int BUFFER = 2048;
- try (BufferedInputStream source = new BufferedInputStream(new FileInputStream(sourceFile), BUFFER)) {
- try (BufferedOutputStream dest = new BufferedOutputStream(new FileOutputStream(destFile), BUFFER)) {
- int count;
- byte data[] = new byte[BUFFER];
- while ((count = source.read(data, 0, BUFFER)) != -1) {
- dest.write(data, 0, count);
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 删除子目录和子文件
- * @param directory
- * @return
- */
- public static boolean deleteChildren(File directory) {
- if(!directory.canRead())return false;
- File[] files = directory.listFiles();
- for (int i = 0; i < files.length; i++) {
- if (files[i].isDirectory()) {
- if (!deleteChildren(files[i]) || !files[i].delete()) {
- return false;
- }
- } else if (!files[i].delete()) {
- return false;
- }
- }
- return directory.delete();
- }
- /**
- * 复制文件夹包括里面的文件
- * @param fromDirectory
- * @param toDirectory
- * @throws FileNotFoundException
- * @throws IOException
- */
- public static void copyDirectory(File fromDirectory, File toDirectory) throws FileNotFoundException, IOException {
- if (!toDirectory.exists() && !toDirectory.mkdirs()) {
- throw new IllegalStateException("Cannot create directory " + toDirectory.getAbsolutePath());
- }
- File[] fromFiles = fromDirectory.listFiles();
- for (int i = 0; i < fromFiles.length; i++) {
- File toFile = new File(toDirectory, fromFiles[i].getName());
- if (fromFiles[i].isFile()) {
- copyFile(fromFiles[i], toFile);
- }else {
- copyDirectory(fromFiles[i], toFile);
- }
- }
- }
- /**
- * 删除文件
- * @param files
- * @return
- */
- public static boolean delete(String... files){
- List<File> list = new ArrayList<File>();
- for(String file : files)
- list.add(new File(file));
- return delete(list);
- }
- /**
- * 删除指定文件
- * @param file
- * @return
- */
- public static boolean delete(File file){
- return delete(DataUtil.getList(file));
- }
- /**
- * 删除文件数组
- * @param files
- * @return
- */
- public static boolean delete(List<File> files) {
- for (File file :files) {
- if(file.exists()){
- if(file.isFile()){
- file.delete();
- }else if(file.isDirectory()){
- File fs[] = file.listFiles();
- for(int i=0;i<fs.length;i++){
- delete(fs[i]);
- }
- }
- file.delete();
- }else{
- return false;
- }
- }
- return true;
- }
- /**
- * 获得文件夹中的文件列表
- * @param directory
- * @return
- */
- public static List<File> getFiles(File directory) {
- return getFiles(directory,null);
- }
-
- /**
- * 获得文件夹中的指定规则的文件列表
- * @param directory
- * @param regex
- * @return
- */
- public static List<File> getFiles(File directory,String regex){
- if(!directory.isDirectory())return Collections.emptyList();
- List<File> result = new ArrayList<File>();
- File[] files = directory.listFiles();
- for (int i = 0; i < files.length; i++) {
- if (files[i].isFile() && (ValidateUtil.isNull(regex) || ValidateUtil.isRegex(files[i].getName(), regex))) {
- result.add(files[i]);
- } else if(files[i].isDirectory()){
- result.addAll(getFiles(files[i],regex));
- }
- }
- return result;
- }
-
- /**
- * 读取文件到stream
- * @param file
- * @return
- */
- public static byte[] readFileStream(File file)throws Exception{
- return readFileStream(file.getAbsolutePath());
- }
-
- /**
- * 读取文件到stream
- * @param path
- * @return
- */
- public static byte[] readFileStream(String path)
- throws Exception {
- byte[] bytes = null;
- try (FileInputStream fis = new FileInputStream(path)) {
- bytes = new byte[fis.available()];
- fis.read(bytes);
- }
- return bytes;
- }
-
- /**
- * 字节数组转换成输入流
- * @param buf
- * @return
- */
- public static InputStream byteArray2InputStream(byte[] buf) {
- return new ByteArrayInputStream(buf);
- }
-
- /**
- * 输入流转byte数组
- * @param inputStream
- * @return
- * @throws IOException
- */
- public static byte[] inputStream2ByteArray(InputStream inputStream)
- throws IOException {
- ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
- byte[] buff = new byte[100];
- int rc = 0;
- while ((rc = inputStream.read(buff, 0, 100)) > 0) {
- swapStream.write(buff, 0, rc);
- }
- byte[] in2b = swapStream.toByteArray();
- return in2b;
- }
-
- /**
- * 读取文件
- * @param filename
- * @return
- * @throws IOException
- */
- public static String readFile(String filename) {
- return readFile(new File(filename));
- }
-
- /**
- * 读取文件内容
- * @param file
- * @return
- */
- public static String readFile(File file){
- String text = null;
- try {
- text = FileUtils.readFileToString(file);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return text;
- }
-
- /**
- * 读出文件到output
- * @param file
- * @param output
- * @throws IOException
- */
- public static void readFile(File file, OutputStream output)
- throws IOException {
- FileChannel fc = null;
- try (FileInputStream input = new FileInputStream(file)) {
- fc = input.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(4096);
- for (;;) {
- buffer.clear();
- int n = fc.read(buffer);
- if (n == (-1))
- break;
- output.write(buffer.array(), 0, buffer.position());
- }
- }
- }
-
- /**
- * 读取文件
- * @param file
- * @param encoding
- * @return
- */
- public static String readFile(File file,String encoding){
- String text = null;
- try {
- text = FileUtils.readFileToString(file, encoding);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return text;
- }
-
- /**
- * 读取文件到数组每行一个数组中的字符串
- * Read file to array of String.
- * @param file
- * @return
- * @throws IOException
- */
- public static String[] readFileToArray(File file) throws IOException {
- List<String> lines = FileUtils.readLines(file);
- return lines.toArray(new String[lines.size()]);
- }
-
- /**
- * 写出文件
- * @param file
- * @param text
- * @param encoding
- * @throws IOException
- */
- public static void writeFile(String filePath,String text,String encoding)throws IOException{
- File file = new File(filePath);
- FileUtil.writeFile(file, text, encoding);
- }
-
- /**
- * 写出文件
- * @param file
- * @param text
- * @param encoding
- * @throws IOException
- */
- public static void writeFile(File file,String text,String encoding)throws IOException{
- FileUtils.writeStringToFile(file, text, encoding);
- }
-
- /**
- * 验证文件是否存在
- * @param strings 文件地址组合 strings[0] + strings[1] +strings[2]
- */
- public static boolean exists(Object...objs) {
- try{
- return new File(StringUtil.concat(objs)).exists();
- }catch(Exception e){
- return false;
- }
- }
- /**
- * 查看文件件是否存在不存就创建
- * @param thisImageDir
- */
- public static void mkdirs(String dir) {
- if(!(new File(dir).isDirectory())){
- try{
- new File(dir).mkdirs();
- }catch(SecurityException e){
- e.printStackTrace();
- }
- }
- }
-
- /**
- * 写出文件
- * @param filePath
- * @param _byte
- */
- public static void writeFile(String filePath,byte[] _byte){
- ByteArrayInputStream bais = new ByteArrayInputStream(_byte);
- try{
- writeFile(new File(filePath),bais);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- FileUtil.close(bais);
- }
- }
- /**
- * 写出文件
- * @param file
- * @param is
- * @param encoding
- */
- public static void writeFile(File file, InputStream is) {
- OutputStream os = null;
- try {
- os = new FileOutputStream(file);
- int size = is.available();
- for (int j = 0; j < size; j++) {
- os.write(is.read());
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- FileUtil.close(os);
- FileUtil.close(is);
- }
- }
-
- /**
- * 获得文件大小
- * @param f
- * @return
- */
- public static long getFileSize(File f) {
-
- if(f==null || !f.exists())return 0;
- long s=0;
- FileInputStream fis = null;
- try{
- fis = new FileInputStream(f);
- s = fis.available();
- }catch(IOException e){
- e.printStackTrace();
- }finally{
- FileUtil.close(fis);
- }
- return s;
- }
- /**
- * 获得文件的KB大小
- * @param f
- * @return
- */
- public static BigDecimal getKBFileSize(File f){
- return BigDecimal.valueOf(getFileSize(f)).divide(BigDecimal.valueOf(1024)).setScale(2, BigDecimal.ROUND_HALF_UP);
- }
-
- /**
- * 获得文件的MB大小
- * @param f
- * @return
- */
- public static BigDecimal getMBFileSize(File f){
- return getKBFileSize(f).divide(BigDecimal.valueOf(1024)).setScale(2, BigDecimal.ROUND_HALF_UP);
- }
-
- /**
- * 获得友好的文件大小
- * @param file
- * @return
- */
- public static String getFriendlyFileSize(File file){
- long size = getFileSize(file);
- if(size < 1024){
- return StringUtil.concat(BigDecimal.valueOf(size).setScale(2, BigDecimal.ROUND_HALF_UP),"B");
- }else if(size < 1024*1024){
- return StringUtil.concat(BigDecimal.valueOf(size).divide(BigDecimal.valueOf(1024)).setScale(2, BigDecimal.ROUND_HALF_UP),"KB");
- }else if(size < 1024*1024*1024){
- return StringUtil.concat(BigDecimal.valueOf(size).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).setScale(2, BigDecimal.ROUND_HALF_UP),"MB");
- }else{
- return StringUtil.concat(BigDecimal.valueOf(size).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).setScale(2, BigDecimal.ROUND_HALF_UP),"GB");
- }
- }
-
- /**
- * 替换文件的分隔符
- * @param removeExtension
- * @return
- */
- public static String replaceSeparator(String src,String to) {
- return StringUtil.getNonNull(src).replaceAll( Matcher.quoteReplacement(File.separator), to);
- }
- /**
- * 获得文本的行数
- * @param file
- * @return
- */
- public static int getFileLines(File file){
- int lines = 0;
- if(file.canRead()){
- BufferedReader br = null;
- try {
- br = new BufferedReader(new FileReader(file));
- while (br.readLine() != null) {
- lines ++ ;
- }
- br.close();
- } catch (FileNotFoundException e) {
-
- e.printStackTrace();
- } catch (IOException e) {
-
- e.printStackTrace();
- } finally{
- FileUtil.close(br);
- }
- }
- return lines;
- }
-
- /**
- * 读取远程文件到本地
- * @param fileUrl 远程文件url 如:http://www.baidu.com/1.jpg
- * @param localFilePath 本地硬盘绝对路径 c:/1.jpg
- * @return
- */
- public static boolean readDistanceFile(String fileUrl, String localFilePath) {
- BufferedInputStream bis = null;
- OutputStream bos = null;
- URL url = null;
- try {
- // 实例化url
- url = new URL(fileUrl);
- // 载入图片到输入流
- bis = new BufferedInputStream(url.openStream());
- // 实例化存储字节数组
- byte[] bytes = new byte[100];
- // 设置写入路径以及图片名称
- bos = new FileOutputStream(new File(localFilePath));
- int len;
- while ((len = bis.read(bytes)) > 0) {
- bos.write(bytes, 0, len);
- }
- return true;
- } catch (Exception e) {
- // 如果图片未找到
- return false;
- } finally {
- // 关闭输出流
- FileUtil.close(bis);
- FileUtil.close(bos);
- }
- }
-
- /**
- * 获得文件编码
- * @param file
- * @return
- */
- public static String getFileCharacterEncoding(File file){
- return CharsetUtil.getLocalteFileEncode(file);
- }
-
- /**
- * 关闭流
- * @param os
- */
- public static void close(Closeable os){
- if(os!=null){
- try {
- os.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- /**
- * 输入流进行MD5散列
- * @param input
- * @return
- * @throws IOException
- */
- public static byte[] md5(InputStream input) throws IOException {
- return HashUtil.digest(input, HashUtil.MD5);
- }
-
- /**
- * 输入流进行SHA散列
- * @param input
- * @return
- * @throws IOException
- */
- public static byte[] sha1(InputStream input) throws IOException {
- return HashUtil.digest(input, HashUtil.SHA1);
- }
-
- }
|