文件操作相关utils

文件操作相关utils

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 文件操作公共类
 */
public class FileUtil {
    
    /**
     * 删除文件
     * @param filePath
     */
    public static void deleteFile(String filePath) {
        try {
            File fileTemp = new File(filePath);
            if (fileTemp.exists()) {
                fileTemp.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 删除文件夹
     * @param dir
     * @return 
     */
    public static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            // 递归删除目录中的子目录下
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        return dir.delete();
    }
    
    /**
     * 清空目录下所有文件
     * @param path
     * @return
     */
    public static boolean deleteDir(String path){
        File file = new File(path);
        if(!file.exists()){//判断是否待删除目录是否存在
            System.err.println("The dir are not exists!");
            return false;
        }
        
        String[] content = file.list();//取得当前目录下所有文件和文件夹
        for(String name : content){
            File temp = new File(path, name);
            if(temp.isDirectory()){//判断是否是目录
                deleteDir(temp.getAbsolutePath());//递归调用,删除目录里的内容
                temp.delete();//删除空目录
            }else{
                if(!temp.delete()){//直接删除文件
                    System.err.println("Failed to delete " + name);
                }
            }
        }
        return true;
    }
    
    /**
     * 根据url下载图片
     * @param imgurl
     * @return
     */
    public static String downImg(String imgurl) {
        String path = "";
        try {
            URL url = new URL(imgurl);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            // 设置超时间为3秒
            conn.setConnectTimeout(3 * 1000);
            // 防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            
            // 得到输入流
            InputStream inputStream = conn.getInputStream();
            // 获取自己数组
            byte[] getData = readInputStream(inputStream);
            
            // 文件保存位置
            String dirPath = "C:/logs/demo/img";
            File filedir = new File(dirPath);
            if (!filedir.exists()) {
                filedir.mkdirs();
            }
            path = String.format("%s/%s.jpg", dirPath, StringUtil.getUUID());
            File files = new File(path);
            FileOutputStream fos = new FileOutputStream(files);
            fos.write(getData);
            if (fos != null) {
                fos.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return path;
    }
    
    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }


    /**
     常用文件的文件头如下:(以前六位为准)
     JPEG (jpg),文件头:FFD8FF
     PNG (png),文件头:89504E47
     GIF (gif),文件头:47494638
     TIFF (tif),文件头:49492A00
     Windows Bitmap (bmp),文件头:424D
     CAD (dwg),文件头:41433130
     Adobe Photoshop (psd),文件头:38425053
     Rich Text Format (rtf),文件头:7B5C727466
     XML (xml),文件头:3C3F786D6C
     HTML (html),文件头:68746D6C3E
     Email [thorough only] (eml),文件头:44656C69766572792D646174653A
     Outlook Express (dbx),文件头:CFAD12FEC5FD746F
     Outlook (pst),文件头:2142444E
     MS Word/Excel (xls.or.doc),文件头:D0CF11E0
     MS Access (mdb),文件头:5374616E64617264204A
     WordPerfect (wpd),文件头:FF575043
     Postscript (eps.or.ps),文件头:252150532D41646F6265
     Adobe Acrobat (pdf),文件头:255044462D312E
     Quicken (qdf),文件头:AC9EBD8F
     Windows Password (pwl),文件头:E3828596
     ZIP Archive (zip),文件头:504B0304
     RAR Archive (rar),文件头:52617221
     Wave (wav),文件头:57415645
     AVI (avi),文件头:41564920
     Real Audio (ram),文件头:2E7261FD
     Real Media (rm),文件头:2E524D46
     MPEG (mpg),文件头:000001BA
     MPEG (mpg),文件头:000001B3
     Quicktime (mov),文件头:6D6F6F76
     Windows Media (asf),文件头:3026B2758E66CF11
     MIDI (mid),文件头:4D546864
     */
    public static String getFileType(byte[] bytes) {
        StringBuilder stringBuilder = new StringBuilder();
        if (bytes == null || bytes.length <= 0) {
            return null;
        }
        for (int i = 0; i < bytes.length; i++) {
            int v = bytes[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        String fileHead = stringBuilder.toString().toUpperCase();
        if (fileHead.startsWith("FFD8FF")) {
            return "jpg";
        } else if (fileHead.startsWith("89504E")) {
            return "png";
        } else if (fileHead.startsWith("474946")) {
            return "jif";
        } else if (fileHead.startsWith("41564920")) {
            return "avi";
        } else if (fileHead.startsWith("3C3F786D6C")) {
            return "xml";
        } else if (fileHead.startsWith("504B0304")) {
            return "zip";
        } else if (fileHead.startsWith("52617221")) {
            return "rar";
        } else {
            return "data";
        }
    }
}
posted @ 2019-12-27 13:44  汪全意  阅读(164)  评论(0编辑  收藏  举报