代碼模板以下,防止重複勞動,關鍵點是: 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; } }