FileOperation源码

package com.citic.util.comm;

import java.io.*;
import java.nio.channels.FileLock;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Scanner;

import com.citic.util.comm.*;
import com.citic.util.MD5Util;
import com.citic.util.XMLUtil;
import com.sun.org.apache.xml.internal.serialize.LineSeparator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class FileOperation implements IConstants{
    private static int debuglevel=0;//基础方法禁止使用config中的debuglevel,此处使用此变量仅为了统一使用方法
    public static void propertity2File(String srcfile, String desfile) {
        InputStream in=null;
        BufferedInputStream input=null;
        BufferedOutputStream output=null;
        CommFun.log(debuglevel, srcfile);
        try {
            if (new File(desfile).exists()) {
                System.out.print("配置文件已存在,是否覆盖?(y/n)");
                Scanner scanner = new Scanner(System.in);
                String str = scanner.nextLine().toUpperCase();
                System.out.println("str is [" + str + "]");
                if ("".equals(str) || str == null || "N".equals(str)) {
                    return;
                }
            }
            in = FileOperation.class.getResourceAsStream(srcfile);
            input = new BufferedInputStream(in);
            System.out.println("input.ava:"+input.available());
            output=new BufferedOutputStream(new FileOutputStream(desfile));
            int r;
            byte[] bytes=new byte[1024];
            while((r=input.read(bytes))!=-1){
                output.write(bytes, 0, r);
                CommFun.log(debuglevel,"input:"+r);
            }
            output.flush();
            CommFun.log(debuglevel,desfile + "config file is created!");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                if (output != null)
                    output.close();
                if (input != null)
                    input.close();
                if (in != null)
                    in.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    public static void propertity2File1(String srcfile, String desfile) {
        InputStreamReader reader=null;
        //FileReader reader=null;
        BufferedReader breader=null;
        CommFun.log(debuglevel, srcfile);
        try {
            if (new File(desfile).exists()) {
                System.out.print("配置文件已存在,是否覆盖?(y/n)");
                Scanner scanner = new Scanner(System.in);
                String str = scanner.nextLine().toUpperCase();
                System.out.println("str is [" + str + "]");
                if ("".equals(str) || str == null || "N".equals(str)) {
                    return;
                }
            }
            reader=new InputStreamReader(FileOperation.class.getResourceAsStream(srcfile),"Unicode");
            breader=new BufferedReader(reader);
            String tmps=null;
            while((tmps=breader.readLine())!=null){
                System.out.println(tmps);
            }
            CommFun.log(debuglevel,desfile + "config file is created!");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
//            try {
//                if (output != null)
//                    output.close();
//                if (input != null)
//                    input.close();
//                if (reader != null)
//                    reader.close();
//            } catch (Exception e) {
//                throw new RuntimeException(e);
//            }
        }
    }
    
    /**
     * 获取配置文件的排它锁,实现单进程使用
     * @return
     */
    public static boolean getlock(){
        String file = System.getProperty("user.dir").trim() + File.separator
        + config+".lck";
        boolean lockflag=true;
//        FileLock lck = null;
//        try {
//            FileOutputStream fos=new FileOutputStream(file);
//            lck = fos.getChannel().tryLock();
//            CommFun.log(INFO, "对文件加锁成功[" + file + "]");
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RuntimeException();
//        }
//        return lck == null ? false : true;
        
        File flagFile=new File(file);
        try {
            if(false==flagFile.createNewFile()){
                lockflag=false;
            }
        } catch (IOException e) {
            lockflag=false;
            e.printStackTrace();
        }
        flagFile.deleteOnExit();
        return lockflag;
    }
    
    /**
     * StringBuffer[]数组写入到指定文件
     * 
     * @param stb
     * @param filename
     */
    public static void stringbuffer2file(StringBuffer[] stb, String filename){
        stringbuffer2file(stb,filename,null);
    }
    
    /**
     * @param stb
     * @param filename
     * @param strmd5
     * 加入传入的strmd5,因计算后的值不一样,所以直接传入吧,MQUtil.java中
     */
    public static void stringbuffer2file(StringBuffer[] stb, String filename,String strmd5) {
        try {
            String pthseparator = System.getProperty("file.separator");
            // filename = filename.replace("/", "\\");
            String localpth=filename.substring(0,filename.lastIndexOf(pthseparator));
            CommFun.log(localpth);
            File f = new File(localpth);
            if (!f.exists()) {
                f.mkdir();
            }
//            FileWriter fw = new FileWriter(filename,true);
//            for (int i = 0; i < stb.length && stb[i] != null; i++) {
//                fw.write(stb[i].toString() + "\n");
//            }
//            fw.flush();
//            fw.close();

            StringBuffer tmpstr1 = new StringBuffer();
            for (int i = 0; i < stb.length && stb[i] != null; i++) {
                tmpstr1.append(stb[i]).append(System.getProperty("line.separator"));
            }
            
            //对于xml文件走XML创建方法,否则使用一般文件创建 20170901 张明伟
            //新增方法和判断
            if(filename.matches(".*\\.xml")){
                XMLUtil.xmlCreate(tmpstr1.toString(), filename);    
            }else{
                writeFile(tmpstr1.toString(), filename);
            }
            
            tmpstr1=null;
            if(!(new File(filename).length()>0)){
                CommFun.log(INFO, "写入文件"+filename+"失败或无数据!");
                return;
            }
            CommFun.log(INFO, "写入文件"+filename+"成功!");
            if(strmd5!=null && !"".equals(strmd5) && ConfigFileUtil.getValue("md5")=="true"){
                String filemd5=MD5Util.getMD5String(filename);
                String tmpstr="filename:"+filename+",strmd5:"+strmd5+",filemd5:"+filemd5;
                CommFun.log(tmpstr);
                String md5file=localpth+File.separator+"MD5.txt";
                writeFile(tmpstr,md5file);
            }
        } catch (Exception e) {
            CommFun.log(ERR, "写入文件"+filename+"失败!");
            throw new RuntimeException(e);
        }
    }

    /**
     * 一般文件写入
     * @param tmpstr
     * @param filename
     */
    public static void writeFile(String tmpstr,String filename){
        try{
            FileWriter fw1 = new FileWriter(filename,true);
            fw1.write(tmpstr + "\n");
            fw1.flush();
            fw1.close();
            CommFun.log(debuglevel,"写入"+filename+"成功!");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    
    public static String GetImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
//        String imgFile = "d:\\01.jpg";// 待处理的图片
        InputStream in = null;
        byte[] data = null;
        // 读取图片字节数组
        try {
            File fl = new File(imgFile);
            CommFun.log(debuglevel,fl.getName());
            in = new FileInputStream(imgFile);

            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    }

    public static boolean GenerateImage(String imgStr,String filename) {// 对字节数组字符串进行Base64解码并生成图片
        if (imgStr == null) // 图像数据为空
            return false;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解码
            byte[] b = decoder.decodeBuffer(imgStr);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {// 调整异常数据
                    b[i] += 256;
                }
            }
            SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            Date dt=new Date();
            // 生成jpeg图片
            String imgFilePath = filename+"_"+ft.format(dt);// 新生成的图片
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    public static HashMap<String, String> loadMD5txt(String path) {
        HashMap<String, String> md5map = new HashMap<String, String>();
        String md5file = path + File.separator + md5filename;
        CommFun.log(debuglevel, "MD5文件:" + md5file);
        if (new File(md5file).exists()) {
            CommFun.log(debuglevel, "MD5文件存在," + md5file);
            try {
                BufferedReader bufferreader = new BufferedReader(
                        new FileReader(md5file));
                String fline;
                while ((fline = bufferreader.readLine()) != null) {
                    if (!"".equals(fline) && fline != null) {
                        md5map.put(fline.split(",")[1].split(":")[1], "");
                    }
                }
                CommFun.log("共载入MD5[" + md5map.size() + "]条记录");
                // CommFun.log(debuglevel,""+md5map);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return md5map;
    }
    
}
View Code

 

posted @ 2020-04-04 15:55  silencemaker1221  阅读(137)  评论(0编辑  收藏  举报