字符数组转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<String, Object>> parseJSON2List(String json) {
JSONArray jsonArr = JSONArray.fromObject(json);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = jsonArr.iterator();
while (it.hasNext()) {
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
return list;
} private static Map<String, Object> parseJSON2Map(String jsonStr) {
ListOrderedMap map = new ListOrderedMap();
// 最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for (Object k : json.keySet()) {
Object v = json.get(k);
// 如果内层还是数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = ((JSONArray) v).iterator();
while (it.hasNext()) {
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
Iterator iterator = map.keySet().iterator();
List<String> lsList = new ArrayList<String>();
int d=0;
while (iterator.hasNext()) {
String key = (String) iterator.next();
Object object = map.get(key);
// 进行遍历删除,当值为空的时候删除这条数据
if (object.equals("")) {
iterator.remove();
map.remove(key);
}
}
return map;
} /**
* 将对象转换成json
* @param param
* @return
*/
public static String object2Json(Object param){
// JSON.toJSONString(); JSONObject jsonObject = JSONObject.fromObject(param);
return jsonObject.toString();
} /**
* 将json字符串转换成map
* @param json
* @return
*/
public static Map<String, Object> json2Map(String json) {
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(json);
Map<String, Object> valueMap = new HashMap<String, Object>();
valueMap.putAll(jsonObject);
return valueMap;
} /**
* list对象转换成json
* @param param
* @return
*/
public static String list2String(List param){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
JSONArray json = JSONArray.fromObject(param, jsonConfig);
return json.toString();
} }

实体对象转换成map

                Contract contract = new Contract ();
try{
Map<String, Object> params = new HashMap<String, Object>();
//将对象信息封装到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 static <T> T request2Bean(HttpServletRequest request,Class<T> 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 BlockingQueue<Long> fileSizes = new ArrayBlockingQueue<Long>(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<String,Set<File>> getPlugLogs(){
Map<String,Set<File>> associatedLogMap = new ConcurrentHashMap<String,Set<File>>();//
//截取出正确的运行空间目录
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<String,Set<File>> 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)){
//当前项目存在日志文件时
Set<File> currentLogs = associatedLogMap.get(projectName);
currentLogs.add(result);
associatedLogMap.put(projectName, currentLogs);//保存最新的关系
}else{
//不存在当前项目日志文件时
Set<File> currentLogs = new HashSet<File>();
currentLogs.add(result);
associatedLogMap.put(projectName,currentLogs);//创建一个新关联
}
}
}
}
} }

文件压缩跟解压

package com.sunsheen.jfids.studio.monitor.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream; import org.eclipse.core.runtime.Assert; import com.sunsheen.jfids.studio.monitor.HKMonitor;
import com.sunsheen.jfids.studio.monitor.HKMonitorFactory; import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
/**
* 多文件的打包压缩跟解压
* @author WangSong
*
*/
public class ZipFileUtil {
private final static HKMonitor moniter = HKMonitorFactory.getLogger(ZipFileUtil.class.getName()); /**
* 压缩离线备份log文件成一个zip
* @param srcFiles
* @param zipFile
* @return
*/
public static File zipOfflineLogs(File[] srcFiles,File zipFile){
if(srcFiles.length == 0 || null==srcFiles)
return new File(""); byte[] buf=new byte[1024];
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));//定义要写入的文件
for(int i=0;i<srcFiles.length;i++){
FileInputStream in = new FileInputStream(srcFiles[i]);//读取文件
out.putNextEntry(new ZipEntry(srcFiles[i].getName()));//设置内文件名
//写入数据
int length;
while((length = in.read(buf)) > 0){
out.write(buf,0,length);
}
out.closeEntry();
in.close();
}
out.close();
// System.out.println("文件【"+zipFile.getName()+"】压缩完成!");
} catch (Exception e) {
e.printStackTrace();
} return zipFile;
} /**
* 功能:压缩多个log文件成一个zip文件(本地)
* @param srcfile:源文件列表
* @param zipfile:压缩后的文件
* @return 压缩后的文件
*/
public static File zipFiles(File[] srcfile,File zipfile){
if(srcfile.length == 0 || null==srcfile)
return null; //存在当前压缩文件时,保存新文件(文件名 + 1) eg:log.zip ----> log(1).zip
if(zipfile.exists() && zipfile.length() != 0){
File[] files = new File(zipfile.getParent()).listFiles();//当前目录的所有zip文件
//截取出当前需要增加数字标号的名字部分
String[] sourceArray = (zipfile.getName()).split("\\.");//将\\. 转义成.
//防止异常
Assert.isTrue(sourceArray.length != 0, "程序异常:文件名划分错误!");
String change = sourceArray[sourceArray.length - 2];//get需要修改部分 eg:monitor
//备份第二个时,增加数字下标
if(files.length>0 && files.length<2){
change = change + "("+ 1 +")";
sourceArray[sourceArray.length - 2] = change;//需要修改部分重新赋值
StringBuffer newName = new StringBuffer();
for(String source : sourceArray){
//最后一次添加不能添加:.
if(source.equals(sourceArray[sourceArray.length - 1])){
newName.append(source);
break;
}
newName.append(source+".");
}
String path = zipfile.getPath();
path = path.substring(0, path.lastIndexOf(File.separator));
zipfile = new File(path + File.separator + newName);
}
//需要排除掉第一个备份(没有数字的),且最大数字+1
else if(files.length >= 2){
int[] nums = new int[files.length - 1];
int k = 0;
//取出当前文件夹下所有文件名的数字部分
for(File file : files){
//排除第一次备份(没有数字标号)的
if((zipfile.getName()).equals(file.getName()))
continue; String[] oldArray = null; //存放切割出来的zip文件名
String target = null; //有数字的字符串
int index = 0;
oldArray = (file.getName()).split("\\.");
target = oldArray[oldArray.length - 2];
index = Integer.parseInt(target.substring(target.lastIndexOf("(") + 1, target.lastIndexOf(")")));
nums[k] = index;
k++;
}
//找出最大的数字
int max=0;
for(int i=0;i<nums.length;i++){
if(nums[i] > max){
max=nums[i];
}
}
//重新设置数字
max++;
change = change + "("+ max +")";
sourceArray[sourceArray.length - 2] = change;//需要修改部分重新赋值
StringBuffer newName = new StringBuffer();
for(String source : sourceArray){
//最后一次添加后退出
if(source.equals(sourceArray[sourceArray.length - 1])){
newName.append(source);
break;
}
newName.append(source+".");
}
String path = zipfile.getPath();
path = path.substring(0, path.lastIndexOf(File.separator));
zipfile = new File(path + File.separator + newName);
}
} //压缩
byte[] buf=new byte[1024];
try {
//ZipOutputStream :完成文件或文件夹的压缩
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
for(int i=0;i<srcfile.length;i++){
if(!srcfile[i].exists())
continue;
FileInputStream in = new FileInputStream(srcfile[i]);//读取文件
String zipName = srcfile[i].getName();
out.putNextEntry(new ZipEntry(zipName));//设置内文件名
//写入数据
int length;
while((length = in.read(buf)) > 0){
out.write(buf,0,length);
}
out.closeEntry();
in.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return zipfile;
} /**
* 功能:解压缩(本地)
* @param zipfile:需要解压缩的文件
* @param descDir:解压后的目标目录
*/
public static void unZipFiles(File zipfile,String descDir){ try {
ZipFile zf = new ZipFile(zipfile);//格式化
//循环遍历出压缩的每个文件
for(Enumeration entries = zf.entries();entries.hasMoreElements();){
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();//当前压缩文件中文件名
InputStream in = zf.getInputStream(entry); File mkFile = new File(descDir + zipEntryName);
mkFile.createNewFile(); OutputStream out=new FileOutputStream(descDir + zipEntryName);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1)) > 0){
out.write(buf1,0,len);
}
in.close();
out.close();
moniter.info("文件【"+zipfile.getName()+"】,解压缩完成!");
System.out.println("解压缩完成.");
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 壓縮指定文件夾下所有文件
* @param targetZipFile 压缩后的文件 eg:d://logs//log.zip
* @param logFolder 日志文件所在的文件夹 eg:e://logs
* @return
*/
public static File zipLogs(String targetZipFile,String logFolder){
//定义日志压缩文件
File[] logsFileArr = new File(logFolder).listFiles();//所有的日志文件
//創建一個空的目標zip文件
File resultZip = new File(targetZipFile);
//壓縮
zipFiles(logsFileArr, resultZip);
return resultZip;
} /**
* 解压文件(远程)
* @param romoteAddr 服务器地址
* @param username 服务器用户名
* @param password 服务器密码
* @param targetFolder 服务器上需要解压文件的目录 eg:/usr/local/hk-logs
* @param zipFileName 需要解压文件的文件名 eg:logs.zip
*/
public static void remoteUnZip(String romoteAddr,String username,String password,
String targetFolder,String zipFileName){ try {
Connection connection = new Connection(romoteAddr);// 创建一个连接实例
connection.connect();// Now connect
boolean isAuthenticated = connection.authenticateWithPassword(username, password);//認證
Assert.isTrue(isAuthenticated, "用戶名或者密碼錯誤!");
Session sess = connection.openSession();// 創建一個會話
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
//向服务器上输入命令
PrintWriter out = new PrintWriter(sess.getStdin());
out.println("cd " + targetFolder);//進入日志文件存放的目录
out.println("ll");
out.println("unzip -o -d "+targetFolder+" "+zipFileName);//解压文件到指定位置
out.println("ll");
out.println("exit");
out.close();
sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,30000);
//本机查看远程操作的指令及状态
showRemoteShell(stdoutReader,stderrReader,sess);
//查看当前退出状态
System.out.println("ExitCode: " + sess.getExitStatus());
//关闭连接
sess.close();
connection.close();
} catch (IOException e) {
moniter.error("远程解压文件【"+ zipFileName +"】,错误:" + e);
e.printStackTrace(System.err);
// System.exit(2);
}
} //打印远程指令及状态
private static void showRemoteShell(BufferedReader stdoutReader,BufferedReader stderrReader,
Session sess) throws IOException{
System.out.println("输入在服务器的指令:");
while (true) {
String line = stdoutReader.readLine();
if (line == null)
break;
System.out.println(line);
}
System.out.println("输入指令后对应的显示信息:");
while (true) {
String line = stderrReader.readLine();
if (line == null)
break;
System.out.println(line);
}
} }

监测服务器是否可达【一】

package com.sunsheen.jfids.studio.monitor.utils.remote;

import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DateFormat;
import java.util.Date;
/**
* 檢測網絡或者指定连接是否可用
* @author WangSong
*
*/
public class IntenetAvailableUtil {
/**记录连接次数**/
private static int count = 0;
/**URL**/
private static URL urlStr = null;
/**连接响应码**/
private static int stateCode = 0;
/**记录网络断开时间**/
private static String closeTime = null;
/**HttpURLCOnnection对象**/
private static HttpURLConnection connection = null; /***
* 功能描述:检测当前的网络是否断开或当前地址是否可连接
* 如果网络没有断开,最多连接网络5次,如果5次连接不成功说明该地址不存在或视为无效地址。
* @param url
*/
public synchronized static boolean connState(String url) {
while(count < 5){
try {
urlStr = new URL(url);
connection = (HttpURLConnection) urlStr.openConnection();
stateCode = connection.getResponseCode();
if(stateCode == 200){
return true;
}
} catch (Exception e) {
if(closeTime == null){
DateFormat df = DateFormat.getDateTimeInstance();
closeTime = df.format(new Date());
System.out.println("网络连接已断开,请检查网络连接设备");
System.out.println("断开时间:"+closeTime);
System.out.println("程序开始設定每10秒检查一次");
}
try {
System.out.println("开始第"+ ++count +"次检查网络连接状态");
Thread.sleep(10000);
} catch (InterruptedException e1) {}
}
}
return false;
}
}

监测服务器是否可达【二】

package com.sunsheen.jfids.studio.monitor.utils.remote;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
/**
* 检测网址、ip、服务器是否可用
* @author WangSong
*
*/
public class NetStateUtil { //https
static HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
}; /**
* 当前网址是否可用
* @param remoteInetAddr
* @return
*/
public static boolean connectingAddress(String remoteInetAddr){
boolean flag=false;
String tempUrl=remoteInetAddr.substring(0, 5);//取出地址前5位
if(tempUrl.contains("http")){//判断传过来的地址中是否有http
if(tempUrl.equals("https")){//判断服务器是否是https协议
try {
trustAllHttpsCertificates();//当协议是https时
} catch (Exception e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultHostnameVerifier(hv);//当协议是https时
}
flag=isConnServerByHttp(remoteInetAddr);
}else{//传过来的是IP地址
flag=isReachable(remoteInetAddr);
}
return flag;
} /**
* 传入远程服务器的IP,返回是否连接成功
*
* @param remoteInetAddr
* @return
*/
public static boolean isReachable(String remoteInetAddr) {// IP地址是否可达,相当于Ping命令
boolean reachable = false;
try {
InetAddress address = InetAddress.getByName(remoteInetAddr);
reachable = address.isReachable(1500);
} catch (Exception e) {
e.printStackTrace();
}
return reachable;
} /**
* 服务器连接检测
* @param serverUrl
* @return
*/
public static boolean isConnServerByHttp(String serverUrl) {// 服务器是否开启
boolean connFlag = false;
URL url;
HttpURLConnection conn = null;
try {
url = new URL(serverUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3 * 1000);
if (conn.getResponseCode() == 200) {// 如果连接成功则设置为true
connFlag = true;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
conn.disconnect();
}
return connFlag;
} /*以下是Https适用*/
private static void trustAllHttpsCertificates() throws Exception {
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
} //
static class miTM implements javax.net.ssl.TrustManager,
javax.net.ssl.X509TrustManager {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
} public boolean isServerTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public boolean isClientTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
} public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
}
}

服务器(centos)指定本地指令集

package com.sunsheen.jfids.studio.monitor.utils.remote;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Properties; import org.eclipse.core.runtime.Assert; import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.StreamGobbler; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.sunsheen.jfids.studio.monitor.HKMonitor;
import com.sunsheen.jfids.studio.monitor.HKMonitorFactory;
import com.sunsheen.jfids.studio.monitor.common.LogInfo; /**
* 输入指令到服务器执行
* @author WangSong
*
*/
public class ServersDebugUtil { private static final HKMonitor monitor = HKMonitorFactory.getLogger(ServersDebugUtil.class.getName()); private ServersDebugUtil(){} /**
* 转换指令到服务器执行
* @param command 要执行的指令
*/
public static void transferCommand(String... commands){
String romoteAddr = LogInfo.SERVERS_ADDRESS;
String username = LogInfo.SERVERS_USERNAME;
String password = LogInfo.SERVERS_PASSWORD;
try {
Connection connection = new Connection(romoteAddr);// 创建一个连接实例
connection.connect();// Now connect
boolean isAuthenticated = connection.authenticateWithPassword(username, password);//認證
Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
ch.ethz.ssh2.Session sess = connection.openSession();// 創建一個會話
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
//向服务器上输入命令
PrintWriter out = new PrintWriter(sess.getStdin());
for(String command : commands){
out.println(command);
}
out.close();
sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,100);
//关闭连接
sess.close();
connection.close();
stderrReader.close();
stdoutReader.close();
} catch (IOException e) {
e.printStackTrace();
monitor.error("服务器执行指令出错:", e);
}
} /**
* 文件夹校验
* @param commands 进入对应文件夹指令集:第一个参数传log目录;第二个参数传用户log目录
*/
public static void foldedrCheck(String... commands){
String username = LogInfo.SERVERS_USERNAME;
String password = LogInfo.SERVERS_PASSWORD;
String address = LogInfo.SERVERS_ADDRESS;
int port = LogInfo.SERVERS_FTP_PORT; ChannelSftp sftp = null;
Channel channel = null;
Session sshSession = null;
int index = 0;//记录有异常文件夹的下标
try {
//创建连接
JSch jsch = new JSch();
sshSession = jsch.getSession(username, address, port);
sshSession.setPassword(password);
//获取session
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
//得到sftp
channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
//进入文件夹
for(int i=0;i<commands.length;i++){
index = i;
sftp.cd(commands[i]);//进入对应存放日志文件的目录
} } catch (Exception e) {
if(e.toString().contains("No such file")){
System.out.println("服务器自动创建【"+commands[index]+"】文件夹");
try{
//创建父文件夹
if(index == 0){
sftp.mkdir(LogInfo.SERVERS_PARENT_USER_FOLDER);
System.out.println("服务器创建【"+ LogInfo.SERVERS_PARENT_USER_FOLDER+"】文件夹成功!");
monitor.info("服务器创建【"+ LogInfo.SERVERS_PARENT_USER_FOLDER+"】文件夹成功!");
}
//创建用户层
else if(index == 1){
sftp.mkdir(LogInfo.SERVERS_RECIVE_FOLDER);
System.out.println("服务器创建【"+ LogInfo.SERVERS_RECIVE_FOLDER+"】文件夹成功!");
monitor.info("服务器创建【"+ LogInfo.SERVERS_RECIVE_FOLDER+"】文件夹成功!");
}
//TODO 传入的其他指令 }catch(SftpException e1){
e1.printStackTrace();
monitor.error("服务器创建用户层目录失败:"+e1);
// System.exit(2);
}
}
}
}
}

服务器指定文件夹遍历

package com.sunsheen.jfids.studio.monitor.utils.remote;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List; import org.eclipse.core.runtime.Assert; import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler; import com.sunsheen.jfids.studio.monitor.HKMonitor;
import com.sunsheen.jfids.studio.monitor.HKMonitorFactory;
import com.sunsheen.jfids.studio.monitor.common.LogInfo;
import com.sunsheen.jfids.studio.monitor.timer.MonitorOffline; /**
* 遍历出远程服务器上指定目录下的所有文件夹
*
* @author WangSong
*
*/
public class ServersFolderUtil {
private static final HKMonitor monitor = HKMonitorFactory.getLogger(ServersFolderUtil.class.getName()); private ServersFolderUtil() {
} /**
* 得到服务器上指定文件夹下所有子文件夹(第一级子文件夹)
*
* @return
*/
public static List<Object> getSubfolderName(final String targetFolder) {
final String romoteAddr = LogInfo.SERVERS_ADDRESS;
final String username = LogInfo.SERVERS_USERNAME;
final String password = LogInfo.SERVERS_PASSWORD; List<Object> folderNameList = new ArrayList<Object>();
try {
Connection connection = new Connection(romoteAddr);// 创建一个连接实例
connection.connect();// 没有网络连接时,这一步会抛出连接异常
boolean isAuthenticated = connection.authenticateWithPassword(username, password);// 認證
Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
ch.ethz.ssh2.Session sess = connection.openSession();// 創建一個會話
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(
new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(
new InputStreamReader(stderr));
// 向服务器上输入命令
PrintWriter out = new PrintWriter(sess.getStdin());
out.println("cd " + targetFolder);// 進入日志文件存放的目录
out.println("ls -ld */");
out.println("exit");
out.close();
/** 如果服务器没有返回信息过来,线程现在一直在c.wait这里,等待服务器返回信息将他唤醒。 **/
// TODO 需要解决当前阻塞...
sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF|ChannelCondition.EXIT_STATUS,30000);
while (true) {
String line = stdoutReader.readLine();//当前读取到的整行数据
//数据读取完,退出
if (line == null)
break;
//取出文件夹
if(line.contains("drwxr-xr-x")){
//取出正确的文件夹名
StringBuffer sb =
new StringBuffer(line.substring(line.lastIndexOf(" "),line.lastIndexOf("/")));
line = sb.toString().replace(" ", "");
folderNameList.add(line);
}
} // 关闭连接
sess.close();
connection.close();
stderrReader.close();
stdoutReader.close();
} catch (IOException e) {
//如果没有网络连接,离线记录日志文件
if(e.toString().contains("There was a problem while connecting to")){
System.out.println("连接服务器失败:"+e);
monitor.error("连接服务器失败:", e);
//本地离线备份日志线程执行
final MonitorOffline mo = new MonitorOffline();
mo.monitor();
}
// e.printStackTrace(System.err);
// System.exit(2);
}
return folderNameList;
} /**
* 返回当前目录下所有文件夹
* @param remoteDir
* @return
*/
@Deprecated
public static List<Object> getChildFolders(String remoteDir){
List<Object> results = new ArrayList<Object>();//返回所有的文件夹名
String[] resultArr = {};
try {
resultArr = getRemoteDirFileNames(remoteDir);
} catch (IOException e) {
e.printStackTrace();
}
for (String line : resultArr) {
// if (line.contains("drwxr-xr-x")) {
// // 取出正确的文件夹名
// StringBuffer sb = new StringBuffer(line.substring(
// line.lastIndexOf(" "), line.lastIndexOf("/")));
// line = sb.toString().replace(" ", "");
// results.add(line);
// }
System.out.println(line);
}
return results;
} /**
* 列出指定文件夹下所有文件
*
* @param conn
* @param remoteDir
* @return
* @throws IOException
*/
public static String[] getRemoteDirFileNames(String remoteDir) throws IOException{
Connection conn = new Connection(LogInfo.SERVERS_ADDRESS);// 创建一个连接实例
conn.connect();// Now connect
boolean isAuthenticated = conn.authenticateWithPassword(
LogInfo.SERVERS_USERNAME, LogInfo.SERVERS_PASSWORD);// 認證
Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
Session sess=null;
try {
sess = conn.openSession();
sess.execCommand("ls -lt "+remoteDir);
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr()); byte[] buffer = new byte[100];
String result = null;
while (true) {
if ((stdout.available() == 0)) {
int conditions = sess.waitForCondition(ChannelCondition.STDOUT_DATA |
ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 1000*5);
if ((conditions & ChannelCondition.TIMEOUT) != 0) {
break;//超时后退出循环,要保证超时时间内,脚本可以运行完成
}
if ((conditions & ChannelCondition.EOF) != 0) {
if ((conditions & (ChannelCondition.STDOUT_DATA |
ChannelCondition.STDERR_DATA)) == 0) {
break;
}
}
} if(stdout!=null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i;
while ((i = stdout.read()) != -1) {
baos.write(i);
}
String fileNames = baos.toString(); if (fileNames != null) {
String[] resultArr = fileNames.split("\n");
return resultArr;
} while (stderr.available() > 0) {
int len = stderr.read(buffer);
if (len > 0){
result += new String(buffer, 0, len);
}
}
}
}
stdout.close();
stderr.close();
} catch (Exception e) {
// log.info("获取指定目录下文件列表失败:"+e.getMessage());
System.out.println("获取指定目录下文件列表失败:"+e.getMessage());
}finally {
sess.close();
}
return null;
} }

上传文件到服务器的ftp工具

package com.sunsheen.jfids.studio.monitor.utils.remote;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List; import org.eclipse.core.runtime.Assert; import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler; import com.sunsheen.jfids.studio.monitor.HKMonitor;
import com.sunsheen.jfids.studio.monitor.HKMonitorFactory;
import com.sunsheen.jfids.studio.monitor.common.LogInfo;
import com.sunsheen.jfids.studio.monitor.timer.MonitorOffline; /**
* 遍历出远程服务器上指定目录下的所有文件夹
*
* @author WangSong
*
*/
public class ServersFolderUtil {
private static final HKMonitor monitor = HKMonitorFactory.getLogger(ServersFolderUtil.class.getName()); private ServersFolderUtil() {
} /**
* 得到服务器上指定文件夹下所有子文件夹(第一级子文件夹)
*
* @return
*/
public static List<Object> getSubfolderName(final String targetFolder) {
final String romoteAddr = LogInfo.SERVERS_ADDRESS;
final String username = LogInfo.SERVERS_USERNAME;
final String password = LogInfo.SERVERS_PASSWORD; List<Object> folderNameList = new ArrayList<Object>();
try {
Connection connection = new Connection(romoteAddr);// 创建一个连接实例
connection.connect();// 没有网络连接时,这一步会抛出连接异常
boolean isAuthenticated = connection.authenticateWithPassword(username, password);// 認證
Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
ch.ethz.ssh2.Session sess = connection.openSession();// 創建一個會話
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(
new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(
new InputStreamReader(stderr));
// 向服务器上输入命令
PrintWriter out = new PrintWriter(sess.getStdin());
out.println("cd " + targetFolder);// 進入日志文件存放的目录
out.println("ls -ld */");
out.println("exit");
out.close();
/** 如果服务器没有返回信息过来,线程现在一直在c.wait这里,等待服务器返回信息将他唤醒。 **/
// TODO 需要解决当前阻塞...
sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF|ChannelCondition.EXIT_STATUS,30000);
while (true) {
String line = stdoutReader.readLine();//当前读取到的整行数据
//数据读取完,退出
if (line == null)
break;
//取出文件夹
if(line.contains("drwxr-xr-x")){
//取出正确的文件夹名
StringBuffer sb =
new StringBuffer(line.substring(line.lastIndexOf(" "),line.lastIndexOf("/")));
line = sb.toString().replace(" ", "");
folderNameList.add(line);
}
} // 关闭连接
sess.close();
connection.close();
stderrReader.close();
stdoutReader.close();
} catch (IOException e) {
//如果没有网络连接,离线记录日志文件
if(e.toString().contains("There was a problem while connecting to")){
System.out.println("连接服务器失败:"+e);
monitor.error("连接服务器失败:", e);
//本地离线备份日志线程执行
final MonitorOffline mo = new MonitorOffline();
mo.monitor();
}
// e.printStackTrace(System.err);
// System.exit(2);
}
return folderNameList;
} /**
* 返回当前目录下所有文件夹
* @param remoteDir
* @return
*/
@Deprecated
public static List<Object> getChildFolders(String remoteDir){
List<Object> results = new ArrayList<Object>();//返回所有的文件夹名
String[] resultArr = {};
try {
resultArr = getRemoteDirFileNames(remoteDir);
} catch (IOException e) {
e.printStackTrace();
}
for (String line : resultArr) {
// if (line.contains("drwxr-xr-x")) {
// // 取出正确的文件夹名
// StringBuffer sb = new StringBuffer(line.substring(
// line.lastIndexOf(" "), line.lastIndexOf("/")));
// line = sb.toString().replace(" ", "");
// results.add(line);
// }
System.out.println(line);
}
return results;
} /**
* 列出指定文件夹下所有文件
*
* @param conn
* @param remoteDir
* @return
* @throws IOException
*/
public static String[] getRemoteDirFileNames(String remoteDir) throws IOException{
Connection conn = new Connection(LogInfo.SERVERS_ADDRESS);// 创建一个连接实例
conn.connect();// Now connect
boolean isAuthenticated = conn.authenticateWithPassword(
LogInfo.SERVERS_USERNAME, LogInfo.SERVERS_PASSWORD);// 認證
Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
Session sess=null;
try {
sess = conn.openSession();
sess.execCommand("ls -lt "+remoteDir);
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr()); byte[] buffer = new byte[100];
String result = null;
while (true) {
if ((stdout.available() == 0)) {
int conditions = sess.waitForCondition(ChannelCondition.STDOUT_DATA |
ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 1000*5);
if ((conditions & ChannelCondition.TIMEOUT) != 0) {
break;//超时后退出循环,要保证超时时间内,脚本可以运行完成
}
if ((conditions & ChannelCondition.EOF) != 0) {
if ((conditions & (ChannelCondition.STDOUT_DATA |
ChannelCondition.STDERR_DATA)) == 0) {
break;
}
}
} if(stdout!=null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i;
while ((i = stdout.read()) != -1) {
baos.write(i);
}
String fileNames = baos.toString(); if (fileNames != null) {
String[] resultArr = fileNames.split("\n");
return resultArr;
} while (stderr.available() > 0) {
int len = stderr.read(buffer);
if (len > 0){
result += new String(buffer, 0, len);
}
}
}
}
stdout.close();
stderr.close();
} catch (Exception e) {
// log.info("获取指定目录下文件列表失败:"+e.getMessage());
System.out.println("获取指定目录下文件列表失败:"+e.getMessage());
}finally {
sess.close();
}
return null;
} }

通过http上传文件

package com.sunsheen.jfids.studio.monitor.sender;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Map; import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.FormBodyPart;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.eclipse.core.runtime.Assert; /**
* 發送日誌文件到服務器 :需要将文件打包压缩
*
* @author WangSong
*
*/
public class SendLogByHttp { /**
* 发送日志文件
* @param url 远程地址
* @param param String类型的map数据,可以为空
* @param file 上传的文件
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String postFile(String url, Map<String, Object> param,
File file) throws ClientProtocolException, IOException { String res = null;
CloseableHttpClient httpClient = HttpClients.createDefault();//创建http客户端
HttpPost httppost = new HttpPost(url);
httppost.setEntity(getMutipartEntry(param, file));//设置发送的消息体 CloseableHttpResponse response = httpClient.execute(httppost);//发送消息到指定服务器 HttpEntity entity = response.getEntity(); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
res = EntityUtils.toString(entity, "UTF-8");
response.close();
} else {
res = EntityUtils.toString(entity, "UTF-8");
response.close();
throw new IllegalArgumentException(res);
}
return res;
} //得到当前文件实体
private static MultipartEntity getMutipartEntry(Map<String, Object> param,
File file) throws UnsupportedEncodingException {
Assert.isTrue(null == file, "文件不能为空!"); FileBody fileBody = new FileBody(file);//通过文件路径,得到文件体
FormBodyPart filePart = new FormBodyPart("file", fileBody);//格式化
MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart(filePart); if(null != param){
Iterator<String> iterator = param.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
FormBodyPart field = new FormBodyPart(key, new StringBody(
(String) param.get(key)));
multipartEntity.addPart(field);
}
} return multipartEntity;
} }

通过socket上传文件

package com.sunsheen.jfids.studio.monitor.sender;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket; /**
* 通過socket通信,發送文件
* @author WangSong
*
*/
public class SendLogBySocket { /**
* 文件上傳
* @param address 远程服务器地址
* @param port 远程服务器开放的端口号
* @param file 上传的文件
*/
public static void postFile(String address,int port,File file) {
Socket st = null;
BufferedOutputStream bos = null;
FileInputStream fis = null;
try {
//指定端口号
//InetAddress.getLocalHost();
st = new Socket(address,port);
//要上传文件位置
bos = new BufferedOutputStream(st.getOutputStream());
fis = new FileInputStream(file);
int len = 0;
byte b[] = new byte[1024];
//文件写入
while ((len = fis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
System.out.println("客户端上传完成!");
}
catch (IOException e) {
e.printStackTrace();
}finally {
try {
//关闭资源
fis.close();
bos.close();
st.close();
}catch (IOException e) {
e.printStackTrace();
}
}
} }

Java常用工具类整理的更多相关文章

  1. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  2. Apache Commons 常用工具类整理

    其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...

  3. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  4. javascript常用工具类整理(copy)

    JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串 return Object.prototype.to ...

  5. JAVA常用工具类汇总

    一.功能方法目录清单: 1.getString(String sSource)的功能是判断参数是否为空,为空返回"",否则返回其值: 2.getString(int iSource ...

  6. Java常用工具类---XML工具类、数据验证工具类

    package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...

  7. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  8. java常用工具类(java技术交流群57388149)

    package com.itjh.javaUtil;   import java.util.ArrayList; import java.util.List;   /** * * String工具类. ...

  9. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

随机推荐

  1. JavaIO流,万物皆文件

    引入IO的原因 基本概念: 数据源和流的概念 IO流的概念细分 IO流的体系 IO流在Java中的流对象:inputStream .... Java对象的序列化和反序列化: 1 为什么需要序列化和反序 ...

  2. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配   17.8% 困难 45 跳跃游戏 II   25.5% 困难 55 跳跃游戏   30.6% 中等 122 买卖股票的最佳时机 II C ...

  3. 每日一道 LeetCode (14):数组加一

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  4. homekit_四路继电器

    这款继电器使用苹果手机进行控制,有普通版本和点动版本可供选择,有兴趣的可以去以下链接购买: https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-1 ...

  5. Android 开发学习进程0.12 自定义view activity的属性

    设置类似钉钉或tel的圆形用户名首字母头像 设置有两种方法,一是使用已有的库或自定义的view组件,但如果确定只是文字头像,也可使用textview的backgrou属性,调整资源文件使textvie ...

  6. Java中的注解及自定义注解你用的怎么样,能不能像我这样应用自如?

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  7. 题解 洛谷 P3332

    题目描述 权值线段树套线段树板子题 首先观察题目,判断为二维偏序问题 操作1为区间修改,所以一定是外部线段树维护权值,内部线段树维护所在区间,否则时间复杂度爆炸qwq 为方便查找,哈希时我采用哈希每个 ...

  8. MMD日文乱码解决

    记录一下自己在学习MMD遇到的问题. 日文乱码是很常见的,因为很多MMD资源是日本的. 1.解压乱码 我以好压为例,其他解压软件也是可以通过设置解决的 设置

  9. CentOS 7.3安装指南

    下载CentOs 7.3 1.ISO 镜像启动完成后,你机器上会显示如下首屏.在菜单中选择 “Install CentOS 7”并按下回车继续. 2.在安装镜像加载到内存完成后,会显示一个欢迎页面.选 ...

  10. TS数据流PAT和PMT分析

    TS流,是基于packet的位流格式,每个packet是188个字节或者204个字节(一般是188字节,204字节格式是在188字节的packet后面加上16字节的CRC数据,其他格式相同),解析TS ...