使用BufferedWriter和FileWriter向文件寫字符,並將異常轉換爲Runtim...

代碼模板以下,防止重複勞動,關鍵點是: html

1.使用BufferedWriter封裝了FileWriter,使用了裝飾者模式,每次write()方法的調用,並無真正的寫數據,而是等到寫滿8192個char的時候,調用flushBuffer()才真正的寫字符到硬盤,或調用close()方法時,觸發flushBuffer()一次。 java

2異常捕獲,轉換爲運行時異常,這樣在後面的代碼調用過程當中,不須要try-catch,直接拋出運行時異常。 性能

若是系統任何IO異常都是致命的異常,那麼就能夠先try-catch IO異常,而後轉化爲RuntimeException,之後有其餘方法調用這個寫文件的方法: this

好處: spa

a.不須要try-catch,(try-catch自己佔用系統一點點性能,到是可有可無) 日誌

b.遇到IO異常,就拋出RunTimeException,整個系統中止運行,防止遇到錯誤,程序還空跑。 code

try-catch性能分析: htm

http://www.cnblogs.com/isline/archive/2010/04/22/1717837.html blog


/**
     * 做用:向一個文件內輸入信息
     * 
     * @param strFileName
     *            文件名
     * @param strContent
     *            輸入的內容
     * @param isAppend
     *            是否追加在前一文件以後
     */
    public static void createFileBuffer(String strFileName, String strContent, boolean isAppend)
    {
        // 創建父級文件
        mkParentPath(strFileName);

        // 進行寫操做
        BufferedWriter writer = null;
        try
        {
            writer = new BufferedWriter(new FileWriter(strFileName, isAppend));
            writer.write(strContent);
            writer.flush();
        } catch (IOException ex)
        {
            throw ExceptionUtil.wrap("createFile:write file error." + strFileName, ex);
        } finally
        {
            close(writer);
        }
    }
	
	 /**
     * 做用:爲父級文件創建目錄
     * 
     * @param strPath
     */
    public static void mkParentPath(String strPath)
    {
        File file = new File(strPath);
        mkParentPath(file);
    }

    public static void mkParentPath(File file)
    {
        File parent = file.getParentFile();
        if (parent != null)
            if (!parent.exists())
                parent.mkdirs();
    }
		
		
public static void close(Closeable closeable)
    {
        try
        {
            if (closeable != null)
                closeable.close();
        } catch (IOException ex)
        {
        }
    }


ExceptionUtil 的代碼以下: ip


/**
 * 做用:對異常進行包裝,使之變成不須要捕獲的RuntimeException
 
 */
public final class ExceptionUtil {
    private ExceptionUtil() {

    }

    /**
     * 做用:包裝異常,使之變成不須要catch的RuntimeException
     * @param ex   所要包裝的異常
     * @return     返回SysException
     */
    public static SysException wrap(Throwable ex) {
        SysException se = null;
           if (ex instanceof SysException) {
               se = (SysException)ex;
           }
           else {
               se = new SysException(ex);
           }
           ex.printStackTrace();
           return se;
    }

    /**
     * 做用:包裝異常,使之變成不須要catch的RuntimeException
     * @param message  異常信息
     * @param ex       所要包裝的異常
     * @return         返回SysException
     */
    public static SysException wrap(String message, Throwable ex) {
        SysException se = null;
        if (ex instanceof SysException) {
            se = (SysException)ex;
        }

        else {
            se = new SysException(message, ex);
        }
        return se;
    }

    /**
     * 做用:包裝異常,使之變成不須要catch的RuntimeException
     * @param msgId  異常消息id
     * @param ex     所要包裝的異常
     * @return       返回SysException
     */
    public static SysException wrap(long msgId, Throwable ex) {
        SysException se = null;
        if (ex instanceof SysException) {
            se = (SysException)ex;
        }
        else {
            se = new SysException(msgId, ex);
        }
        return se;
    }

    /**
     * 做用:包裝異常,使之變成不須要catch的RuntimeException
     * @param ex     所要包裝的異常
     * @param logged 是否須要記錄log日誌
     * @return       返回SysException
     */
    public static SysException wrap(Throwable ex, boolean logged) {
        SysException se = wrap(ex);
        se.setLogged(logged);
        return se;
    }

    /**
     * 做用:包裝異常,使之變成不須要catch的RuntimeException
     * @param message   異常信息
     * @param ex        所要包裝的異常
     * @param logged    是否須要記錄log信息
     * @return          返回SysException
     */
    public static SysException wrap(String message, Throwable ex, boolean logged) {
        SysException se = wrap(message, ex);
        se.setLogged(logged);
        return se;
    }

}



SysException 的代碼以下:


/**
 * 做用:一個不須要catch的RuntimeException
 * @classname     SysException.java
 * @description   系統異常類
 */
public class SysException extends RuntimeException implements Serializable
{
    private Long msgId;
    private boolean isLogged;

    public SysException()
    {
        super();
        this.isLogged = false;
    }

    public SysException(String msg)
    {
        super(msg);
        this.isLogged = false;
    }

    public SysException(String msg, Throwable cause)
    {
        super(msg, cause);
        this.isLogged = false;
    }

    public SysException(Throwable cause)
    {
        super();
        this.isLogged = false;
    }

    public SysException(long messageId)
    {
        this();
        this.msgId = new Long(messageId);
    }

    public SysException(long messageId, Throwable cause)
    {
        this(cause);
        this.msgId = new Long(messageId);
    }

    public boolean isLogged()
    {
        return isLogged;
    }

    public void setLogged(boolean b)
    {
        isLogged = b;
    }

    public Long getMsgId()
    {
        return msgId;
    }

}
相關文章
相關標籤/搜索