1、Runtime.getRuntime().exec("explorer D:\\Java");
2、java.awt.Desktop.getDesktop().open(new File("D:\\Java"));
4、java.awt.Desktop.getDesktop().browse(...)
3、 try {
String[] cmd = new String[5];
cmd[0] = "cmd";
cmd[1] = "/c";
cmd[2] = "start";
cmd[3] = " ";
cmd[4] = FILE_PATH;
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
4、 /***
*
* @param folder
* : directory
*/
public static void open_directory(String folder) {
File file = new File(folder);
if (!file.exists()) {
return;
}
Runtime runtime = null;
try {
runtime = Runtime.getRuntime();
if (!SystemUtil.isWindows) {
// System.out.println("is linux");
runtime.exec("nautilus " + folder);
} else {
runtime.exec("cmd /c start explorer " + folder);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (null != runtime) {
runtime.runFinalization();
}
}
}
5、 /***
*
* @param filePath
* : only regular file
*/
public static void open_file(String filePath) {
File file = new File(filePath);
if (!file.exists()) {
return;
}
Runtime runtime = null;
try {
runtime = Runtime.getRuntime();
if (!SystemUtil.isWindows) {
// System.out.println("is linux");
runtime.exec("nautilus " + filePath);
} else {
runtime.exec("cmd /c start explorer /select,/e, " + filePath);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (null != runtime) {
runtime.runFinalization();
}
}
}
其他工具类
package com.common.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.apache.commons.lang.StringUtils;
import com.io.hw.exception.MyException;
import com.io.hw.file.util.FileUtils;
import com.string.widget.util.ValueWidget;
import com.time.util.TimeHWUtil;
public class SystemUtil {
public static final String OSNAME = System.getProperty("os.name");
public static final String OSARCH = System.getProperty("os.arch");
public static final String SEPARATOR = System.getProperty("file.separator");
public static final String USER_DIR = System.getProperty("user.dir");
public static final String CURR_ENCODING = System
.getProperty("file.encoding");
public static final String LINE_SEPARATOR = System
.getProperty("line.separator");
public static final String CRLF = LINE_SEPARATOR; // Carriage Return/Line
// Feed
public static final String CRLF_LINUX = "\n";
public static final String CHARSET_UTF = "UTF-8";
public static final String CHARSET_GBK = "GBK";
public static final String CHARSET_GB2312 = "GB2312";
public static final String CHARSET_GB18030 = "GB18030";
public static final String CHARSET_UNICODE = "UNICODE";
public static final String CHARSET_ISO88591 = "ISO-8859-1";
public static boolean isWindows = false;
public static boolean isHP_UX = false;
public static boolean isSolaris = false;
public static boolean isOS32bit = true;
public static final int BUFF_SIZE = 4096;
public static final String KEY_ALGORITHM_RSA = "RSA";
public final static String KEY_ALGORITHM_DES = "DES";
public static final String KEY_ALGORITHM_SHA1withRSA = "SHA1withRSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
public static final String KEY_SHA = "SHA";
public static final String KEY_SHA1 = "SHA-1";
public static final String KEY_MD5 = "MD5";
public static final String KEY_HMAC_SHA256 = "HMACSHA256";
public static final String KEY_HMAC_SHA1 = "HmacSHA1";
public static final String CERTIFICATEFACTORY_X509 = "X.509";
public static final char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static BigInteger bigInt1 = BigInteger.valueOf(1l);
public static final String CONTENTTYPE_HTML = "text/html";
public static final String CONTENTTYPE_JSON = "application/json";
public static final String CONTENTTYPE_X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded";
public static final String CONTENTTYPE_OCTET_STREAM = "application/octet-stream";
public static final String PROCOTOL_HTTP = "http";
public static final String PROCOTOL_HTTPS = "https";
public static final String COLON = ":";
/**
* 字符串空格
*/
public static final String BLANK = " ";
public static final String ENGLISH_PERIOD = ".";
public static final String DIVIDING_LINE = "---------------------------------------";
public static final int NEGATIVE_ONE = -1;
public static final String EMPTY = "";
static {
if (SystemUtil.OSNAME.toLowerCase().contains("window")) {
isWindows = true;
}
if (SystemUtil.OSNAME.toLowerCase().contains("hp-ux")) {
isHP_UX = true;
}
if (SystemUtil.OSNAME.toLowerCase().contains("Solaris")) {
isSolaris = true;
}
if (SystemUtil.OSARCH.contains("64")) {
isOS32bit = false;
}
}
private SystemUtil() {
throw new Error("Don't let anyone instantiate this class.");
}
public static void copyFile(String resourceFileName, String targetFileName)
throws IOException {
File resourceFile = new File(resourceFileName);
File targetFile = new File(targetFileName);
if (!resourceFile.exists()) {
System.out.println("[copyFile ]: resource file has not been found:"
+ resourceFileName);
}
if (!resourceFile.isFile()) {
System.out.println("[copyFile ]: directory can not be copyed:"
+ resourceFileName);
}
if (targetFile.isDirectory()) {
targetFile = new File(targetFile, resourceFile.getName());
}
FileInputStream resource = null;
FileOutputStream target = null;
try {
resource = new FileInputStream(resourceFile);
target = new FileOutputStream(targetFile);
copyFile(resourceFile, targetFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resource != null) {
resource.close();
}
if (target != null) {
target.close();
}
}
}
/**
*
* @param srcFile
* :must be regular file,can not be folder;
* @param targetFile
* :must be regular file,can not be folder;
* @throws IOException
*/
public static void copyFile(File srcFile, File targetFile)
throws IOException {
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(targetFile);
copyFile(in, out);
}
public static void copyFile(InputStream in, FileOutputStream target)
throws IOException {
// File targetFile = new File(targetFileName);
// FileOutputStream target = null;
// if (targetFile.isDirectory())
// {
// targetFile = new File(targetFile, simpleName);
// }
try {
// target = new FileOutputStream(targetFile);
byte[] buffer = new byte[BUFF_SIZE];
int byteNum;
while ((byteNum = in.read(buffer)) != NEGATIVE_ONE) {
target.write(buffer, 0, byteNum);
}
System.out.println("[SystemUtil:copyFile]:file copy successfully!");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
in = null;
}
if (target != null) {
target.close();
target = null;
}
}
}
/**
*
* @param fullpath
* :/a/b/c/d
* @return /a/b/c/
*/
public static String getParentDir(String fullpath) {
// String parentDir = null;
if (ValueWidget.isNullOrEmpty(fullpath)) {
System.out.println("The first argument can not be null");
return null;
}
// if (fullpath.contains("/")) {
// int index=fullpath.lastIndexOf("/") ;
// parentDir = fullpath.substring(0, index+ 1);
// }
return new File(fullpath).getParent();
}
/**
*
* @param fullpath
* :/a/b/c/d
* @return d
*/
public static String getFileSimpleName(String fullpath) {
// String parentDir = null;
if (null == fullpath) {
System.out.println("The first argument can not be null");
return null;
}
// if (fullpath.contains("/")) {
// parentDir = fullpath.substring(fullpath.lastIndexOf("/") + 1);
// }
return new File(fullpath).getName();
}
// public static void main(String[] args) throws IOException
// {
// copyFile("/home/whuang2/study/linux/study/c/main.exe", "/home/whuang2");
// }
public static String convertUTF2ISO(String oldName) {
if (oldName == null) {
return oldName;
}
try {
return new String(oldName.getBytes(CHARSET_UTF), CHARSET_ISO88591);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String convertGBK2ISO(String input) {
if (input == null) {
return input;
}
try {
return new String(input.getBytes(CHARSET_GBK), CHARSET_ISO88591);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/***
* convert GBK to UTF-8
*
* @param input
* @return
* @throws UnsupportedEncodingException
*/
public static byte[] convertGBK2UTF(byte[] input)
throws UnsupportedEncodingException {
return new String(input, SystemUtil.CHARSET_GBK)
.getBytes(SystemUtil.CHARSET_UTF);
}
public static byte[] convertFromeGBK(byte[] input, String toCharset)
throws UnsupportedEncodingException {
return new String(input, SystemUtil.CHARSET_GBK).getBytes(toCharset);
}
/***
* convert utf-8 to gbk
*
* @param input
* @return
*/
public static String convertUTF2GBK(String input) {
if (input == null) {
return input;
}
try {
return new String(input.getBytes(CHARSET_UTF), CHARSET_GBK);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String convertISO2UTF(String oldName) {
if (oldName == null) {
return oldName;
}
try {
return new String(oldName.getBytes(CHARSET_ISO88591), CHARSET_UTF);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String convertISO2GBK(String input) {
if (input == null) {
return input;
}
try {
return new String(input.getBytes(CHARSET_ISO88591), CHARSET_GBK);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static void printFilesSimpleName(File[] files) {
for (File file : files) {
System.out.println(file.getName());
}
}
public static void printFilesFilePath(File[] files) {
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
/***
*
* @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();
}
}
}
/**
* delete the same one
*
* @param list
* @return
*/
public static List<String> guolv(List<String> list) {
List<String> newlist = new ArrayList<String>();
if (list != null && list.size() > 0) {
newlist.add(list.get(0));
for (int i = 1; i < list.size(); i++) {
if (!newlist.contains(list.get(i))) {
newlist.add(list.get(i));
}
}
}
return newlist;
}
/***
* delete CRLF; delete empty line ;delete blank lines
*
* @param input
* @return
*/
private static String deleteCRLFOnce(String input) {
if (ValueWidget.isHasValue(input)) {
return input.replaceAll("((\r\n)|\n)[\\s\t ]*(\\1)+", "$1")
.replaceAll("^((\r\n)|\n)", "");
} else {
return null;
}
}
/***
* Delete all spaces
*
* @param input
* @return
*/
public static String deleteAllCRLF(String input) {
return input.replaceAll("((\r\n)|\n)[\\s\t ]*", "").replaceAll(
"^((\r\n)|\n)", "");
}
/**
* delete CRLF; delete empty line ;delete blank lines
*
* @param input
* @return
*/
public static String deleteCRLF(String input) {
input = SystemUtil.deleteCRLFOnce(input);
return SystemUtil.deleteCRLFOnce(input);
}
/***
* Use uniqueness of collection
*
* @param list
* @return
*/
public static List<String> guolv2(List<String> list) {
Set<String> set = new HashSet<String>(list);
return new ArrayList<String>(set);
}
/**
* delete the same one
*
* @param list
* @return
*/
public static List<Integer> guolvInteger(List<Integer> list) {
List<Integer> newlist = new ArrayList<Integer>();
if (list != null && list.size() > 0) {
newlist.add(list.get(0));
for (int i = 1; i < list.size(); i++) {
if (!newlist.contains(list.get(i))) {
newlist.add(list.get(i));
}
}
}
return newlist;
}
public static List<Integer> guolvInteger2(List<Integer> list) {
Set<Integer> set = new HashSet<Integer>(list);
return new ArrayList<Integer>(set);
}
/**
* 字节数大于1,则返回true
*
* @param c
* @return
*/
public static boolean isChinese(char c) {
return String.valueOf(c).getBytes().length > 1;
}
/**
* 判断str 中的所有字符是否全部是中文字符(包括中文的标点符号)
*
* @param str
* @return
*/
public static boolean isAllChinese(String str) {
char[] cs = null;
if (str.length() == 1) {
cs = new char[1];
cs[0] = str.charAt(0);
} else {
cs = str.toCharArray();
}
for (int i = 0; i < cs.length; i++) {
char c = cs[i];
if (!isChinese(c)) {
return false;
}
}
return true;
}
public static boolean isHasChinses(String str) {
String encodeName = "UTF-8";
for (int i = 0; i < str.length(); i++) {
try {
String singleStr = str.substring(i, i + 1);
int leng = getEncodeLength(singleStr, encodeName);
// System.out.println(singleStr + "\t" + leng);
if (leng == 9)// 表示是中文字符
{
// System.out.println("有中文");
return true;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public static boolean isHasChinses2(String str) {
String encodeName = "UTF-8";
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
try {
char c = chars[i];
int leng = getEncodeLength(c, encodeName);
// System.out.println(singleStr + "\t" + leng);
if (leng == 9)// 表示是中文字符
{
// System.out.println("有中文");
return true;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
}
return false;
}
public static int getEncodeLength(String str, String encodeName)
throws Exception, UnsupportedEncodingException {// 返回值为9 的话,则说明有中文。
if (str.length() != 1) {
throw new Exception("超过一个字符");
}
String encod = URLEncoder.encode(str, "UTF-8");
return encod.length();
}
public static int getEncodeLength(char c, String encodeName)
throws MyException, UnsupportedEncodingException {// 返回值为9
// 的话,则说明有中文。
String encod = URLEncoder.encode(String.valueOf(c), "UTF-8");
return encod.length();
}
/**
* 删除input字符串中的html格式
*
* @param input
* @param length
* 显示的字符的个数
* @return
*/
public static String splitAndFilterString(String input, int length) {
if (input == null || input.trim().equals("")) {
return "";
}
// 去掉所有html元素,
String str = input.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll(
"<[^>]*>", "");
str = str.replaceAll("[(/>)<]", "");
int len = str.length();
if (len <= length) {
return str;
} else {
str = str.substring(0, length);
str += "......";
}
return str;
}
/**
* 返回纯文本,去掉html的所有标签,并且去掉空行
*
* @param input
* @return
*/
public static String splitAndFilterString(String input) {
if (input == null || input.trim().equals("")) {
return "";
}
// 去掉所有html元素,
String str = input.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll(
"<[^>]*>", "");
str = str.replaceAll("[(/>)<]", "");
return SystemUtil.deleteCRLF(str);
}
public static boolean contains(List<Object> list, Object value) {
if (list == null || list.size() == 0) {
return false;
} else {
for (int i = 0; i < list.size(); i++) {
String valueStr;
if (value instanceof File) {
valueStr = ((File) value).getName();
} else {
valueStr = value.toString();
}
Object obj = list.get(i);
if (obj instanceof File) {
if (list.contains(valueStr)
|| ((File) obj).getName().toString()
.equals(valueStr)) {
return true;
}
} else {
if (list.contains(valueStr)
|| list.get(i).toString().equals(valueStr)) {
return true;
}
}
}
}
return false;
}
/**
* minus Set
*
* @param oldList
* @param list
* @return
*/
public static List<Object> getMinusSet(List oldList, List list) {
List selectedList = null;
if (oldList != null) {
selectedList = new ArrayList<Object>();
int leng = oldList.size();
if (leng != 0) {
for (int i = 0; i < leng; i++) {
Object obj = oldList.get(i);
if (!contains(list, obj)) {
selectedList.add(obj);
}
}
}
}
return selectedList;
}
public static List<File> getMinusSetFile(List oldList, List list) {
List selectedList = null;
if (oldList != null) {
selectedList = new ArrayList<File>();
int leng = oldList.size();
if (leng != 0) {
for (int i = 0; i < leng; i++) {
Object obj = oldList.get(i);
if (!contains(list, obj)) {
selectedList.add(obj);
}
}
}
}
return selectedList;
}
public static List<String> getMinusSetStr(List oldList, List list) {
List selectedList = null;
if (oldList != null) {
selectedList = new ArrayList<Object>();
int leng = oldList.size();
if (leng != 0) {
for (int i = 0; i < leng; i++) {
Object obj = oldList.get(i);
if (!contains(list, obj)) {
selectedList.add(obj);
}
}
}
}
return selectedList;
}
/**
* Get MD5 of one file:hex string,test OK!
*
* @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)) != NEGATIVE_ONE) {
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);
}
/***
* Get MD5 of one file!test ok!
*
* @param filepath
* @return
*/
public static String getFileMD5(String filepath) {
File file = new File(filepath);
return getFileMD5(file);
}
/**
* MD5 encrypt,test ok
*
* @param data
* @return byte[]
* @throws Exception
*/
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(SystemUtil.KEY_MD5);
md5.update(data);
return md5.digest();
}
public static byte[] encryptMD5(String data) throws Exception {
return encryptMD5(data.getBytes(SystemUtil.CHARSET_ISO88591));
}
/***
* compare two file by Md5
*
* @param file1
* @param file2
* @return
*/
public static boolean isSameMd5(File file1, File file2) {
String md5_1 = SystemUtil.getFileMD5(file1);
String md5_2 = SystemUtil.getFileMD5(file2);
return md5_1.equals(md5_2);
}
/***
* compare two file by Md5
*
* @param filepath1
* @param filepath2
* @return
*/
public static boolean isSameMd5(String filepath1, String filepath2) {
File file1 = new File(filepath1);
File file2 = new File(filepath2);
return isSameMd5(file1, file2);
}
/***
* the times target occur in <code>int[] ints</code>
*
* @param ints
* @param target
* @return
*/
public static int count(int[] ints, int target) {
int count = 0;
for (int i = 0; i < ints.length; i++) {
if (ints[i] == target) {
count++;
}
}
return count;
}
/***
* Ignore Case
*
* @param strs
* @param target
* @return
*/
public static int count(String[] strs, String target) {
int count = 0;
for (int i = 0; i < strs.length; i++) {
if (strs[i].equalsIgnoreCase(target)) {
count++;
}
}
return count;
}
/***
* Ignore Case
*
* @param list
* @param target
* @return
*/
public static int count(List<String> list, String target) {
int count = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equalsIgnoreCase(target)) {
count++;
}
}
return count;
}
// public static void printSet(Set<Integer>set ){
// for(Iterator<Integer> it=set.iterator();it.hasNext();){
// Integer age=it.next();
// System.out.println(age);
// }
// }
/***
*
* @param list
*/
public static void printList(List<?> list, boolean isNewline,
String delimiter) {
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (isNewline) {
System.out.println(obj);
} else {
System.out.print(obj + delimiter);
}
}
}
public static void printList(List<?> list, String delimiter) {
printList(list, true, delimiter);
}
public static void printStrList(List<String> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static void printSet(Set<Object> set) {
for (Iterator<Object> it = set.iterator(); it.hasNext();) {
Object age = it.next();
System.out.println(age);
}
}
public static <T extends Serializable> T clone2(T obj) {
T clonedObj = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(
baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
clonedObj = (T) ois.readObject();
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return clonedObj;
}
/***
* convert byte array to public key algorithm : RSA
*
* @param keyBytes
* byte[]
* @return RSAPublicKey
* @throws Exception
*/
public static PublicKey convert2PublicKey(byte[] keyBytes) throws Exception {
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);// RSA
PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);
return publicKey;
}
/***
*
* @param keyHexStr
* : hex(16) string
* @return PublicKey
* @throws Exception
*/
public static PublicKey convert2PublicKey(String keyHexStr)
throws Exception {
byte[] keyBytes = toBytes(keyHexStr);
return convert2PublicKey(keyBytes);
}
/**
* convert public key to hex(16) bit string
*
* @param publicKey
* @return hex(16) bit string
*/
public static String convert4PublicKey(PublicKey publicKey) {
return toHexString(publicKey.getEncoded());
}
public static PublicKey getPublicKey(InputStream in)
throws CertificateException {
CertificateFactory cf = CertificateFactory
.getInstance(SystemUtil.CERTIFICATEFACTORY_X509);
X509Certificate oCertServer = (X509Certificate) cf
.generateCertificate(in);
PublicKey pubKey = oCertServer.getPublicKey();
return pubKey;
}
/***
*
* @param hex
* :hex(16) bit string
* @return PublicKey
* @throws CertificateException
*/
public static PublicKey getPublicKey(String hex)
throws CertificateException {
InputStream in = FileUtils.getInputSream2hexString(hex);
return getPublicKey(in);
}
/***
*
* @param modulus
* :N
* @param publicExponent
* :E
* @return
* @throws Exception
*/
public static PublicKey getPublicKey(String modulus, String publicExponent)
throws Exception {
BigInteger m = new BigInteger(modulus);
BigInteger e = new BigInteger(publicExponent);
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
KeyFactory keyFactory = KeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
// public static PublicKey getPublicKey(BigInteger m, BigInteger e){
// RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
// KeyFactory keyFactory = KeyFactory
// .getInstance(SystemUtil.KEY_ALGORITHM_RSA);
//
// PublicKey publicKey = keyFactory.generatePublic(keySpec);
// return publicKey;
// }
/***
*
* @param modulus
* @param ePublicExponent
* @return
* @throws Exception
*/
public static PublicKey getPublicKey(BigInteger modulus,
BigInteger ePublicExponent) throws Exception {
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus,
ePublicExponent);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
/***
*
* @param m
* @param publicExponent
* @return
* @throws Exception
*/
public static PublicKey getPublicKey(BigInteger m, byte[] publicExponent)
throws Exception {
BigInteger e = new BigInteger(publicExponent);
return getPublicKey(m, e);
}
/**
* convert byte array to private key algorithm : RSA
*
* @param keyBytes
* byte[]
* @return RSAPrivateKey
* @throws Exception
*/
public static PrivateKey convert2PrivateKey(byte[] keyBytes)
throws Exception {
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);// RSA
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
return privateKey;
}
/***
*
* @param keyString
* : hex(16) string
* @return
* @throws Exception
*/
public static PrivateKey convert2PrivateKey(String keyString)
throws Exception {
byte[] keyBytes = toBytes(keyString);
return convert2PrivateKey(keyBytes);
}
/***
* convert private key to hex bit string
*
* @param privateKey
* @return keyString : hex(16) string
*/
public static String convert4PrivateKey(PrivateKey privateKey) {
return toHexString(privateKey.getEncoded());
}
/**
* decrypt,key can be a public key, can also be a private key algorithm :
* RSA
*
* @param message
* @return
* @throws Exception
*/
public static byte[] decrypt(byte[] message, Key key) throws Exception {
Cipher cipher = Cipher.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
cipher.init(Cipher.DECRYPT_MODE, key);
return cipher.doFinal(message);
}
/**
* decrypt,key can be a public key, can also be a private key
*
* @param message
* @return
* @throws Exception
*/
public static byte[] decrypt(String message, Key key) throws Exception {
return SystemUtil.decrypt(SystemUtil.toBytes(message), key);
}
/**
* 解密<br>
* 用私钥解密
*
* @param data
* @param publicKeyStr
* @return
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] data, String publicKeyStr)
throws Exception {
// 对密钥解密
byte[] keyBytes = SystemUtil.toBytes(publicKeyStr);
// 取得公钥
PublicKey publicKey = SystemUtil.convert2PublicKey(keyBytes);
return SystemUtil.decrypt(data, publicKey);
}
/**
* decrypt use private key to decrypt http://www.5a520.cn
* http://www.feng123.com
*
* @param data
* @param privateKeyStr
* @return
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] data, String privateKeyStr)
throws Exception {
byte[] keyBytes = SystemUtil.toBytes(privateKeyStr);
return decryptByPrivateKey(data, keyBytes);
}
public static byte[] decryptByPrivateKey(byte[] data, byte[] keyBytes)
throws Exception {
PrivateKey privateKey = SystemUtil.convert2PrivateKey(keyBytes);
return SystemUtil.decrypt(data, privateKey);
}
/***
*
* @param data
* @param N
* :modulus
* @param D
* :private exponent
* @return
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] data, byte[] N, byte[] D)
throws Exception {
PrivateKey privateKey = getPrivateKey(N, D);
return decrypt(data, privateKey);
}
/***
*
* @param dataHex
* :hex bit string
* @param privateKeyStr
* @param charSet
* @return
* @throws UnsupportedEncodingException
* @throws Exception
*/
public static byte[] decryptByPrivateKey(String dataHex,
String privateKeyStr) throws UnsupportedEncodingException,
Exception {
return decryptByPrivateKey(SystemUtil.toBytes(dataHex), privateKeyStr);
}
/**
* DES
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptDES(byte[] data, byte[] key) throws Exception {
// Generate a random number generator which can be trusted
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(key);
// Create a key factory, and then use it to convert DESKeySpec to
// SecretKey
SecretKeyFactory keyFactory = SecretKeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_DES);
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(SystemUtil.KEY_ALGORITHM_DES);
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* DES
*
* @param data
* @param key
* @return
* @throws IOException
* @throws Exception
*/
public static String decryptDES(String data, String key)
throws IOException, Exception {
if (data == null)
return null;
byte[] buf = SystemUtil.decodeBase64(data);
byte[] bt = SystemUtil.decryptDES(buf,
key.getBytes(SystemUtil.CHARSET_UTF));
return new String(bt, SystemUtil.CHARSET_UTF);
}
/**
* encrypt,key can be a public key,can also be a private key algorithm : RSA
*
* @param message
* @return
* @throws Exception
*/
public static byte[] encrypt(byte[] message, Key key) throws Exception {
Cipher cipher = Cipher.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(message);
}
/**
* encrypt,key can be a public key,can also be a private key
*
* @param message
* @return
* @throws Exception
*/
public static byte[] encrypt(String message, Key key) throws Exception {
return SystemUtil.encrypt(
message.getBytes(SystemUtil.CHARSET_ISO88591), key);
}
/**
* encrypt use public key
*
* @param data
* @param publicKeyStr
* : hex bit string
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String publicKeyStr)
throws Exception {
byte[] keyBytes = toBytes(publicKeyStr);
// get public key
PublicKey publicKey = SystemUtil.convert2PublicKey(keyBytes);
return SystemUtil.encrypt(data, publicKey);
}
/***
*
* @param data
* @param publicKeyStr
* : hex bit string
* @param charSet
* @return
* @throws UnsupportedEncodingException
* @throws Exception
*/
public static byte[] encryptByPublicKey(String data, String publicKeyStr,
String charSet) throws UnsupportedEncodingException, Exception {
return encryptByPublicKey(data.getBytes(charSet), publicKeyStr);
}
/**
* encrypt use private key
*
* @param data
* @param privateKeyStr
* @return
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, String privateKeyStr)
throws Exception {
byte[] keyBytes = toBytes(privateKeyStr);
// get private key
Key privateKey = SystemUtil.convert2PrivateKey(keyBytes);
return SystemUtil.encrypt(data, privateKey);
}
/***
*
* @param data
* @param privateKeyStr
* : hex bit string
* @param charSet
* @return
* @throws UnsupportedEncodingException
* @throws Exception
*/
public static byte[] encryptByPrivateKey(String data, String privateKeyStr,
String charSet) throws UnsupportedEncodingException, Exception {
return encryptByPrivateKey(data.getBytes(charSet), privateKeyStr);
}
/**
* DES
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptDES(byte[] data, byte[] key) throws Exception {
// Generate a random number generator which can be trusted
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(key);
// Create a key factory, and then use it to convert DESKeySpec to
// SecretKey
SecretKeyFactory keyFactory = SecretKeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_DES);
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(SystemUtil.KEY_ALGORITHM_DES);
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* DES
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encryptDES(String data, String key) throws Exception {
byte[] bt = SystemUtil.encryptDES(
data.getBytes(SystemUtil.CHARSET_UTF),
key.getBytes(SystemUtil.CHARSET_UTF));
String strs = SystemUtil.encodeBase64(bt);
return strs;
}
/**
* use private key sign algorithm : RSA
*
* @param message
* @param key
* @return
* @throws Exception
*/
public static byte[] sign(byte[] message, PrivateKey key) throws Exception {
Signature signetcheck = Signature
.getInstance(SystemUtil.SIGNATURE_ALGORITHM);
signetcheck.initSign(key);
signetcheck.update(message);
return signetcheck.sign();
}
/**
* use private key sign
*
* @algorithm : RSA
* @param message
* data encrypted
* @param key
* @return
* @throws Exception
*/
public static byte[] sign(String message, PrivateKey key) throws Exception {
return SystemUtil.sign(message.getBytes(SystemUtil.CHARSET_ISO88591),
key);
}
/**
* use private key to generate digit sign
*
* @param data
* data encrypted
* @param privateKeyStr
* private key
*
* @return
* @throws Exception
*/
public static byte[] sign(byte[] data, String privateKeyStr)
throws Exception {
PrivateKey priKey = SystemUtil.convert2PrivateKey(privateKeyStr);
return SystemUtil.sign(data, priKey);
}
/**
*
* @param message
* data encrypted
* @param privateKeyStr
* hex(16) string
* @return
* @throws Exception
*/
public static byte[] sign(String message, String privateKeyStr)
throws Exception {
return sign(toBytes(message), privateKeyStr);
}
/**
* use public key verify sign
*
* @param message
* @param signStr
* @return
* @throws Exception
*/
public static boolean verifySign(byte[] message, byte[] signBytes,
PublicKey key) throws Exception {
if (message == null || signBytes == null || key == null) {
return false;
}
Signature signetcheck = Signature
.getInstance(SystemUtil.SIGNATURE_ALGORITHM);
signetcheck.initVerify(key);
signetcheck.update(message);
return signetcheck.verify(signBytes);
}
public static boolean verifySign(byte[] message, String signStr,
PublicKey key) throws Exception {
byte[] signBytes = toBytes(signStr);
return verifySign(message, signBytes, key);
}
/**
* use public key verify sign
*
* @algorithm : RSA
* @param message
* data encrypted
* @param signStr
* @return
* @throws Exception
*/
public static boolean verifySign(String message, String signStr,
PublicKey key) throws Exception {
return SystemUtil.verifySign(
message.getBytes(SystemUtil.CHARSET_ISO88591),
toBytes(signStr), key);
}
/**
* verify digit sign
*
* @param data
* date encrypted
* @param publicKeyStr
* @param sign
*
* @return success:true ;fail:false
* @throws Exception
*
*/
public static boolean verify(byte[] data, String publicKeyStr, String sign)
throws Exception {
// get public key
PublicKey pubKey = SystemUtil.convert2PublicKey(publicKeyStr);
return SystemUtil.verifySign(data, sign, pubKey);
}
/***
* convert hex(16) bit string to byte array
*
* @param sHex
* : hex(16) bit string
* @return byte[]
*/
public static final byte[] toBytes(String sHex) {
int length = sHex.length();
if (length % 2 != 0) {
String message = "Hex bit string length must be even";
System.err.println(message);
throw new RuntimeException(message);
}
byte[] bytes;
bytes = new byte[sHex.length() / 2];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(
sHex.substring(2 * i, 2 * i + 2), 16);
}
return bytes;
}
/***
* convert byte array to hex(16) bit string
*
* @param byte[]
* @return hex(16) bit string
*/
public static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
sb.append(HEXCHAR[b[i] & 0x0f]);
}
return sb.toString();
}
/**
*
* @param byte[]
* @return
* @throws UnsupportedEncodingException
*/
public static String toString(byte[] b) throws UnsupportedEncodingException {
return new String(b, CHARSET_ISO88591);
}
/**
* SHA encrypt
*
* @param data
* @return byte[]
* @throws Exception
*/
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(SystemUtil.KEY_SHA);
sha.update(data);
return sha.digest();
}
/***
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptSHA(String data) throws Exception {
return encryptSHA(data.getBytes(SystemUtil.CHARSET_ISO88591));
}
/***
* sha-1
*
* @param data
* byte[]
* @return
* @throws Exception
*/
public static byte[] encryptSHA1(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(SystemUtil.KEY_SHA1);
sha.update(data);
return sha.digest();
}
/***
* sha-1
*
* @param data
* :String
* @return
* @throws Exception
*/
public static byte[] encryptSHA1(String data) throws Exception {
return encryptSHA1(data.getBytes(SystemUtil.CHARSET_ISO88591));
}
/***
*
* @param secretKey
* @param input
* @param algorithm
* @return byte[]
* @throws Exception
*/
public static byte[] getHMAC(byte[] secretKey, byte[] input,
String algorithm) throws Exception {
Mac mac = Mac.getInstance(algorithm);
// get the bytes of the hmac key and data string
SecretKey secret = new SecretKeySpec(secretKey, algorithm);
mac.init(secret);
// 对input 进行HMAC 加密
byte[] bytesF1 = mac.doFinal(input);
return bytesF1;
}
/***
* HMACSHA256
*
* @param secretKey
* @param input
* @return
* @throws Exception
*/
public static byte[] getHMAC_SHA256(byte[] secretKey, byte[] input)
throws Exception {
return getHMAC(secretKey, input, SystemUtil.KEY_HMAC_SHA256);
}
/***
* HmacSHA1
*
* @param secretKey
* @param input
* @return
* @throws Exception
*/
public static byte[] getHMAC_SHA1(byte[] secretKey, byte[] input)
throws Exception {
return getHMAC(secretKey, input, SystemUtil.KEY_HMAC_SHA1);
}
/***
*
* @param secretKey
* : hex bit string
* @param input
* : hex bit string
* @return byte array
* @throws Exception
*/
public static byte[] getHMAC_SHA1(String secretKey, String input)
throws Exception {
return getHMAC_SHA1(SystemUtil.toBytes(secretKey),
SystemUtil.toBytes(input));
}
/***
*
* @param keyInfo
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static KeyPair getKeyPair(String keyInfo)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
return getKeyPair(keyInfo.getBytes(SystemUtil.CHARSET_ISO88591));
}
/***
*
* @param keyInfo
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static KeyPair getKeyPair(byte[] keyInfo)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
KeyPairGenerator keygen = KeyPairGenerator
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
SecureRandom random = new SecureRandom();
random.setSeed(keyInfo);
// 初始加密,长度为512,必须是大于512才可以的
keygen.initialize(512, random);
// 取得密钥对
KeyPair kp = keygen.generateKeyPair();
return kp;
}
/***
*
* @param modulus
* :N
* @param privateExponent
* :D
* @return
* @throws Exception
*/
public static PrivateKey getPrivateKey(String modulus,
String privateExponent) throws Exception {
BigInteger m = new BigInteger(modulus);
BigInteger D = new BigInteger(privateExponent);
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(m, D);
KeyFactory keyFactory = KeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
/***
*
* @param m
* : modulus
* @param d
* :private exponent
* @return
* @throws Exception
*/
public static PrivateKey getPrivateKey(BigInteger m, BigInteger d)
throws Exception {
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(m, d);
KeyFactory keyFactory = KeyFactory
.getInstance(SystemUtil.KEY_ALGORITHM_RSA);
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
// public static PrivateKey getPrivateKey(byte[] N_hex, byte[] D_hex){
// return SystemUtil.getPrivateKey(new BigInteger(N_hex), new
// BigInteger(D_hex));
// }
/***
*
* @param m
* @param privateExponent
* :D
* @return
* @throws Exception
*/
public static PrivateKey getPrivateKey(BigInteger m, byte[] privateExponent)// TODO
throws Exception {
BigInteger d = new BigInteger(privateExponent);
return getPrivateKey(m, d.negate());
}
public static PrivateKey getPrivateKey(byte[] m, byte[] privateExponent)
throws Exception {
return getPrivateKey(SystemUtil.getBigIntegerByByteArr(m),
SystemUtil.getBigIntegerByByteArr(privateExponent));
}
/***
* OK
*
* @param publicKey
* @param priKey
* @return
* @throws Exception
*/
public static boolean verifyPrivPubKey(PublicKey publicKey,
PrivateKey priKey) throws Exception {
String message = "3234";
RSAPublicKey rsaPublKey = (RSAPublicKey) publicKey;
RSAPrivateKey rsaPriKey = (RSAPrivateKey) priKey;
byte[] encryptBytes = SystemUtil.encrypt(message, publicKey);
byte[] decryptBytes = SystemUtil.decrypt(encryptBytes, priKey);
return new String(decryptBytes, SystemUtil.CHARSET_ISO88591)
.equals(message)
&& rsaPriKey.getModulus().equals(rsaPublKey.getModulus());
}
/***
* OK
*
* @param m
* :modulus
* @param e
* :public key publicExponent
* @param d
* :private exponent
* @return
* @throws Exception
*/
public static boolean verifyPrivPubKey(BigInteger modulus,
BigInteger publicExponent, BigInteger privateExponent)
throws Exception {
PublicKey pubKey = getPublicKey(modulus, publicExponent);
PrivateKey priKey = getPrivateKey(modulus, privateExponent);
return SystemUtil.verifyPrivPubKey(pubKey, priKey);
}
public static boolean verifyPrivPubKey(String modulus_decimal,
String publicExponent_decimal, String privateExponent_decimal)
throws Exception {
BigInteger modulus = new BigInteger(modulus_decimal);
BigInteger publicExponent = new BigInteger(publicExponent_decimal);
BigInteger privateExponent = new BigInteger(privateExponent_decimal);
return verifyPrivPubKey(modulus, publicExponent, privateExponent);
}
/***
* convert byte array to BigInteger
*
* @param bytes
* @return
*/
public static BigInteger getBigIntegerByByteArr(byte[] bytes) {
return new BigInteger(SystemUtil.toHexString(bytes), 16);
}
/***
* convert BigInteger to byte array
*
* @param bi
* @return
*/
public static byte[] getBytesByBigInteger(BigInteger bi) {
String hexString = bi.toString(16);
return SystemUtil.toBytes(hexString);
}
/***
* get prime number
*
* @param base
* @return
*/
// public static int generatePrime(int base) {
// for (int i = base;; i++) {
// if (isPrime(i)) {
// return i;
// }
// }
// }
public static BigInteger generatePrime(int base) {
return generatePrime(BigInteger.valueOf(base));
}
/***
* get prime number which >=base
*
* @param base
* @return BigInteger
*/
public static BigInteger generatePrime(BigInteger base) {
BigInteger bigInt1 = BigInteger.valueOf(1l);
for (BigInteger i = base;; i = i.add(bigInt1)) {
if (isPrime(i)) {
return i;
}
}
}
/***
* whether is a prime number
*
* @param num
* @return
*/
public static boolean isPrime(int num) {
return isPrime(BigInteger.valueOf(num));
// boolean isPrime = true;
// for (int i = 2; i <= num / 2; i++) {
// if (num % i == 0) {
// isPrime = false;
// break;
// }
// }
// return isPrime;
}
/***
* whether is a prime number
*
* @param num
* @return
*/
public static boolean isPrime(BigInteger num) {
boolean isPrime = true;
BigInteger bigIntTwo = BigInteger.valueOf(2l);
BigInteger bigIntOne = BigInteger.valueOf(1l);
for (BigInteger i = bigIntTwo; num.divide(bigIntTwo).compareTo(i) >= 0; i = i
.add(bigIntOne)) {
if (num.mod(i).intValue() == 0) {
isPrime = false;
break;
}
}
return isPrime;
}
/***
*
* @param ta
* @param isAdd
*/
public static void addSubduction(JTextArea ta, boolean isAdd) {
String argument1 = ta.getText();
BigInteger bigIntArg1 = new BigInteger(argument1);
if (isAdd) {
ta.setText(bigIntArg1.add(bigInt1).toString());
} else {
ta.setText(bigIntArg1.subtract(bigInt1).toString());
}
}
/***
*
* @param ta
* @return
*/
public static BigInteger getBigInteger(JTextArea ta) {
String data = ta.getText();
return new BigInteger(data);
}
/***
*
* @param arg1
* @param arg2
* @return
*/
public static BigInteger mod(BigInteger arg1, BigInteger arg2) {
return arg1.mod(arg2);
}
/***
*
* @param ta1
* @param ta2
* @return
*/
public static BigInteger mod(JTextArea ta1, JTextArea ta2) {
BigInteger arg1 = new BigInteger(ta1.getText());
BigInteger arg2 = new BigInteger(ta2.getText());
return mod(arg1, arg2);
}
/***
*
* @param ta1
* @param ta2
* @return
*/
public static BigInteger mod(JTextField ta1, JTextField ta2) {
BigInteger arg1 = new BigInteger(ta1.getText());
BigInteger arg2 = new BigInteger(ta2.getText());
return mod(arg1, arg2);
}
/***
* convert int to hex string
*
* @param bigInt
* @return
*/
public static String toHexString(BigInteger bigInt) {
return bigInt.toString(16);
}
/***
*
* @param ta
* @return
*/
public static String toHexString(JTextArea ta) {
BigInteger arg1 = new BigInteger(ta.getText());
return toHexString(arg1);
}
/***
* encode by Base64
*/
public static String encodeBase64(byte[] input) throws Exception {
Class clazz = Class
.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
Method mainMethod = clazz.getMethod("encode", byte[].class);
mainMethod.setAccessible(true);
Object retObj = mainMethod.invoke(null, new Object[] { input });
return (String) retObj;
}
/***
* decode by Base64
*/
public static byte[] decodeBase64(String input) throws Exception {
Class clazz = Class
.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
Method mainMethod = clazz.getMethod("decode", String.class);
mainMethod.setAccessible(true);
Object retObj = mainMethod.invoke(null, input);
return (byte[]) retObj;
}
/**
* 编码
*
* @param bstr
* @return String
*/
public static String encode(byte[] bstr) {
return new sun.misc.BASE64Encoder().encode(bstr);
}
/**
* 解码
*
* @param str
* @return string
*/
public static byte[] decode(String str) {
byte[] bt = null;
try {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
bt = decoder.decodeBuffer(str);
} catch (IOException e) {
e.printStackTrace();
}
return bt;
}
/***
* 获取实际的子类的class
*
* @param clz
* @return
*/
public static <T> Class<T> 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;
}
// public static byte[] decodeBufferBASE64Decoder(String data) {
//
// try {
// Class clazz = Class.forName("sun.misc.BASE64Decoder");
// Method mainMethod;
// mainMethod = clazz.getMethod("decodeBuffer", String.class);
// mainMethod.setAccessible(true);
// Object retObj = mainMethod.invoke(clazz.newInstance(), data);
// return (byte[]) retObj;
// } catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InstantiationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return null;
//
// }
//
// public static String encodeBASE64Encoder(byte[] bt) {
//
// try {
// Class clazz = Class.forName("sun.misc.BASE64Decoder");
// Method mainMethod;
// mainMethod = clazz.getMethod("encode", byte[].class);
// mainMethod.setAccessible(true);
// Object retObj = mainMethod.invoke(clazz.newInstance(), bt);
// return (String) retObj;
// } catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InstantiationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return null;
//
// }
/***
* print byte array
*
* @param bytes
* @param isNeedPlus
* : Whether to add a plus sign
* @return such as
* "[ 52, 116, -18, 34, 70, -43, 56, -60, 17, -67, -52, -97 ] ;length:16"
*/
public static String printBytes(byte[] bytes, boolean isNeedPlus) {
StringBuffer sb = new StringBuffer("[ ");
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] > 0 && isNeedPlus) {
sb.append("+" + String.valueOf(bytes[i]));
} else {
sb.append(bytes[i]);
}
if (i < bytes.length - 1) {
sb.append(", ");
}
}
sb.append(" ]").append(" ;length:" + bytes.length);
return sb.toString();
}
/***
* Format a byte array
*
* @param bytes
* @return
*/
public static String formatBytes(byte[] bytes) {
return printBytes(bytes, false);
}
/***
* Format a byte array
*
* @param hex
* @return
*/
public static String formatBytes(String hex) {
return formatBytes(SystemUtil.toBytes(hex));
}
/***
*
* @param bytes
*/
public static void printBytes(byte[] bytes) {
System.out.println(formatBytes(bytes));
}
/***
*
* @param hex
*/
public static void printBytes(String hex) {
System.out.println(formatBytes(hex));
}
/***
* 合并字节数组
*
* @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;
if (lengthOne == 0) {
continue;
}
// 拷贝数组
System.arraycopy(a[i], 0, result, index, lengthOne);
index = index + lengthOne;
}
return result;
}
/***
* merge two int array to a string
*
* @param a
* @param b
* @return
*/
public static String merge(int[] a, int[] b) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < a.length; i++) {
sb.append(a[i]);
sb.append(",");
}
for (int i = 0; i < b.length; i++) {
sb.append(b[i]);
sb.append(",");
}
int leng_str = sb.toString().length();
return sb.substring(0, leng_str - 1);
}
/***
* Get top <code>frontNum</code> bytes
*
* @param source
* @param frontNum
* @return
*/
public static byte[] getFrontBytes(byte[] source, int frontNum) {
byte[] frontBytes = new byte[frontNum];
System.arraycopy(source, 0, frontBytes, 0, frontNum);
return frontBytes;
}
public static byte[] getAfterBytes(byte[] source, int afterNum) {
int length = source.length;
byte[] afterBytes = new byte[afterNum];
System.arraycopy(source, length - afterNum, afterBytes, 0, afterNum);
return afterBytes;
}
/***
*
* @param frontNum
* @param source
* @return
*/
public static byte[] filterFrontBytes(int frontNum, byte[] source) {
return copyByte(frontNum, source.length - frontNum, source);
}
public static byte[] copyByte(int start, int length, byte[] source) {
byte[] des = new byte[length];
System.arraycopy(source, start, des, 0, length);
return des;
}
public static boolean arrayIsEqual(byte[] a, byte[] b) {
if (a != null && b != null) {
if (a.length != b.length) {
return false;
} else {
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i]) {
return false;
}
}
}
}
return true;
}
/***
* Delete the slash which is in front of input
*
* @param input
* @return
*/
public static String deleteFrontSlash(String input) {
String result = input.replaceAll("^/", "");
return result;
}
/***
* Delete the brackets
*
* @param input
* @return
*/
public static String deletebrackets(String input) {
input = input.replaceAll("\\[?(.*)\\]?", "$1");
return input;
}
/***
* Delete the curly braces ({ })
*
* @param input
* @return
*/
public static String deleteCurlyBraces(String input) {
input = input.replaceAll("\\{?(.*)\\}", "$1");
return input;
}
public static String deleteSingleQuotes(String input) {
input = input.replaceAll("'?(.*)'", "$1");
return input;
}
/***
* 以斜杠和?分割,获取最后一个 / ? input
* :http://localhost:8081/SSLServer/addUser.security?a=b
* result:addUser.security
*/
public static String getSerlvetNameByQuestionMark(String url) {
String input = null;
input = url.replaceAll(".*/([\\w\\.]*)(\\?.*)?$", "$1");
return input;
}
/***
* input :http://localhost:8081/SSLServer/addUser.security?a=b
* result:addUser
*/
public static String getSerlvetName(String url) {
String input = null;
input = url.replaceAll(".*/([\\w\\.]*)(\\..*)$", "$1");
if (input.contains("?")) {
input = getSerlvetNameByQuestionMark(input);
}
return input;
}
/***
* get port
*
* @param url
* such as http://localhost:8081/SSLServer/addUser.A?a=b
* @return 8081
*
*/
public static String getHttpPort(String url) {
String input = url.replaceAll("^.+:([\\d]+)/.*$", "$1");
return input;
}
/***
*
*
* @param url
* such as localhost/SSLServer/addUser.A?a=b
* @return SSLServer
*/
public static String getProjectName(String url) {
String input = url.replaceAll("^.+(:[\\d]+)?/(.*)/.*$", "$2");
return input;
}
/***
* get Http request ip
*
* @param url
* @return
*/
public static String getHttpIp(String url) {
String input = url.replaceAll("^(.*://)?([^/:]*)(:[\\d]+)?/.*$", "$2");
return input;
}
/***
* be similar to grep in linux os
*
* @param keyWord
* @param input
* :List
* @return
*/
public static List<String> grepStr(String keyWord, String input) {
String regex = ".*" + keyWord + ".*";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
List<String> grepResult = new ArrayList<String>();
if (m.find()) {
grepResult.add(m.group());
}
return grepResult;
}
/****
* old:java.lang.String ; result: String
*
* @param input
* @return
*/
public static String getLastNameByPeriod(String input) {
input = input.replaceAll("^.*\\.([\\w]+)", "$1");
return input;
}
/***
*
* @param input
* :2013-06-15
* @return
*/
public static boolean isDate(String input) {
String regex = "[\\d]{4}-[\\d]{1,2}-[\\d]{1,2}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
public static String grepSimple(String keyWord, String input) {
List<String> grepResult = grepStr(keyWord, input);
if (grepResult.size() > 0) {
return grepResult.get(0);
} else {
return null;
}
}
public static int indexOf(String hexStr, String keyWord) {
return hexStr.indexOf(keyWord.toLowerCase()) / 2;
}
public static int indexOf(byte[] bytes, String keyWord) {
return indexOf(SystemUtil.toHexString(bytes), keyWord.toLowerCase());
}
public static int indexOf(byte[] bytes, byte[] keyWord) {
return indexOf(SystemUtil.toHexString(bytes),
SystemUtil.toHexString(keyWord).toLowerCase());
}
/**
*
* 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;
}
public static int findStr3(String srcText, String keyword) {
return findStr(srcText, keyword, 0);
}
public static int findStr(String srcText, String keyWord, int pos) {
int i, j, k = 0;
i = pos;
j = 0;
while (i < srcText.length() && j < keyWord.length()) {
if (srcText.charAt(i) == keyWord.charAt(j)) {
++i;
++j;
if (j == keyWord.length()) {
k = k + 1;// k++
j = 0;
}
} else {
i = i - j + 1;
j = 0;
}
}
return k;
}
/***
*
* @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);
}
// / <summary>
// / 判断两个byte[]包含的值是否相等
// / </summary>
// / <param name="bytes1">byte[] 1</param>
// / <param name="bytes2">byte[] 2</param>
// / <returns>相等返回True,反之False</returns>
public static boolean isEqualBytes(byte[] bytes1, byte[] bytes2) {
// 比较长度是否一样
if (bytes1.length != bytes2.length) {
return false;
}
// 比较成员是否对应相等
for (int i = 0; i < bytes1.length; i++) {
if (bytes1[i] != bytes2[i]) {
return false;
}
}
return true;
}
/***
* compare tow byte[]
*
* @param bytes1
* @param bytes2
* @return
*/
public static boolean isEquals(byte[] bytes1, byte[] bytes2) {
if (bytes1 == bytes2 && bytes1 == null) {
return true;
} else {
if (bytes1.length != bytes2.length) {
return false;
} else {
int index = findBytes(bytes1, bytes2, 0);
if (index == -1) {
return false;
} else {
return true;
}
}
}
}
public static boolean isEqualChars(char[] chars1, char[] chars2) {
// 比较长度是否一样
if (chars1.length != chars2.length) {
return false;
}
// 比较成员是否对应相等
for (int i = 0; i < chars1.length; i++) {
if (chars1[i] != chars2[i]) {
return false;
}
}
return true;
}
/***
* //
* D:\xxx\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core
* \tmp0\wtpwebapps\shop_goods\images //
* D:\xxx\eclipse\workspace\shop_goods\ upload
*
* @param realPath2
* @param projectName
* @return
*/
public static String getRealPath(String realPath2, String projectName) {
String realpath = realPath2.replaceAll(".metadata.*(" + projectName
+ ")", "$1");
return realpath;
}
/***
* java web //
* D:\xxx\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server
* .core\tmp0\wtpwebapps\shop_goods\images //
* D:\xxx\eclipse\workspace\shop_goods\ upload
*
* @param uploadFolderName
* @param projectName
* @param sContext
* @return
*/
public static String getUploadedPath(String uploadFolderName,
String projectName, ServletContext sContext) {
String uploadFolder_tmp = null;
if (uploadFolderName.startsWith("/")) {
uploadFolder_tmp = uploadFolderName;
} else {
uploadFolder_tmp = "/" + uploadFolderName;// "/upload"
}
String realpath = sContext.getRealPath(uploadFolder_tmp);
// project name ,eg.shop_goods
projectName = SystemUtil.deleteFrontSlash(projectName);
realpath = SystemUtil.getRealPath(realpath, projectName);
return realpath;
}
/***
* download file
*
* @param response
* @param downloadFilePath
* @param filename
* @throws IOException
*/
public static void downloadFile(HttpServletResponse response,
File downloadFilePath, String filename) throws IOException {
FileInputStream fin = new FileInputStream(downloadFilePath);
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(fin);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
if (filename == null) {
filename = downloadFilePath.getName();
}
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(filename.getBytes()));
response.addHeader("Content-Length", "" + downloadFilePath.length());
OutputStream toClient = new BufferedOutputStream(
response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
}
/***
* download file
*
* @param response
* @param downloadFilePath
* @throws IOException
*/
public static void downloadFile(HttpServletResponse response,
File downloadFilePath) throws IOException {
downloadFile(response, downloadFilePath, null);
}
/***
* convert List to String[]
*
* @param list
* @return
*/
public static String[] list2Array(List<String> list) {
return list.toArray(new String[list.size()]);
}
/***
* print per
*
* @param strs
*/
public static void printArray(Object[] strs, boolean isNewLine,
String delimiter) {
List<Object> list = Arrays.asList(strs);
printList(list, isNewLine, delimiter);
// for(int i=0;i<strs.length;i++){
// System.out.println(strs[i]);
// }
}
public static void printArray(int[] ints) {
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i]);
if (i < ints.length - 1) {
System.out.print(" ,");
}
}
System.out.println();
}
/***
* Print two-dimensional array 0_0 0_1 0_2 0_3 0_4 1_0 1_1 1_2 1_3 1_4
*
* @param arrays
*/
public
package com.common.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import com.string.widget.util.RandomUtils;
/**
* Description User: I8800
*/
public class ZipUtil {
/**
* 获得zip压缩包中文件数(包括目录)
*
* @param zipFile
* @return
*/
public static int getFiles(final ZipFile zipFile) {
return zipFile.size();
}
/**
* 获得zip压缩包二进制数组中文件数(包括目录)
*
* @param zipBytes
* @return
* @throws IOException
*/
public static int getFiles(final byte[] zipBytes) throws IOException {
int files = 0;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
zipBytes);
ZipInputStream zipInputStream = new ZipInputStream(byteArrayInputStream);
while (zipInputStream.getNextEntry() != null) {
files++;
}
zipInputStream.closeEntry();
zipInputStream.close();
byteArrayInputStream.close();
return files;
}
/**
* 获得zip压缩包中文件数(包括目录)
*
* @param filename
* @return
* @throws IOException
*/
public static int getFiles(final String filename) throws IOException {
ZipFile zipFile = new ZipFile(filename);
int files = getFiles(zipFile);
zipFile.close();
return files;
}
/**
* 获得zip压缩包中文件数(包括目录)
*
* @param file
* @return
* @throws IOException
*/
public static int getFiles(final File file) throws IOException {
ZipFile zipFile = new ZipFile(file);
int files = getFiles(zipFile);
zipFile.close();
return files;
}
/**
* 从zip包中读取给定文件名的内容
*
* @param zipFilename
* @param name
* 获得内容的文件全文件名 注:大小写敏感
* @return
* @throws IOException
*/
public static byte[] getContent(final String zipFilename, final String name)
throws IOException {
ZipFile zipFile = new ZipFile(zipFilename);
byte[] bytes = getContent(zipFile, name);
zipFile.close();
return bytes;
}
/**
* 从zip包中读取给定文件名的内容
*
* @param file
* @param name
* 获得内容的文件全文件名 注:大小写敏感
* @return
* @throws IOException
*/
public static byte[] getContent(final File file, final String name)
throws IOException {
ZipFile zipFile = new ZipFile(file);
byte[] bytes = getContent(zipFile, name);
zipFile.close();
return bytes;
}
/**
* 从zip包中读取给定文件名的内容
*
* @param zipFile
* @param name
* 获得内容的文件全文件名 注:大小写敏感
* @return
* @throws IOException
*/
public static byte[] getContent(final ZipFile zipFile, final String name)
throws IOException {
ZipEntry zipEntry = zipFile.getEntry(name);
return getContent(zipFile, zipEntry);
}
/**
* 从zip包中读取给定文件名的内容
*
* @param zipFile
* @param zipEntry
* @return
* @throws IOException
*/
public static byte[] getContent(final ZipFile zipFile,
final ZipEntry zipEntry) throws IOException {
InputStream inputStream = zipFile.getInputStream(zipEntry);
byte[] buffer = new byte[1024];
byte[] bytes = new byte[0];
int length;
while ((length = (inputStream.read(buffer))) != -1) {
byte[] readBytes = new byte[length];
System.arraycopy(buffer, 0, readBytes, 0, length);
bytes = SystemUtil.mergeArray(bytes, readBytes);
}
inputStream.close();
return bytes;
}
/**
* 从二进制zip包byte数组中获取给定文件名的内容
*
* @param zipBytes
* @param name
* @return
* @throws IOException
* @throws InterruptedException
*/
public static byte[] getContent(final byte[] zipBytes, final String name)
throws IOException, InterruptedException {
File file = File.createTempFile(RandomUtils.getTimeRandom(), "."
+ "zip");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(zipBytes);
fileOutputStream.flush();
fileOutputStream.close();
byte[] bytes = getContent(file, name);
file.delete();
return bytes;
}
/**
* @param zipFilename
* @param filename
* @throws IOException
*/
public static void add(final String zipFilename, final String filename)
throws IOException {
File zipFile = new File(zipFilename);
File file = new File(filename);
add(zipFile, file);
}
/**
* @param zipFile
* @param file
* @throws IOException
*/
public static void add(final File zipFile, final File file)
throws IOException {
FileInputStream fileInputStream = new FileInputStream(file);
int length = fileInputStream.available();
byte[] bytes = new byte[length];
fileInputStream.read(bytes);
fileInputStream.close();
add(zipFile, file.getName(), bytes);
}
/**
* @param zipFile
* @param filename
* @param bytes
* @throws IOException
*/
public static void add(final File zipFile, final String filename,
final byte[] bytes) throws IOException {
ZipFile zip = new ZipFile(zipFile);
Enumeration entries = zip.entries();
FileOutputStream outputStream = new FileOutputStream(zipFile, true);
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
addEntry(zipOutputStream, entry,
getContent(zipFile, entry.getName()));
}
ZipEntry zipEntry = new ZipEntry(filename);
addEntry(zipOutputStream, zipEntry, bytes);
zipOutputStream.flush();
zipOutputStream.close();
outputStream.flush();
outputStream.close();
zip.close();
}
/**
* @param zipFile
* @param filename
* @throws IOException
*/
public static void delete(final File zipFile, final String filename)
throws IOException {
ZipFile zip = new ZipFile(zipFile);
Enumeration entries = zip.entries();
FileOutputStream outputStream = new FileOutputStream(zipFile, true);
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (!entry.getName().equalsIgnoreCase(filename)) {
addEntry(zipOutputStream, entry,
getContent(zipFile, entry.getName()));
}
}
zipOutputStream.flush();
zipOutputStream.close();
outputStream.flush();
outputStream.close();
zip.close();
}
/**
* 添加单个ZipEntry
*
* @param zipOutputStream
* @param zipEntry
* @param bytes
* @throws IOException
*/
private static void addEntry(ZipOutputStream zipOutputStream,
ZipEntry zipEntry, byte[] bytes) throws IOException {
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.write(bytes);
zipOutputStream.flush();
zipOutputStream.closeEntry();
}
/**
* 获得zip包中的文件名列表
*
* @param zipFile
* @return
*/
public static List<String> list(final ZipFile zipFile) {
List<String> list = new ArrayList<String>();
Enumeration zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) zipEntries.nextElement();
list.add(entry.getName());
}
return list;
}
/**
* 获得zip包中的文件名列表
*
* @param file
* @return
*/
public static List<String> list(final File file) throws IOException {
ZipFile zipFile = new ZipFile(file);
List<String> filenameList = list(zipFile);
zipFile.close();
return filenameList;
}
public static InputStream getInputStreamFromZip(final ZipFile zipFile,
final String name) throws IOException {
ZipEntry zipEntry = zipFile.getEntry(name);
InputStream inputStream = zipFile.getInputStream(zipEntry);
return inputStream;
}
/***
*
* @param zipFilename
* @param name
* @return InputStream
* @throws IOException
*/
public static InputStream getInputStreamFromZip(final String zipFilename,
final String name) throws IOException {
ZipFile zipFile = new ZipFile(zipFilename);
return getInputStreamFromZip(zipFile, name);
}
public static InputStream getInputStreamFromZip(final File file,
final String name) throws ZipException, IOException {
ZipFile zipFile = new ZipFile(file);
return getInputStreamFromZip(zipFile, name);
}
/**
* 获得zip包中的文件名列表
*
* @param filename
* @return
* @throws IOException
*/
public static List<String> list(final String filename) throws IOException {
File file = new File(filename);
return list(file);
}
/**
* 把源文件夹压缩成zip包
*
* @param zipFile
* @param srcFolder
* @throws IOException
*/
public static void compress(final File zipFile, final String srcFolder)
throws IOException {
File folder = new File(srcFolder);
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
fileOutputStream);
ZipOutputStream zipOutputStream = new ZipOutputStream(
bufferedOutputStream);
if (!folder.isDirectory()) {
compress(zipOutputStream, folder, srcFolder);
} else {
List<String> filenameList = listFilename(srcFolder);
for (String filename : filenameList) {
File file = new File(filename);
compress(zipOutputStream, file, srcFolder);
}
}
zipOutputStream.flush();
zipOutputStream.close();
bufferedOutputStream.flush();
bufferedOutputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
}
/**
* @param zipOutputStream
* @param file
* @throws IOException
*/
private static void compress(final ZipOutputStream zipOutputStream,
final File file, final String srcFolder) throws IOException {
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream, 1024);
ZipEntry entry = new ZipEntry(file.getPath().substring(
srcFolder.length() + 1));
zipOutputStream.putNextEntry(entry);
byte[] data = new byte[bufferedInputStream.available()];
bufferedInputStream.read(data);
zipOutputStream.write(data);
zipOutputStream.flush();
bufferedInputStream.close();
fileInputStream.close();
}
/**
* 解压zip包到目标目录里面
*
* @param zipFile
* @param targetFolder
* @throws IOException
*/
public static void decompress(final File zipFile, final String targetFolder)
throws IOException {
List<String> filenameList = list(zipFile);
for (String filename : filenameList) {
File file = new File(targetFolder + File.separatorChar + filename);
if (!file.exists()) {
File parentPath = file.getParentFile();
if (!parentPath.exists()) {
parentPath.mkdirs();
}
file.createNewFile();
}
write(file, getContent(zipFile, filename));
}
}
/**
* 解压zip包二进制数组到目标目录里面
*
* @param zipBytes
* @param targetFolder
* @throws IOException
*/
public static void decompress(final byte[] zipBytes,
final String targetFolder) throws IOException {
File tempFile = File.createTempFile(RandomUtils.getTimeRandom(), "."
+ "zip");
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
fileOutputStream.write(zipBytes);
fileOutputStream.flush();
fileOutputStream.close();
System.out.println(tempFile.getPath());
decompress(tempFile, targetFolder);
tempFile.delete();
}
/**
* 写入单个文件
*
* @param file
* @param bytes
* @throws IOException
*/
private static void write(final File file, final byte[] bytes)
throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
}
/**
* 遍历出所有的文件名和目录名
*
* @param path
* @return
*/
public static List<String> listFilename(final String path) {
List<String> list = new ArrayList<String>();
File folder = new File(path);
if (folder.isDirectory()) {
File[] files = folder.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
for (String filename : listFilename(file.getPath())) {
list.add(filename);
}
} else {
list.add(file.getPath());
}
}
} else {
list.add(folder.getPath());
}
} else {
list.add(folder.getPath());
}
return list;
}
}
import java.io.IOException;
public class ProcessUtil
{
private static Process process = null;
static
{
}
private ProcessUtil()
{
throw new Error("Don't let anyone instantiate this class.");
}
public static Process getPro(String command) throws IOException
{
process = Runtime.getRuntime().exec(command);
return process;
}
public static Process getPro(String[] command) throws IOException
{
process = Runtime.getRuntime().exec(command);
return process;
}
}