显示标签为“java”的博文。显示所有博文
显示标签为“java”的博文。显示所有博文

2012年4月24日星期二

ubuntu安装jdk,eclipse,tomcat


jdk安装
cd ~/bin
sudo sh jdk-6u*-linux-i586.bin
设置环境变量
sudo gedit /etc/environment
在文件中添加:
  1. export JAVA_HOME=/home/xxx/bin/jdk1.6.0_31 
  2. export JRE_HOME=/home/xxx/bin/jdk1.6.0_31/jre
  3. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

sudo gedit /etc/profile 
添加
  1. export JAVA_HOME=/home/xxx/bin/jdk1.6.0_31
  2. export JRE_HOME=/home/xxx/bin/jdk1.6.0_31/jre
  3. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  4. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin 

eclipse安装
cd ~/bin
sudo tar xvfz eclipse-jee-indigo-SR2-linux-gtk.tar.gz

sudo apt-get install --no-install-recommends gnome-panel
gnome-desktop-item-edit ~/ --create-new
ubuntu12.4安装不了,只有采用新建.desktop文件的形式
输入命令:sudo gedit /usr/share/applications/Eclipse.desktop
把下面的内容填入文件,做对应的修改,点击保存即可
[Desktop Entry]
Name=Eclipse#AP名称
Comment=Eclipse#注释
Exec=目录/bin/eclipse/eclipse#执行文件目录
Icon=目录/eclipse/icon.xpm#图标位置
Terminal=false
Type=Application
Categories=GNOME;Application;Programing#为这个AP分类
StartupNotify=true

tomcat安装
cd ~/bin
sudo tar zxvf apache-tomcat-6.0.35.tar.gz
mv apache-tomcat-6.0.35 tomcat6 
sudo gedit ~/bin/tomcat6/bin/catalina.sh  
上面添加:
JAVA_HOME=/home/xxx/bin/jdk1.6.0_31 
JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=600M -XX:MaxPermSize=600m -Dcom.sun.management.jmxremote" 
tomcat的端口(一般默认为8080),如果发生冲突,则可以在以下文件修改。
~/bin/tomcat6/conf/server.xml 文件里的:
    <Connector port="9090" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
               redirectPort="8443" /> 
改成9090,或者其它均可(这里用9090吧)。
启动Tomcat:sh ~/bin/tomcat6/bin/starup.sh  










2012年3月29日星期四

Real-World Experiences With Hibernate

original link

写了两个hql查询参数设置辅助类,一个根据参数(?)位置(index)顺序方式,另一个用名称参数
顺序方式
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.type.Type;

@SuppressWarnings( { "unchecked", "unused" })
/**
 * hql查询参数设置包装类  用?顺序赋值的方式
 * @author jeff.yao
 * @date 2012-3-28
 * */
public class QueryParamWarper {
private final List<QueryParam> list = new ArrayList<QueryParam>(16);// 初始化长度
public QueryParamWarper() {
}

// 支持链式操作
public QueryParamWarper add(QueryParam e) {
list.add(e);
return this;
}
// 支持链式操作
public QueryParamWarper add(Object value, Type type) {
list.add(new QueryParam(value, type));
return this;
}
public List<QueryParam> getList() {
return list;
}
public Query setQuery(final Query query) {
for (int index = 0, length = list.size(); index < length; index++) {
QueryParam p = list.get(index);
Type type = p.getType();
query.setParameter(index, p.getValue(), type);
}
return query;
}
public static void main(String[] args) {
QueryParamWarper w = new QueryParamWarper();
for (int i = 0; i < 100; i++) {
w.getList().add(new QueryParam("string" + i, Hibernate.STRING));
}
}
}
class QueryParam {
/*
* http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/type/Type.html
* http://www.roseindia.net/hibernate/hibernate-types.shtml
*/
private Type type;
private Object value;
/**
* @param type Hibernate.Type
* @param value
*/
public QueryParam(Object value, Type type) {
super();
this.type = type;
this.value = value;
}
public Type getType() {
return type;
}
public Object getValue() {
return value;
}
}
名称参数



import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.hibernate.Query;
/**
 * hql查询参数设置辅助类 用命名参数赋值的方式
 * @author jeff.yao
 * @date 2012-3-28
 * */
public class QueryParamHelper {
private Map<String, Object> map = null;

public QueryParamHelper(int initialCapacity) {
map = new HashMap<String, Object>(initialCapacity <= 0 ? 16 : initialCapacity);
}

public QueryParamHelper(Map<String, Object> map) {
if (map != null) {
this.map = map;
}
}

public QueryParamHelper set(String name, Object value) {
map.put(name, value);
return this;
}

@SuppressWarnings("unchecked")
public Query setParameter(Query query) {
if (map != null) {
Set<String> keySet = map.keySet();
for (String name : keySet) {
Object value = map.get(name);
Class clazz = value.getClass();
if (Collection.class.isAssignableFrom(clazz)) {
query.setParameterList(name, (Collection) value);
} else if (clazz.isArray()) {
query.setParameterList(name, (Object[]) value);
} else if (clazz == Date.class) {// 日期用setTimestamp
query.setTimestamp(name, (Date) value);
} else {
query.setParameter(name, value);
}
}
}
return query;
}
}


位或操作(|)在循环中的使用





AbstractSet.java的代码中发现这句


public boolean removeAll(Collection<?> c) {
    boolean modified = false;
    if (size() > c.size()) {
        for (Iterator<?> i = c.iterator(); i.hasNext(); )
            modified |= remove(i.next());//位或操作,只要又一次remove返回true,结果即为true
    } else {
        for (Iterator<?> i = iterator(); i.hasNext(); ) {
            if (c.contains(i.next())) {
                i.remove();
                modified = true;
            }
        }
    }
    return modified;
}


PS:这个代码还有点可以借鉴的地方是,循环前比较两个集合的长度大小,递归小的那个集合

2012年3月11日星期日

NumberFormat使用


  1. double f = 555111.22255;  
  2. java.text.NumberFormat nf=java.text.NumberFormat.getNumberInstance();  
  3. nf.setMinimumIntegerDigits(5);//整数显示最少位数不足前面补零  
  4. nf.setMaximumIntegerDigits(5);//整数显示最多位数超出前面截取  
  5. nf.setMinimumFractionDigits(3); //小数显示最少位数不足后面补零  
  6. nf.setMaximumFractionDigits(3); //小数显示最多位数超出四舍五入  
  7. nf.setGroupingUsed(false);//分组样式 默认为true 200,300.00  
  8. String dig=nf.format(f);   
  9. System.out.println(dig); //55111.223  
  10. nf =NumberFormat.getCurrencyInstance(); //货币 默认地区Local格式  
  11. System.out.println(nf.format(f)); //¥555,111.22  
  12. nf =nf.getPercentInstance(); //百分号  
  13. System.out.println(nf.format(f)); //55,511,122%  

用html形式导出excel

普通的excel导出方式在遇到大数据量的时候经常导致OOM,采用拼接html方式可以解决 
首先设计好要导出的表格样式,将excel另存为为html格式,然后用文本编辑器打开html 
如果需要通用的导出方式,则需要自己拼接标题信息。 
首先定义一个标题定义类,可自定义标题栏的宽度 对齐方式 
Java代码 
  1. public class HtmlExportColumn {  
  2.     public static final String LEFT="xl29";  
  3.     public static final String MIDDLE="xl27";  
  4.     public static final String RIGHT="xl28";  
  5.     public static final String DEFAULT_HEADER_CLASS_TYPE = "xl25";//标题栏的样式  
  6.     private String name = "";// 标题名称  
  7.     private int width = 100;// 列宽度 默认值100  
  8.     private int msoWidthAlt = 80;// mso-width-alt值  
  9.     private int widthPt = 4000;// width值单位为pt  
  10.     private String classType = MIDDLE;// 水平样式xl29/xl27/xl28(左/中/右)  
  11.   
  12.     public HtmlExportColumn() {  
  13.         super();  
  14.     }  
  15.   
  16.     public HtmlExportColumn(String name, int width, int msoWidthAlt,  
  17.             int widthPt, String classType) {  
  18.         super();  
  19.         this.name = name;  
  20.         this.width = width;  
  21.         this.msoWidthAlt = msoWidthAlt;  
  22.         this.widthPt = widthPt;  
  23.         this.classType = classType;  
  24.     }  
  25.         //getter setter...  
  26.   
  27. }  
  
Java代码 
  1.     /** 
  2.      * 写excel顶部信息 <table>标签以前的信息  
  3.      * @param topTemp 头部定义文件 
  4.      * @param os 输出流  
  5.      * @throws Exception  
  6.      */  
  7. public static void writeTop(File topTemp,OutputStream os) throws Exception{    
  8.         byte[] b = new byte[1024];  
  9.         int bytesRead = 0;   
  10.         FileInputStream input = null;   
  11.         try {  
  12.             input = new FileInputStream(topTemp);    
  13.             while ((bytesRead = input.read(b,0,1024)) > 0) {  
  14.                 os.write(b, 0, bytesRead);  
  15.             }  
  16.         } catch (FileNotFoundException e) {  
  17.             logger.error("读取excel头信息文件异常"+topTemp.getAbsolutePath()+"不存在");  
  18.             throw e;  
  19.         } catch (IOException e) {  
  20.             logger.error("读取excel头信息异常"+e);  
  21.             throw e;  
  22.         } finally{  
  23.             try {  
  24.                 input.close();  
  25.                 os.flush();  
  26.             } catch (IOException e) {   
  27.                 logger.error("关闭读取excel头信息异常"+e);  
  28.                 throw e;  
  29.             }    
  30.         }   
  31.           
  32.     }  
  33.   
  34.     /** 
  35.      * 写标题信息  
  36.      * @param columns 列定义数组 
  37.      * @param os 输出流   
  38.      */  
  39.     public static void writeHeader(HtmlExportColumn[] columns,OutputStream os) throws UnsupportedEncodingException, IOException{  
  40.         StringBuilder header = new StringBuilder();  
  41.         for (HtmlExportColumn column : columns) {  
  42.             header.append("<col width=").append(column.getWidth()).append(" style='mso-width-source:userset;mso-width-alt:").append(column.getMsoWidthAlt()).append(";width:").append(column.getWidthPt()).append("pt'>\r\n");  
  43.         }  
  44.         header.append("<tr height=17 style='height:12.75pt'>\r\n");  
  45.         for (HtmlExportColumn column : columns) {  
  46.             header.append("\t<td class=").append(HtmlExportColumn.DEFAULT_HEADER_CLASS_TYPE).append(" style='width:").append(column.getWidthPt()).append("pt'>").append(column.getName()).append("</td>\r\n");  
  47.         }  
  48.         header.append("</tr>\r\n");  
  49.           
  50.         os.write(header.toString().getBytes("gbk"));  
  51.         header = null;  
  52.         os.flush();  
  53.     }   
  54. /** 
  55.      * 写内容信息 数据可以分批读取  
  56.      * @param columns 列定义数组 
  57.      * @param os 输出流 
  58.      * @param data 二维字符数组   
  59.      * */  
  60.     public static void writeData(HtmlExportColumn[] columns,String[][] data,OutputStream os) throws UnsupportedEncodingException, IOException{  
  61.         StringBuilder content = new StringBuilder();  
  62.         // 迭代数据集  
  63.         for (int i = 0; i < data.length; i++) {   
  64.             content.append("<tr height=17 style='height:12.75pt'>\r\n");  
  65.             for (int j = 0; j < data[i].length; j++) {   
  66.                 content.append("\t<td class=").append(columns[j].getClassType()).append(">").append(data[i][j]).append("</td>\r\n");  
  67.             }  
  68.             content.append("</tr>\r\n");  
  69.         }  
  70.         os.write(content.toString().getBytes("gbk"));  
  71.         content = null;  
  72.         os.flush();   
  73.     }   
  74.   
  75. /** 
  76.      * 写尾部信息  
  77.      * @param columns 列定义数组 
  78.      * @param os 输出流   
  79.      */  
  80.     public static void writeTail(HtmlExportColumn[] columns,OutputStream os) throws UnsupportedEncodingException, IOException{  
  81.         StringBuilder tail = new StringBuilder();   
  82.         tail.append("<![if supportMisalignedColumns]>\r\n");  
  83.         tail.append("<tr height=0 style='display:none'>\r\n");  
  84.         for (HtmlExportColumn column : columns) {  
  85.             tail.append("\t<td width=").append(column.getWidth()).append(" style='width:").append(column.getWidthPt()).append("pt'></td>\r\n");  
  86.         }  
  87.         tail.append("</tr>\r\n");  
  88.         tail.append("<![endif]>\r\n");  
  89.         tail.append("</table>\r\n");  
  90.         tail.append("</body>\r\n");  
  91.         tail.append("</html>\r\n");   
  92.         os.write(tail.toString().getBytes());  
  93.         tail = null;  
  94.         os.flush();  
  95.     }