异常处理写到SD卡

转载:

http://www.cnblogs.com/lemonczy/archive/2011/11/17/2252245.html

 

public class MyCrashHandler implements UncaughtExceptionHandler { 
    @SuppressWarnings("unused") 
    private Context context; 
  
    private static MyCrashHandler crashHandler = new MyCrashHandler(); 
    UncaughtExceptionHandler defaultExceptionHandler; 
  
    private MyCrashHandler() { 
    } 
  
    public static MyCrashHandler getInstanceMyCrashHandler() { 
        return crashHandler; 
    } 
      
    /** 
     * 初始化方法 
     * @param context 上下文对象 
     */
    public void init(Context context) { 
        this.context = context; 
        defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); 
        Thread.setDefaultUncaughtExceptionHandler(this); 
    } 
  
    /** 
     * 异常处理方法 
     * @Params Thread对象 
     * @param  Throwable对象 
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) { 
        if (!handleException(thread, ex) && defaultExceptionHandler != null) { 
            defaultExceptionHandler.uncaughtException(thread, ex); 
        } 
    } 
  
    // 程序异常处理方法 
    private boolean handleException(Thread thread, Throwable ex) { 
        StringBuilder sb = new StringBuilder(); 
        long startTimer = System.currentTimeMillis(); 
        SimpleDateFormat formatter = new SimpleDateFormat( 
                "yyyy年MM月dd日   HH:mm:ss     "); 
        Date firstDate = new Date(System.currentTimeMillis()); // 第一次创建文件,也就是开始日期 
        String str = formatter.format(firstDate); 
        sb.append(startTimer); 
        //sb.append("\n"); 
        sb.append(str); // 把当前的日期写入到字符串中 
        Writer writer = new StringWriter(); 
        PrintWriter pw = new PrintWriter(writer); 
        ex.printStackTrace(pw); 
        String errorresult = writer.toString(); 
        sb.append(errorresult); 
        sb.append("\n"); 
        try { 
            File fileDir = new File("/data/data/com.ebank/Ebank/"); 
            //File fileDir = new File("/sdcard/com.ebank/EBank/"); 
            if (!fileDir.exists()) { 
                fileDir.mkdirs(); 
            } 
            File files = new File(fileDir, "ebank.log"); 
            if (!files.exists()) { 
                files.createNewFile(); 
            } 
            FileOutputStream fileOutputStream = new FileOutputStream(files, 
                    true); 
            fileOutputStream.write(sb.toString().getBytes()); 
            fileOutputStream.close(); 
  
            // 文件大小限制在1M,超过1M自动删除 
            FileInputStream fileInputStream = new FileInputStream(files); 
            int sizeK = fileInputStream.available() / 1024; // 单位是KB 
            int totalSize = 1 * 1024; 
            if (sizeK > totalSize) { 
                boolean b = files.delete(); 
                if (b) {                      // 删除成功,重新创建一个文件 
                    @SuppressWarnings("unused") 
                    File filesTwo = new File(fileDir, "ebank.log"); 
                    if (!files.exists()) { 
                        files.createNewFile(); 
                    } 
                } else { 
                                           // 删除失败 
                    FileOutputStream fileOutputStream2 = new FileOutputStream( 
                            files); 
                    fileOutputStream2.write("  ".getBytes()); // 写入一个空格进去 
                } 
            } 
  
            // 文件保存7天,过了7天自动删除 
            FileReader fileReader = new FileReader(files); 
            BufferedReader bufferedReader = new BufferedReader(fileReader); 
            String firstLine = bufferedReader.readLine(); 
            long startTimerFile = Long.valueOf(firstLine.trim()); // 类型转换 
  
            long endTimer = System.currentTimeMillis(); 
            long totalDay = 24 * 60 * 60 * 1000 * 7; 
            final File f = files; 
            TimerTask timerTask = new TimerTask() { 
                @Override
                public void run() { 
                    try { 
                        boolean n = f.delete(); 
                        if(n){ 
                            File fileDirs = new File("/data/data/com.ebank/Ebank/"); 
                            if (!fileDirs.exists()) { 
                                fileDirs.mkdirs(); 
                            } 
                            File filess = new File(fileDirs, "ebank.log"); 
                            if (!filess.exists()) { 
                                filess.createNewFile(); 
                            } 
                        }else{ 
                                                          // 删除失败 
                            FileOutputStream fileOutputStream2 = new FileOutputStream(f); 
                            fileOutputStream2.write("  ".getBytes());                     // 写入一个空格进去 
                        } 
                    } catch (FileNotFoundException e) { 
                        e.printStackTrace(); 
                    } catch (IOException e) { 
                        e.printStackTrace(); 
                    } 
  
                } 
                  
            }; 
            //定时器类的对象 
            Timer timer = new Timer(); 
            if ((endTimer - startTimerFile) >= totalDay) { 
                timer.schedule(timerTask, 1);                                            // 7天后执行 
            } 
  
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        defaultExceptionHandler.uncaughtException(thread, ex); 
  
        return true; 
    } 
  
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值