`
收藏列表
标题 标签 来源
log4j中info与debug使用上的区别
1楼讲得很全面了。在实际应用中有很多库的信息都是由debug打印出来,所以如果你打开debug模式的话会看到很多你用不上的信息。

灵活的运用各种模式有时候非常方便。比如说在开发过程中,你自己的习惯可能会打印出一些对调试有意义,但系统实际运行不需要的信息,这些都应该放在debug里,当系统真正发布的时候,把log4j等级设置为info就可以避免打印这些东西。而当系统出现问题的时候,你只需要修改log4j.properties里的打印等级就可以看到那些调试信息了。

log4j支持单一文件的logging,你可以指定需要打印debug的class,这样就可以最低限度的获取系统调试信息,而不需要在浩如烟海的框架或是别的库文件默认的debug信息里找你需要的那么几条东西了。

另外打印过多的信息会降低系统速度,所以在实际发布的时候,一定要确定log4j.rootLogger的设置不是debug 
Apache POI HSSF读写Excel总结 Apache POI HSSF读写Excel总结
public class SummaryHSSF {

	public static void main(String[] args) throws IOException {
		//创建Workbook对象(这一个对象代表着对应的一个Excel文件)
                     //HSSFWorkbook表示以xls为后缀名的文件
		Workbook wb = new HSSFWorkbook();
		//获得CreationHelper对象,这个应该是一个帮助类
		CreationHelper helper = wb.getCreationHelper();
		//创建Sheet并给名字(表示Excel的一个Sheet)
		Sheet sheet1 = wb.createSheet("HSSF_Sheet_1");		
		Sheet sheet2 = wb.createSheet("HSSF_Sheet_2");
		//Row表示一行Cell表示一列
		Row row = null;
		Cell cell = null;
		for(int i=0;i<60;i=i+2){
			//获得这个sheet的第i行
			row = sheet1.createRow(i);
			//设置行长度自动			
			//row.setHeight((short)500);
			row.setHeightInPoints(20);
			//row.setZeroHeight(true);
			for(int j=0;j<25;j++){		
				//设置每个sheet每一行的宽度,自动,根据需求自行确定
				sheet1.autoSizeColumn(j+1, true);
				//创建一个基本的样式
				CellStyle cellStyle = SummaryHSSF.createStyleCell(wb);
				//获得这一行的每j列
				cell = row.createCell(j);
				if(j==0){
					//设置文字在单元格里面的位置
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
					//先创建字体样式,并把这个样式加到单元格的字体里面
					cellStyle.setFont(createFonts(wb));
					//把这个样式加到单元格里面
					cell.setCellStyle(cellStyle);					
					//给单元格设值
					cell.setCellValue(true);
				}else if(j==1){
					//设置文字在单元格里面的位置
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
					//设置这个样式的格式(Format)
					cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "#,##0.0000");					
					//先创建字体样式,并把这个样式加到单元格的字体里面
					cellStyle.setFont(createFonts(wb));
					//把这个样式加到单元格里面
					cell.setCellStyle(cellStyle);
					//给单元格设值
					cell.setCellValue(new Double(2008.2008));
				}else if(j==2){
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);					
					cellStyle.setFont(createFonts(wb));
					cell.setCellStyle(cellStyle);
					cell.setCellValue(helper.createRichTextString("RichString"+i+j));					
				}else if(j==3){
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
					cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "MM-yyyy-dd");
					cell.setCellStyle(cellStyle);
					cell.setCellValue(new Date());
				}else if(j==24){
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
					cellStyle.setFont(createFonts(wb));
					//设置公式
					cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");					
				}else{					
					cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
					cellStyle = SummaryHSSF.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColors.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);
					cell.setCellStyle(cellStyle);
					cell.setCellValue(1);
				}
			}
		}
		//输出
		OutputStream os = new FileOutputStream(new File("c://SummaryHSSF.xls"));
		wb.write(os);
		os.close();		
	}
	/**
	 * 边框
	 * @param wb
	 * @return
	 */
	public static CellStyle createStyleCell(Workbook wb){
		CellStyle cellStyle = wb.createCellStyle();
		//设置一个单元格边框颜色
		cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
		cellStyle.setBorderTop(CellStyle.BORDER_THIN);
		cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
		cellStyle.setBorderRight(CellStyle.BORDER_THIN);
		//设置一个单元格边框颜色
		cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
		cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
		cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
		cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());		
		return cellStyle;
	}
	/**
	 * 设置文字在单元格里面的位置
	 * CellStyle.ALIGN_CENTER
	 * CellStyle.VERTICAL_CENTER
	 * @param cellStyle
	 * @param halign
	 * @param valign
	 * @return
	 */
	public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){
		//设置上下
		cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
		//设置左右
		cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		return cellStyle;
	}
	/**
	 * 格式化单元格
	 * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找
	 * @param cellStyle
	 * @param fmt
	 * @return
	 */
	public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){
		//还可以用其它方法创建format
		cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));
		return cellStyle;
	}
	/**
	 * 前景和背景填充的着色
	 * @param cellStyle
	 * @param bg IndexedColors.ORANGE.getIndex();
	 * @param fg IndexedColors.ORANGE.getIndex();
	 * @param fp CellStyle.SOLID_FOREGROUND
	 * @return
	 */
	public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){
		//cellStyle.setFillBackgroundColor(bg);
		cellStyle.setFillForegroundColor(fg);
		cellStyle.setFillPattern(fp);
		return cellStyle;
	}
	/**
	 * 设置字体
	 * @param wb
	 * @return
	 */
	public static Font createFonts(Workbook wb){
		//创建Font对象
		Font font = wb.createFont();
		//设置字体
		font.setFontName("黑体");
		//着色
		font.setColor(HSSFColor.BLUE.index);
		//斜体
		font.setItalic(true);
		//字体大小
		font.setFontHeight((short)300);
		return font;
	}
}
poi jxl 生成EXCEL 报表 poi jxl 生成EXCEL 报表
package excel;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/***********************************************************************   
 *   
 *   jxlCreate.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Mar 9, 2010   1:35:19 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class jxlCreate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 // 准备设置excel工作表的标题   
        String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};   
        try {   
            // 获得开始时间   
            long start = System.currentTimeMillis();   
            // 输出的excel的路径   
            String filePath = "c:\\test.xls";   
            // 创建Excel工作薄   
            WritableWorkbook wwb;   
            // 新建立一个jxl文件,即在C盘下生成test.xls   
            OutputStream os = new FileOutputStream(filePath);   
            wwb=Workbook.createWorkbook(os);    
            // 添加第一个工作表并设置第一个Sheet的名字   
            WritableSheet sheet = wwb.createSheet("产品清单", 0);   
            Label label;   
            for(int i=0;i<title.length;i++){   
                // Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y   
                // 在Label对象的子对象中指明单元格的位置和内容   
                label = new Label(i,0,title[i]);   
                // 将定义好的单元格添加到工作表中   
                sheet.addCell(label);   
            }   
            // 下面是填充数据   
            /*   
             * 保存数字到单元格,需要使用jxl.write.Number  
             * 必须使用其完整路径,否则会出现错误  
             * */  
            // 填充产品编号   
            jxl.write.Number number = new jxl.write.Number(0,1,20071001);   
            sheet.addCell(number);   
            // 填充产品名称   
            label = new Label(1,1,"金鸽瓜子");   
            sheet.addCell(label);   
            /*  
             * 定义对于显示金额的公共格式  
             * jxl会自动实现四舍五入  
             * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45  
             * */  
            jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");   
            jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);   
            // 填充产品价格   
            jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);   
            sheet.addCell(nb);   
            // 填充产品数量   
            jxl.write.Number numb = new jxl.write.Number(3,1,200);   
            sheet.addCell(numb);   
            /*  
             * 定义显示日期的公共格式  
             * 如:yyyy-MM-dd hh:mm  
             * */  
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
            String newdate = sdf.format(new Date());   
            // 填充出产日期   
            label = new Label(4,1,newdate);   
            sheet.addCell(label);   
            // 填充产地   
            label = new Label(5,1,"陕西西安");   
            sheet.addCell(label);   
            /*  
             * 显示布尔值  
             * */  
            jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);   
            sheet.addCell(bool);   
            /*  
             * 合并单元格  
             * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的  
             * 表示将从第x+1列,y+1行到m+1列,n+1行合并  
             *   
             * */  
            sheet.mergeCells(0,3,2,3);   
            label = new Label(0,3,"合并了三个单元格");   
            sheet.addCell(label);   
            /*  
             *   
             * 定义公共字体格式  
             * 通过获取一个字体的样式来作为模板  
             * 首先通过web.getSheet(0)获得第一个sheet  
             * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体   
             * */  
            CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();   
            WritableCellFormat wc = new WritableCellFormat();   
            // 设置居中   
            wc.setAlignment(Alignment.CENTRE);   
            // 设置边框线   
            wc.setBorder(Border.ALL, BorderLineStyle.THIN);   
            // 设置单元格的背景颜色   
            wc.setBackground(jxl.format.Colour.RED);   
            label = new Label(1,5,"字体",wc);   
            sheet.addCell(label);   
  
            // 设置字体   
            jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);   
            WritableCellFormat font = new WritableCellFormat(wfont);   
            label = new Label(2,6,"隶书",font);   
            sheet.addCell(label);   
               
            // 写入数据   
            wwb.write();   
            // 关闭文件   
            wwb.close();   
            long end = System.currentTimeMillis();   
            System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);   
        } catch (Exception e) {   
            System.out.println("---出现异常---");   
            e.printStackTrace();   
        }   

	}

}
JS设置及获取Textarea的光标位置 Javascript设置和获取Textarea的光标位置的方法
<html><head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS设置及获取Textarea的光标位置</title>
  <script>
    var isIE = !(!document.all);
    function posCursor(){
      var start=0,end=0; 
      var oTextarea = document.getElementById("textarea");
      if(isIE){
        //selection 当前激活选中区,即高亮文本块,和/或文当中用户可执行某些操作的其它元素。
        //createRange 从当前文本选中区中创建 TextRange 对象,
        //或从控件选中区中创建 controlRange 集合。
        var sTextRange= document.selection.createRange();

        //判断选中的是不是textarea对象
        if(sTextRange.parentElement()== oTextarea){
          //创建一个TextRange对象
          var oTextRange = document.body.createTextRange();
          //移动文本范围以便范围的开始和结束位置能够完全包含给定元素的文本。
          oTextRange.moveToElementText(oTextarea);
          
          //此时得到两个 TextRange
          //oTextRange文本域(textarea)中文本的TextRange对象
          //sTextRange是选中区域文本的TextRange对象
    
          //compareEndPoints方法介绍,compareEndPoints方法用于比较两个TextRange对象的位置
          //StartToEnd  比较TextRange开头与参数TextRange的末尾。
          //StartToStart比较TextRange开头与参数TextRange的开头。
          //EndToStart  比较TextRange末尾与参数TextRange的开头。
          //EndToEnd    比较TextRange末尾与参数TextRange的末尾。
    
          //moveStart方法介绍,更改范围的开始位置
          //character 按字符移动
          //word       按单词移动
          //sentence  按句子移动
          //textedit  启动编辑动作
    
          //这里我们比较oTextRange和sTextRange的开头,的到选中区域的开头位置
          for (start=0; oTextRange.compareEndPoints("StartToStart", sTextRange) < 0; start++){ 
            oTextRange.moveStart('character', 1); 
          }
          //需要计算一下\n的数目(按字符移动的方式不计\n,所以这里加上) 
          for (var i = 0; i <= start; i ++){
            if (oTextarea.value.charAt(i) == '\n'){ 
              start++; 
            }
          } 
    
          //再计算一次结束的位置
          oTextRange.moveToElementText(oTextarea); 
          for (end = 0; oTextRange.compareEndPoints('StartToEnd', sTextRange) < 0; end ++){
            oTextRange.moveStart('character', 1);
          }
          for (var i = 0; i <= end; i ++){
            if (oTextarea.value.charAt(i) == '\n'){ 
              end++; 
            }
          }
        }
      }else{
        start = oTextarea.selectionStart;
        end = oTextarea.selectionEnd;
      }
      document.getElementById("start").value = start; 
      document.getElementById("end").value = end;
    }
    
    
    function moveCursor(){
      var oTextarea = document.getElementById("textarea");
      var start = parseInt(document.getElementById("start").value); 
      var end =  parseInt(document.getElementById("end").value);
      if(isNaN(start)||isNaN(end)){
        alert("位置输入错误");
      }
      if(isIE){
        var oTextRange = oTextarea.createTextRange();
        var LStart = start;
        var LEnd = end;
        var start = 0;
        var end = 0;
        var value = oTextarea.value;
        for(var i=0; i<value.length && i<LStart; i++){
          var c = value.charAt(i);
          if(c!='\n'){
            start++;
          }
        }
        for(var i=value.length-1; i>=LEnd && i>=0; i--){
          var c = value.charAt(i);
          if(c!='\n'){
            end++;
          }
        }
        oTextRange.moveStart('character', start);
        oTextRange.moveEnd('character', -end);
        //oTextRange.collapse(true);
        oTextRange.select();
        oTextarea.focus();
      }else{
        oTextarea.select();
        oTextarea.selectionStart=start;
        oTextarea.selectionEnd=end;
      }
    } 
  </script>
  <body>
    <table border="1" cellspacing="0" cellpadding="0"> 
      <tr> 
        <td>start: <input type="text" id="start" size="3" value="0"/></td> 
        <td>end:   <input type="text" id="end"   size="3" value="0"/></td> 
      </tr> 
      <tr> 
      <td colspan="2"> 
        <textarea id="textarea"
          onKeydown="posCursor()" 
          onKeyup="posCursor()" 
          onmousedown="posCursor()" 
          onmouseup="posCursor()" 
          onfocus="posCursor()" 
          rows="14"
          cols="50">虞美人
春花秋月何时了,往事知多少。
小楼昨夜又东风,故国不堪回首月明中!
雕l栏玉砌应犹在,只是朱颜改。
问君能有几多愁?恰似一江春水向东流。</textarea> 
        </td> 
      </tr> 
      <tr> 
        <td></td> 
        <td><input type="button" onClick="moveCursor()" value="设置光标位置"/></td> 
      </tr> 
    </table> 
  </body>
</html>
Global site tag (gtag.js) - Google Analytics