1,转化文件编码
文件的原始编码是inputCharset,转为outputCharset的编码格式
/*** * * @param srcfile : source file * @param targfile : target file * @param inputCharset : from charset * @param outputCharset : to charset */ public static void convertEncoding(File srcfile, File targfile, String inputCharset, String outputCharset) { FileInputStream fin = null; FileOutputStream fout = null; char[] cbuf = new char[BUFF_SIZE]; int size_char; try { fin = new FileInputStream(srcfile); fout = new FileOutputStream(targfile); InputStreamReader isr = null; OutputStreamWriter osw = null; try { isr = new InputStreamReader(fin, inputCharset); osw = new OutputStreamWriter(fout, outputCharset); while ((size_char = isr.read(cbuf)) != NEGATIVE_ONE) { osw.write(cbuf, 0, size_char); } // } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { try { isr.close(); osw.close(); } catch (IOException e1) { e1.printStackTrace(); } } } catch (FileNotFoundException e1) { e1.printStackTrace(); } finally { try { if (fin != null) { fin.close(); } if (fout != null) { fout.close(); } } catch (IOException e1) { e1.printStackTrace(); } } }
2,判断是否是中文字符(包括中文的标点符号,如。)
/** * 字节数大于1,则返回true * * @param c * @return */ public static boolean isChinese(char c) { return String.valueOf(c).getBytes().length > 1; }
3,获取文件的MD5值
/** * Get MD5 of one file! * * @param file * @return */ public static String getFileMD5(File file) { if (!file.exists() || !file.isFile()) { return null; } MessageDigest digest = null; FileInputStream in = null; byte buffer[] = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); }
4,获取实际类型的class
/*** * 获取实际的子类的class * @param clz * @return */ public staticClass getGenricClassType( @SuppressWarnings("rawtypes") Class clz) { Type type = clz.getGenericSuperclass(); if (type instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) type; Type[] types = pt.getActualTypeArguments(); if (types.length > 0 && types[0] instanceof Class) { return (Class) types[0]; } } return (Class) Object.class; }
应用:在dao层,GoodsDao 继承GenericDao,在GoodsDao 中就不用重复增删改查了。
package com.common.dao.generic; import java.util.List; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.criterion.Example; import com.common.util.SystemUtil; /*** * all dao must extends this class * * @author huangwei * * @param*/ public abstract class GenericDao { /*** * generated by spring configuration file */ protected SessionFactory sessionFactory; protected final Class clz = SystemUtil.getGenricClassType(getClass()); public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } /***************************************************************/ public void add(Object obj) { this.sessionFactory.getCurrentSession().save(obj); } public void save(Object obj) { this.add(obj); } public void delete(Object obj) { this.sessionFactory.getCurrentSession().delete(obj); } public void deleteById(int id) { this.sessionFactory.getCurrentSession().delete(get(id)); } public T get(int id) { return (T) this.sessionFactory.getCurrentSession().get(clz, id); } public void update(Object obj) { this.sessionFactory.getCurrentSession().update(obj); } public List getAll() { return (List ) this.sessionFactory.getCurrentSession() .createCriteria(clz).list(); } /*** * Find in DB depending on conditions * * @param obj * @return */ public List find(Object obj) { if (obj == null) { return this.getAll(); } else { Example example = Example.create(obj).excludeZeroes(); Criteria criteria = this.sessionFactory.getCurrentSession() .createCriteria(clz).add(example); return (List )criteria.list(); } } }
package com.shop.jn.dao; import com.common.dao.generic.GenericDao; import com.shop.jn.entity.Goods; public class GoodsDao extends GenericDao{ }
5,合并字节数组
/*** * 合并字节数组 * @param a * @return */ public static byte[] mergeArray(byte[]... a) { // 合并完之后数组的总长度 int index = 0; int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i].length; } byte[] result = new byte[sum]; for (int i = 0; i < a.length; i++) { int lengthOne = a[i].length; // 拷贝数组 System.arraycopy(a[i], 0, result, index, lengthOne); index = index + lengthOne; } return result; }
6,判断关键字keyword 在srcText 中出现的次数
方式一:
/** * * The number of occurrences of find keyword in srcText * * @param srcText * @param keyword * @return */ public static int findStr1(String srcText, String keyword) { int count = 0; int leng = srcText.length(); int j = 0; for (int i = 0; i < leng; i++) { if (srcText.charAt(i) == keyword.charAt(j)) { j++; if (j == keyword.length()) { count++; j = 0; } } else { i = i - j;// should rollback when not match j = 0; } } return count; }
方式二:
public static int findStr2(String srcText, String keyword) { int count = 0; Pattern p = Pattern.compile(keyword); Matcher m = p.matcher(srcText); while (m.find()) { count++; } return count; }
7, 获取字节数组findTarget 在字节数组source中出现的位置
/*** * * @param source * @param findTarget * :key word * @param pos * :where start from * @return index */ public static int findBytes(byte[] source, byte[] findTarget, int pos) { int i, j, k = 0; i = pos; j = 0; while (i < source.length && j < findTarget.length) { if (source[i] == findTarget[j]) { ++i; ++j; if (j == findTarget.length) { k = k + 1;// k++ break; // j = 0; } } else { i = i - j + 1; j = 0; } } return k == 0 ? -1 : i - j; } /*** * start from 0 * * @param source * @param findTarget * @return */ public static int findBytes(byte[] source, byte[] findTarget) { return findBytes(source, findTarget, 0); }