字符数组转String
package com.sunsheen.hcc.fabric.utils;
/**
* 字符数组工具
* @author WangSong
*
*/
public class ByteArryUtil {
/**
* 字节数组转成16进制表示格式的字符串
*
* @param byteArray
* 需要转换的字节数组
* @return 16进制表示格式的字符串
**/
public static String toHexString(byte[] byteArray) {
if (byteArray == null || byteArray.length < 1)
throw new IllegalArgumentException("this byteArray must not be null or empty");
final StringBuilder hexString = new StringBuilder();
for (int i = 0; i < byteArray.length; i++) {
if ((byteArray[i] & 0xff) < 0x10)//0~F前面不零
hexString.append("0");
hexString.append(Integer.toHexString(0xFF & byteArray[i]));
}
return hexString.toString().toLowerCase();
}
}
json、map、list、String格式数据互转
package com.sunsheen.hcc.fabric.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.map.ListOrderedMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
/**
* json工具
* @author WangSong
*
*/
public class JsonParseUtil {
/**
* 將jsonArry字符串转换成map(里面可能是多个对象的情况)
* @param json
* @return
*/
public static List
实体对象转换成map
Contract contract = new Contract ();
try{
Mapparams = new HashMap ();
//将对象信息封装到map
Class clazz = contract.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
String name = f.getName();//当前字段
if(name.equals("serialVersionUID"))
continue;
PropertyDescriptor descriptor = new PropertyDescriptor(name, clazz);//得到当前字段信息
Method readMethod = descriptor.getReadMethod();
Object value = readMethod.invoke(contract);//得到当前字段值
if(null != value)
params.put(name, value);
前后端数据格式转换
package com.sunsheen.hcc.fabric.utils;
import java.util.Date;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import com.sunsheen.edu.case1.entity.ResponseMsg;
import com.sunsheen.jfids.commons.beanutils.BeanUtils;
import com.sunsheen.jfids.commons.beanutils.ConvertUtils;
import com.sunsheen.jfids.commons.beanutils.converters.DateConverter;
import com.sunsheen.jfids.gson.Gson;
/**
* 前后端数据转换工具类
* @author WangSong
*
*/
public class WebUtils {
/**
* 把request对象中的请求参数封装到bean中
* @param request http请求
* @param clazz 需要存入信息的对象class
* @return
*/
public staticT request2Bean(HttpServletRequest request,Class clazz){
try{
T bean = clazz.newInstance();
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()){
String name = (String) e.nextElement();
String value = request.getParameter(name);
if(null != value && !"".equals(value)){
//日期注册
if(value.contains("-")){
DateConverter converter = new DateConverter();
converter.setPattern("yyyy-MM-dd");
ConvertUtils.register(converter,Date.class);
}
//对象赋值
BeanUtils.setProperty(bean, name, value);
}
}
return bean;
}catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 响应到页面的数据
* @param code
* @param data
* @return
*/
public static String responseMsg(Integer code, Object data) {
ResponseMsg msg = new ResponseMsg(data,code);
return new Gson().toJson(msg);
}
/**
* 响应到页面的数据
* @param data
* @return
*/
public static String responseMsg(Object data) {
ResponseMsg msg = new ResponseMsg(data);
return new Gson().toJson(msg);
}
}
得到指定文件夹大小
package com.sunsheen.jfids.studio.monitor.utils.local;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
/**
* 得到指定文件夹大小
* @author WangSong
*
*/
public class FileUtil {
private ExecutorService service;
final private AtomicLong pendingFileVisits = new AtomicLong();
/** 通过CountdownLatch 得到文件夹大小的初始常量 **/
final private AtomicLong totalSize = new AtomicLong();
final private CountDownLatch latch = new CountDownLatch(1);
/** 通过BlockingQueue得到文件夹大小的初始常量 **/
final private BlockingQueuefileSizes = new ArrayBlockingQueue (500);
/////////////////////////////////////CountdownLatch/////////////////////////////////////////
//更新文件总大小(多线程)
private void updateTotalSizeOfFilesInDir(final File file) {
long fileSize = 0;//初始化文件大小
//文件,直接返回大小
if (file.isFile())
fileSize = file.length();
//文件夹,遍历所有文件总大小
else {
final File[] children = file.listFiles();
if(null == children){
totalSize.set(0);
return;
}
for (final File child : children) {
//文件:直接加当前文件的大小
if (child.isFile())
fileSize += child.length();
//文件夹:遍历里面的文件的大小
else {
pendingFileVisits.incrementAndGet();//增加一个当前值(用来观察这里的线程是否启动)
service.execute(new Runnable() {
public void run() {
updateTotalSizeOfFilesInDir(child);
}
});
}
}
}
totalSize.addAndGet(fileSize);
//如果没有遍历的子文件夹,则pendingFileVisits-1 = 0,当前线程等待
if (pendingFileVisits.decrementAndGet() == 0)
latch.countDown();//发令枪 - 1
}
/**
* 得到指定文件的大小
* @param fileName 文件名(全路径)
* @return 文件夹大小(M)
* @throws InterruptedException
*/
public double getTotalSizeOfFile(final String filePath){
service = Executors.newCachedThreadPool();//初始化线程池
pendingFileVisits.incrementAndGet();//增加当前值1
double result = 0;//初始化结果
try {
updateTotalSizeOfFilesInDir(new File(filePath));
latch.await(100, TimeUnit.SECONDS);//当前线程等待,直到锁存器计数到0
// latch.await();
//将k转换成m
long resultK = totalSize.longValue();
BigDecimal bdK = new BigDecimal(resultK);
BigDecimal bdM = bdK.divide(new BigDecimal(1024 * 1024)).setScale(5, RoundingMode.HALF_UP);//保留5位小数
result = bdM.doubleValue();
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
service.shutdown();
}
return result;
}
/////////////////////////////////////CountdownLatch/////////////////////////////////////////
/////////////////////////////////////BlockingQueue/////////////////////////////////////////
private void startExploreDir(final File file) {
pendingFileVisits.incrementAndGet();//記錄遍历文件夹次数
service.execute(new Runnable() {
public void run() {
exploreDir(file);
}
});
}
private void exploreDir(final File file) {
long fileSize = 0;
if (file.isFile())
fileSize = file.length();
else {
final File[] children = file.listFiles();
if (children != null)
for (final File child : children) {
if (child.isFile())
fileSize += child.length();
else {
startExploreDir(child);
}
}
}
try {
fileSizes.put(fileSize);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
pendingFileVisits.decrementAndGet();
}
/**
* 得到指定文件的大小
* @param fileName
* @return
* @throws InterruptedException
*/
public double getTotalSizeOfFile1(final String fileName){
service = Executors.newFixedThreadPool(100);
double result = 0;
try {
startExploreDir(new File(fileName));
long totalSize = 0;
while (pendingFileVisits.get() > 0 || fileSizes.size() > 0) {
final Long size = fileSizes.poll(10, TimeUnit.SECONDS);
totalSize += size;
}
//将k转换成m
BigDecimal bdK = new BigDecimal(totalSize);
BigDecimal bdM = bdK.divide(new BigDecimal(1024 * 1024)).setScale(5, RoundingMode.HALF_UP);//保留5位小数
result = bdM.doubleValue();
}catch(Exception e){
e.printStackTrace();
}finally {
service.shutdown();
}
return result;
}
/////////////////////////////////////BlockingQueue/////////////////////////////////////////
/**
* 先根遍历序递归删除文件夹
*
* @param dirFile 要被删除的文件或者目录
* @return 删除成功返回true, 否则返回false
*/
public boolean deleteFile(File dirFile) {
// 如果dir对应的文件不存在,则退出
if (!dirFile.exists()) {
return false;
}
if (dirFile.isFile()) {
return dirFile.delete();
} else {
for (File file : dirFile.listFiles()) {
deleteFile(file);
}
}
return dirFile.delete();
}
}
遍历指定文件夹下存在log日志文件的文件夹
package com.sunsheen.jfids.studio.monitor.utils.local;
import java.io.File;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import com.sunsheen.jfids.studio.monitor.common.LogInfo;
/**
* 遍历当前eclipse运行空间下所有项目名跟对应日志
* @author WangSong
*
*/
public class LocalLogUtil {
private LocalLogUtil(){}
/**
* 遍历出存在项目日志文件的文件夹
* @return
*/
public static Map> getPlugLogs(){
Map> associatedLogMap = new ConcurrentHashMap >();//
//截取出正确的运行空间目录
String runtimeSpace = LogInfo.RUNTIME_SPACE.substring(1,LogInfo.RUNTIME_SPACE.length() - 1);
String[] arr = runtimeSpace.split("/");
StringBuffer sb = new StringBuffer();
for(String space : arr)
sb.append(space+File.separator);
String logParentFolder = sb + LogInfo.LOG_PARENT_PATH;
File file = new File(logParentFolder);//存放所有日志文件的文件夹
listExistingLogFolder(associatedLogMap,file);
return associatedLogMap;
}
//遍历当前文件夹下面所有文件
private static void listExistingLogFolder(Map> associatedLogMap,File file){
//遍历当前文件夹
File[] innerFiles = file.listFiles();
for(File result : innerFiles){
//存放对应关系
if(result.isDirectory())
listExistingLogFolder(associatedLogMap,result);
else{
String name = result.getName();//当前文件名
//是日志文件,存入
if(name.contains(".log")){
String projectName = result.getParent();//上层项目名路径
//如果不是项目日志文件不记录
if(!projectName.contains("com.sunsheen.jfids"))
continue;
//截取出正确的插件项目名
projectName = projectName.substring(projectName.lastIndexOf("c"));
//保证能添加所有的日志文件
if(associatedLogMap.containsKey(projectName)){
//当前项目存在日志文件时
SetcurrentLogs = associatedLogMap.get(projectName);
currentLogs.add(result);
associatedLogMap.put(projectName, currentLogs);//保存最新的关系
}else{
//不存在当前项目日志文件时
SetcurrentLogs = new HashSet ();
currentLogs.add(result);
associatedLogMap.put(projectName,currentLogs);//创建一个新关联
}
}
}
}
}
}
除了上述介绍外,还有一些Java常用工具类,以后大家都会接触到。