字符数组转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. Vue Vue.use() / Vue.component / router-view

    Vue.use Vue.use 的作用是安装插件 Vue.use 接收一个参数 如果这个参数是函数的话,Vue.use 直接调用这个函数注册组件 如果这个参数是对象的话,Vue.use 将调用 ins ...

  2. NeuralCoref: python的共指消解工具教程

    转载地址 https://blog.csdn.net/blmoistawinde/article/details/81782971 共指消解 首先简要地说说共指消解是什么,有什么用处.假设机器正在阅读 ...

  3. 漏洞重温之XSS(中)

    漏洞重温之XSS(中) XSS挑战之旅 level8-level13 level8 第八关开局,发现button从搜索变成了友情链接,发现该页面情况跟前面不同,先右键查看代码,再进行尝试. 上测试代码 ...

  4. JavaScript基础-05-数组、Date对象、Math、包装类、字符串方法

    数组(Array) 1. 数组 数组也是一个对象,不同点:普通对象是使用字符串作为属性名的,数组是使用数字作为索引操作元素. 数组的存储性能比普通对象要好,在开发中经常使用数组来存储一些数据. 向数组 ...

  5. Linux中su和su -区别,别再傻傻分不清

    写在前面 如果你不清楚su和su -切换用户的区别,你一定会遇到在使用su切换用户执行命令出现报错"command not found"感到惊讶.分明之前这个指令执行的好好的,为什 ...

  6. C++ Templates 目录

    第1部分 : 基本概念 第1章 函数模板 1.1 初识函数模板 1.1.1 定义模板 1.1.2 使用模板 1.1.3 二阶段翻译 1.2 模板参数推导 1.3 多模板参数 1.3.1 返回类型的模板 ...

  7. ubuntu ARM 源配置

    cat /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu-ports/ xenial main deb-src http://mir ...

  8. OpenStack虚拟机virtaulinterfance 网络设备在libvirt的代码梳理

    nova创建虚机网卡实际设备的代码调用流程为 _create_domain_and_network---->plug_vifs-->LibvirtGenericVIFDriver.plug ...

  9. Linux下启动、关闭SVN服务

    1.命令:ps -ef|grep svnserve,查看SVN是否允许,执行如下: 2.命令:svnserve -d -r /home/svn,启动SVN,/home/svn是SVN安装路径,执行如下 ...

  10. parallel stream-不能随便使用

    前言 java8除了新增stream,还提供了parallel stream-多线程版的stream,parallel stream的优势是:充分利用多线程,提高程序运行效率,但是正确的使用并不简单, ...