public class MD5Util {
// 字符串的MD5
public static String string2MD5(String psw) {
{
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(psw.getBytes("UTF-8"));
byte[] encryption = md5.digest();
StringBuffer strBuf = new StringBuffer();
for (int i = 0; i < encryption.length; i++) {
if (Integer.toHexString(0xff & encryption[i]).length() == 1) {
strBuf.append("0").append(Integer.toHexString(0xff & encryption[i]));
} else {
strBuf.append(Integer.toHexString(0xff & encryption[i]));
}
}
return strBuf.toString();
} catch (NoSuchAlgorithmException e) {
return "";
} catch (UnsupportedEncodingException e) {
return "";
}
}
}
}
public class DateUtils {
public static String local2utc(String localTime) {
//String localTime = "2018-05-23 16:05:52";
String utcTimePatten = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
String localTimePatten = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat localFormat = new SimpleDateFormat(localTimePatten);
localFormat.setTimeZone(TimeZone.getDefault()); // 设置本地时区 自动计算出本地时间
try {
Date gpsUTCDate = localFormat.parse(localTime);
SimpleDateFormat utcFormat = new SimpleDateFormat(utcTimePatten);
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// 时区定义并进行时间获取
String utcTime = utcFormat.format(gpsUTCDate.getTime());
//System.out.println(localTime);
//System.out.println(utcTime);
return utcTime;
} catch (Throwable e) {
e.printStackTrace();
}
return "";
}
/**
* UTC时间转本地时间格式
*
* @param utcTime UTC时间
* @param utcTimePatten UTC时间格式
* @param localTimePatten 本地时间格式
* @return 本地时间格式的时间
*/
public static String utc2Local(String utcTime) {
//String utcTime = "2018-05-23T16:05:52.123Z";
String utcTimePatten = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
String localTimePatten = "yyyy-MM-dd HH:mm:ss";
System.out.println(utcTime);
SimpleDateFormat utcFormat = new SimpleDateFormat(utcTimePatten);
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// 时区定义并进行时间获取
try {
Date gpsUTCDate = utcFormat.parse(utcTime);
SimpleDateFormat localFormat = new SimpleDateFormat(localTimePatten);
localFormat.setTimeZone(TimeZone.getDefault()); // 设置本地时区 自动计算出本地时间
String localTime = localFormat.format(gpsUTCDate.getTime());
//System.out.println(localTime);
return localTime;
} catch (Throwable e) {
e.printStackTrace();
}
return "";
}
public static String local2utc(Date date) {
String localTimePatten = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat localFormat = new SimpleDateFormat(localTimePatten);
String local = localFormat.format(new Date());
return local2utc(local);
}
}
public class StringUtils {
public static String truncStr(String str, int length) {
if (hasLength(str)) {
if (str.length() > length) {
str = str.substring(0, length);
}
}
return str;
}
public static boolean hasLength(String str) {
return (str != null && str.length() > 0);
}
public static Long toLong(String strValue) {
long lng = (strValue == null ? 0 : Long.parseLong(strValue));
return (new Long(lng));
}
public static Integer toInteger(String strValue) {
int lng = (strValue == null ? 0 : Integer.parseInt(strValue));
return (new Integer(lng));
}
public static Byte toByte(String strValue) {
byte bt = (strValue == null ? 0 : Byte.parseByte(strValue));
return (new Byte(bt));
}
public static Boolean toBoolean(String strValue) {
return new Boolean(toBool(strValue));
}
public static boolean toBool(String strValue) {
if (strValue == null) {
return false;
} else if (strValue.length() > 0) {
strValue = strValue.toUpperCase();
char b = strValue.charAt(0);
switch (b) {
case 'T':
case '1':
case '是':
return true;
case 'F':
case '0':
case '否':
return false;
default:
return false;
}
} else {
return false;
}
}
public static java.sql.Timestamp toSQLTimestamp(String value) {
return (new java.sql.Timestamp(toDate(value).getTime()));
}
public static java.util.Date toDate(String strValue) {
SimpleDateFormat fmt = null;
if (strValue.indexOf('.') > 0) {
fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.CHINA);// 2005-01-01
// 10:10:10.100
} else if (strValue.indexOf(':') > 0) {
fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 2005-01-01
// 10:10:10.100
} else if (strValue.indexOf('-') > 0) {
fmt = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);// 2005-01-01
// 10:10:10.100
}
try {
return fmt.parse(strValue);
} catch (ParseException ex) {
return new Date(0);// 返回1970-01-01 00:00:00
}
}
/**
* 使用2005-01-01 10:10:10.456格式返回Date
*
* @param date
* Date
* @return String
*/
public static String toString(java.util.Date date) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 2005-01-01
// 10:10:10.100
return fmt.format(date);
}
public static String toString(java.util.Date date, boolean bolWithMS) {
SimpleDateFormat fmt;
if (bolWithMS) {
fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.CHINA); // 2005-01-01
// 10:10:10.100
} else {
fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 2005-01-01
// 10:10:10.100
}
return fmt.format(date);
}
/**
* 采用1、0表示boolean
*
* @param b
* boolean
* @return String
*/
public static String toString(boolean b) {
return (b ? "1" : "0");
}
/**
* 如果locale是CHINA用“是”、“否”表示boolean 如果locale是null用“1”、“0”表示boolean
* 其他情况下用“true”、“false”表示boolean
*
* @param b
* boolean
* @param locale
* Locale
* @return String
*/
public static String toString(boolean b, Locale locale) {
if (locale == Locale.CHINA) {
return (b ? "是" : "否");
} else if (locale == null) {
return (b ? "1" : "0");
} else {// 不管了
return (b ? "true" : "false");
}
}
/**
* 把ip转换为长整型
*
* @param ip
* String
* @return long
*/
public static long ParseIp2Long(String ip) {
Long num = 0L;
if (ip == null) {
return num;
}
try {
ip = ip.replaceAll("[^0-9\\.]", ""); // 去除字符串前的空字符
String[] ips = ip.split("\\.");
if (ips.length == 4) {
num = Long.parseLong(ips[0], 10) * 256L * 256L * 256L + Long.parseLong(ips[1], 10) * 256L * 256L
+ Long.parseLong(ips[2], 10) * 256L + Long.parseLong(ips[3], 10);
num = num >>> 0;
}
} catch (NullPointerException ex) {
return 0L;
}
return num;
}
}
public final class AESUtils {
//mode用aes的话,默认aes/ECB/NoPadding/128
public static final String AES = "AES";
private Cipher encryptCipher;
private Cipher decryptCipher;
private SecretKeySpec secretKey;
private String mode;
private AESUtils(SecretKeySpec secretKey, String mode) {
this.secretKey = secretKey;
this.mode = mode;
}
public static AESUtils aesECBNoPadding128(String seed) {
return new AESUtils(new SecretKeySpec(seed.getBytes(), AES), AES);
}
public String encrypt(String v) throws Exception {
if (encryptCipher == null) {
encryptCipher = Cipher.getInstance(mode); // 算法是AES
encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey);
}
return Base64Utils.encodeToString(encryptCipher.doFinal(v.getBytes(StandardCharsets.UTF_8)));
}
public String decrypt(String v) throws Exception {
if (decryptCipher == null) {
decryptCipher = Cipher.getInstance(mode); // 算法是AES
decryptCipher.init(Cipher.DECRYPT_MODE, secretKey);
}
byte[] clearTextBytes = decryptCipher.doFinal(Base64Utils.decodeFromString(v));
return new String(clearTextBytes, StandardCharsets.UTF_8);
}
}
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
public class FFMpegUtils {
private final static Logger logger = LoggerFactory
.getLogger(FFMpegUtils.class);
public static boolean isSurpportedType(String type) {
Pattern pattern = Pattern.compile(
"(asx|asf|mpg|wmv|3gp|mp4|mov|avi|flv|ts|jpg|png|bmp){1}$",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(type);
return matcher.find();
}
private static boolean resizeImage(String srcImagePath, String toImagePath,
int width, int height) throws IOException {
try {
// 读入文件
File file = new File(srcImagePath);
// 构造Image对象
BufferedImage src = ImageIO.read(file);
// 放大边长
BufferedImage tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 绘制放大后的图片
tag.getGraphics().drawImage(src, 0, 0, width, height, null);
ImageIO.write(tag, "jpg", new File(toImagePath));
return new File(toImagePath).exists();
} catch (Throwable e) {
logger.warn("ImageIO不能处理文件{}" + srcImagePath, e);
return false;
}
}
public static boolean captureThumbnail(String ffmpegPath,
String sourceFile, String destination, String aspectratio,
String position, boolean isSynchronized) throws IOException,
InterruptedException {
String lowerCase = sourceFile.toLowerCase();
if (lowerCase.endsWith(".jpg") || lowerCase.endsWith(".jpeg")
|| lowerCase.endsWith(".png") || lowerCase.endsWith(".bmp")
|| lowerCase.endsWith(".gif")) {
String[] sizes = aspectratio.split("\\*");
if (resizeImage(sourceFile, destination,
Integer.parseInt(sizes[0]), Integer.parseInt(sizes[1]))) {
return true;
}
}
boolean result = true;
// http协议会返回 !exists
// File video = new File(sourceFile);
// if (!video.exists() || video.length() == 0) {
// throw new IOException("file does not exists or leng is 0!");
// }
List<String> cmd = new LinkedList<String>();
cmd.add(ffmpegPath);
cmd.add("-y");
if (StringUtils.hasLength(position)) {
cmd.add("-ss");
cmd.add(position);
}
cmd.add("-i");
cmd.add(sourceFile);
cmd.add("-s");
cmd.add(aspectratio);
cmd.add("-t");
cmd.add("0.001");
cmd.add("-f");
cmd.add("image2");
cmd.add(destination.replaceAll("%", "%%"));
ProcessBuilder pb = new ProcessBuilder();
pb.redirectErrorStream(true);
pb.command(cmd);
long start = System.currentTimeMillis();
File file = new File(destination);
file.getParentFile().mkdirs();
pb.start();
while (isSynchronized) {
if (System.currentTimeMillis() - start > 10 * 1000) {
result = false;
break;
}
Thread.sleep(100);
file = new File(destination);
if (file.exists()) {
break;
}
}
return result;
}
public static boolean captureThumbnail(String ffmpegPath,
String sourceFile, String destination, String aspectratio,
boolean isSynchronized) throws IOException, InterruptedException {
return captureThumbnail(ffmpegPath, sourceFile, destination,
aspectratio, null, isSynchronized);
}
}
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.xml.bind.JAXB;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class FtpUtils {
Logger logger = LoggerFactory.getLogger(getClass());
private interface __ObjectConverter {
void objectToStream(Object object, OutputStream stream) throws IOException;
}
private static class __JAXBConverter implements __ObjectConverter {
private static __ObjectConverter converter = null;
@Override
public void objectToStream(Object object, OutputStream stream) {
JAXB.marshal(object, stream);
}
public static __ObjectConverter getInstance() {
return converter == null ? new __JAXBConverter() : converter;
}
}
private static class __JsonConverter implements __ObjectConverter {
private static __ObjectConverter converter = null;
@Override
public void objectToStream(Object object, OutputStream stream) throws IOException {
String json = JsonObjUtil.ObjToJson(object);
try (OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8)) {
writer.write(json);
writer.flush();
}
}
public static __ObjectConverter getInstance() {
return converter == null ? new __JsonConverter() : converter;
}
}
public static class FtpHolder {
private String host;
private int port;
private String user;
private String password;
private String relativePath;
private String fileName;
private boolean passiveMode = true;
private String encoding = "UTF-8";
private FTPClient ftp;
@Override
public boolean equals(Object o) {
if (o instanceof FtpHolder) {
FtpHolder holder = (FtpHolder) o;
return host != null && host.equals(holder.getHost()) && port == holder.getPort() && user != null
&& user.equals(holder.getUser()) && password != null && password.equals(holder.getPassword());
} else {
return false;
}
}
public boolean checkConnection() {
try {
int np = ftp.noop();
return np >= 200 && np < 300;
} catch (Exception e) {
try {
ftp.disconnect();
} catch (Exception e1) {
}
try {
if (ftp == null) {
ftp = new FTPClient();
}
ftp.setControlEncoding("UTF-8");
ftp.connect(host, port);
return ftp.login(user, password);
} catch (IOException e1) {
return false;
}
}
}
public boolean checkFile() throws IOException {
if(checkConnection()){
FTPFile[] ftpFiles = ftp.listFiles(relativePath + fileName);
return !ObjectUtils.isEmpty(ftpFiles);
}
return false;
}
/**
* @return the host
*/
public String getHost() {
return host;
}
/**
* @param host
* the host to set
*/
public void setHost(String host) {
this.host = host;
}
/**
* @return the port
*/
public int getPort() {
return port;
}
/**
* @param port
* the port to set
*/
public void setPort(int port) {
this.port = port;
}
/**
* @return the user
*/
public String getUser() {
return user;
}
/**
* @param user
* the user to set
*/
public void setUser(String user) {
this.user = user;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password
* the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the ftp
*/
public FTPClient getFtp() {
return ftp;
}
/**
* @param ftp
* the ftp to set
*/
public void setFtp(FTPClient ftp) {
this.ftp = ftp;
}
public boolean makeDirs(String fileName) throws IOException {
fileName = fileName.replaceAll("^ftp\\:\\/\\/[^\\/]*", "").replaceAll("^\\/", "").replaceAll("[^\\/]*$", "")
.replaceAll("\\/$", "");
return makePathDirs(fileName);
}
public boolean makeDirs() throws IOException {
return makePathDirs(relativePath == null ? "" : relativePath.replaceAll("[\\\\\\/]$", ""));
}
public boolean makePathDirs(String path) throws IOException {
if (path.length() > 0) {
String[] paths = path.split("\\/");
ftp.changeWorkingDirectory("/");
for (String temp : paths) {
if (!ftp.changeWorkingDirectory(temp)) {
if (!ftp.makeDirectory(temp)) {
return false;
}
if (!ftp.changeWorkingDirectory(temp)) {
return false;
}
}
}
}
return true;
}
public String toUrl() {
StringBuilder sb = new StringBuilder();
sb.append("ftp://");
if (StringUtils.hasText(user)) {
sb.append(user);
if (StringUtils.hasText(password)) {
sb.append(":");
sb.append(password);
}
sb.append("@");
}
sb.append(host);
if (this.port > 0 && this.port != 21) {
sb.append(":");
sb.append(port);
}
String relaPath = relativePath.replaceAll("^[\\\\\\/]+|[\\\\\\/]+$", "");
if (StringUtils.hasText(relaPath)) {
sb.append("/");
sb.append(relaPath);
}
if (StringUtils.hasText(fileName)) {
sb.append("/");
sb.append(fileName.replaceAll("^[\\\\\\/]+|[\\\\\\/]+$", ""));
}
return sb.toString();
}
public boolean changeDir() throws IOException {
return changeDir(this.relativePath);
}
public boolean changeDir(String relativePath) throws IOException {
ftp.changeWorkingDirectory("/");
if (StringUtils.isEmpty(relativePath)) {
return true;
}
relativePath = relativePath.replaceAll("^[\\\\\\/]+|[\\\\\\/]+$", "");
if (StringUtils.isEmpty(relativePath)) {
return true;
}
for (String path : relativePath.split("[\\\\\\/]")) {
if (!ftp.changeWorkingDirectory(path)) {
return false;
}
}
return true;
}
public String getRelativePath() {
return relativePath;
}
public void setRelativePath(String relativePath) {
this.relativePath = relativePath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public boolean isPassiveMode() {
return passiveMode;
}
public void setPassiveMode(boolean passiveMode) {
this.passiveMode = passiveMode;
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
}
private static List<FtpHolder> holders = new ArrayList<FtpUtils.FtpHolder>();
public static FtpHolder urlToFtp(String ftpUrl) {
// 扒出用户名口令
FtpHolder result = new FtpHolder();
String user = ftpUrl.replaceAll("(?i)^(ftp\\:\\/\\/)([\\w\\-\\_\\!\\~\\#\\$\\%\\^\\&\\:]*\\@)?(.*)$", "$2").replaceAll("\\@$", "");
String[] up = user.split("\\:");
result.setUser(up[0]);
if (up.length > 1) {
result.setPassword(up[1]);
} else {
result.setPassword("");
}
if (StringUtils.isEmpty(user)) {
// result.setUser("anonymous");
// result.setPassword("tester@cdv.com");
result.setUser("cdv");
result.setPassword("LBIvlrUMMw");
}
// 脱去用户、口令信息
ftpUrl = ftpUrl.replaceAll("(?i)^(ftp\\:\\/\\/)([\\w\\-\\_\\!\\~\\#\\$\\%\\^\\&\\:]*\\@)?(.*)$", "$1$3");
// 相对路径和文件名分析
String pathFile = ftpUrl.replaceAll("(?i)^(ftp\\:\\/\\/)[^\\/]+", "");
result.setRelativePath(pathFile.replaceAll("[^\\\\\\/]+$", ""));
result.setFileName(pathFile.replaceAll("^.*[\\\\\\/]", ""));
// 扒出ip和端口
ftpUrl = ftpUrl.replaceAll("ftp\\:\\/\\/([^\\/]+)(\\/.*)?", "$1");
String[] hp = ftpUrl.split("\\:");
result.setHost(hp[0]);
try {
result.setPort(Integer.parseInt(hp[1]));
} catch (Throwable t) {
result.setPort(21);
}
return result;
}
public static FtpHolder getFtpClient(String fileName) {
FtpHolder result = FtpUtils.urlToFtp(fileName);
for (FtpHolder holder : holders) {
if (result.equals(holder)) {
return holder;
}
}
return result;
}
public static void jaxbObject2Ftp(Object jaxbObj, String fileName, boolean passiveMode) throws IOException {
saveObject2Ftp(jaxbObj, fileName, passiveMode, __JAXBConverter.getInstance());
}
public static void jsonObject2Ftp(Object jsonObj, String fileName, boolean passiveMode) throws IOException {
saveObject2Ftp(jsonObj, fileName, passiveMode, __JsonConverter.getInstance());
}
private static void saveObject2Ftp(Object object, String fileName, boolean passiveMode, __ObjectConverter converter)
throws IOException {
FtpHolder ftp = FtpUtils.getFtpClient(fileName);
if (ftp.checkConnection()) {
if (passiveMode) {
ftp.getFtp().enterLocalPassiveMode();
} else {
ftp.getFtp().enterLocalActiveMode();
}
if (ftp.makeDirs(fileName)) {
String temp = fileName.replaceAll("^.*\\/", "");
try (OutputStream os = ftp.getFtp().storeFileStream(temp)) {
converter.objectToStream(object, os);
os.flush();
}
} else {
throw new IOException("目录创建失败");
}
} else {
throw new IOException("连接到ftp服务器出错");
}
}
public static void copyFile2Ftp(String fileName, InputStream input, boolean passiveMode) throws IOException {
FtpHolder ftp = FtpUtils.getFtpClient(fileName);
if (ftp.checkConnection()) {
if (passiveMode) {
ftp.getFtp().enterLocalPassiveMode();
} else {
ftp.getFtp().enterLocalActiveMode();
}
if (ftp.makeDirs(fileName)) {
String temp = fileName.replaceAll("^.*\\/", "");
ftp.getFtp().storeFile(temp, input);
} else {
throw new IOException("目录创建失败");
}
} else {
throw new IOException("连接到ftp服务器出错");
}
}
public static void copyFile2Ftp(FtpHolder ftp, String fileName, InputStream input, boolean passiveMode)
throws IOException {
if (ftp.checkConnection()) {
if (passiveMode) {
ftp.getFtp().enterLocalPassiveMode();
} else {
ftp.getFtp().enterLocalActiveMode();
}
if (ftp.makeDirs()) {
String temp = StringUtils.hasText(fileName) ? fileName.replaceAll("^.*\\/", "") : ftp.getFileName();
ftp.getFtp().setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.getFtp().storeFile(temp, input);
} else {
throw new IOException("目录创建失败");
}
} else {
throw new IOException("连接到ftp服务器出错");
}
}
public static void chunAnCopyFile2Ftp(FtpHolder ftp, String fileName, InputStream input, boolean passiveMode)
throws IOException {
if (ftp.checkConnection()) {
if (passiveMode) {
ftp.getFtp().enterLocalPassiveMode();
} else {
ftp.getFtp().enterLocalActiveMode();
}
if (ftp.makeDirs()) {
String temp = StringUtils.hasText(fileName) ? fileName.replaceAll("^.*\\/", "") : ftp.getFileName();
ftp.getFtp().setFileType(FTP.BINARY_FILE_TYPE);
ftp.getFtp().storeFile(temp, input);
} else {
throw new IOException("目录创建失败");
}
} else {
throw new IOException("连接到ftp服务器出错");
}
}
public static void chunAnCopyFile2Ftp(FtpHolder ftp, String fileName, InputStream input, boolean passiveMode,
String pathName) throws IOException {
if (ftp.checkConnection()) {
if (passiveMode) {
ftp.getFtp().enterLocalPassiveMode();
} else {
ftp.getFtp().enterLocalActiveMode();
}
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
// if (FTPReply.isPositiveCompletion(ftp.getFtp().sendCommand("OPTS
// UTF8",
// "ON"))) {
// LOCAL_CHARSET = "UTF-8";
// SERVER_CHARSET = "UTF-8";
// }
ftp.getFtp().makeDirectory(pathName);
ftp.getFtp().changeWorkingDirectory(pathName);
if (ftp.makeDirs()) {
String temp = StringUtils.hasText(fileName) ? fileName.replaceAll("^.*\\/", "") : ftp.getFileName();
ftp.getFtp().setFileType(FTP.BINARY_FILE_TYPE);
ftp.getFtp().storeFile(temp, input);
} else {
throw new IOException("目录创建失败");
}
} else {
throw new IOException("连接到ftp服务器出错");
}
}
}
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;
import org.springframework.util.StreamUtils;
/*
* 依赖org.apache.commons.logging.LogFactory
*/
public class Unzip {
private static FileSystemManager manager = null;
private static void init() throws FileSystemException {
if (manager == null) {
manager = VFS.getManager();
}
}
public static List<String> unzipFile(String zipFileName,
String targetBaseDirName) throws IOException {
return unzipFile(zipFileName, targetBaseDirName, Charset.forName("GBK"));
}
public static List<String> unzipFile(URI fileUri, String targetBaseDirName)
throws IOException {
return unzipFile(new File(fileUri), targetBaseDirName);
}
public static List<String> unzipFile(File file, String targetBaseDirName)
throws IOException {
return unzipFile(file, targetBaseDirName, Charset.forName("GBK"));
}
public static List<String> unzipFile(String zipFileName,
String targetBaseDirName, Charset charset) throws IOException {
File f = null;
try{
f = new File(new URI(zipFileName));
}catch(URISyntaxException e){
f = new File(zipFileName);
}
return unzipFile(f, targetBaseDirName, charset);
}
public static List<String> unzipFile(URI fileUri, String targetBaseDirName,
Charset charset) throws IOException {
return unzipFile(new File(fileUri), targetBaseDirName, charset);
}
public static List<String> unzipFile(File file, String targetBaseDirName,
Charset charset) throws IOException {
init();
targetBaseDirName = targetBaseDirName.replaceAll("[\\\\\\/]+$", "")
+ "/";
// 根据ZIP文件创建ZipFile对象
try (ZipFile zipFile = new ZipFile(file, charset)) {
// 获取ZIP文件里所有的entry
Enumeration<? extends ZipEntry> entrys = zipFile.entries();
// 遍历所有entry
List<String> result = new ArrayList<String>();
while (entrys.hasMoreElements()) {
ZipEntry entry = entrys.nextElement();
// 获得entry的名字
String entryName = entry.getName();
String targetFileName = targetBaseDirName + entryName;
targetFileName = targetFileName.replaceAll("\\%", "%25");
FileObject fo = manager.resolveFile(targetFileName);
if (entry.isDirectory()) {
// 如果entry是一个目录,则创建目录
fo.createFolder();
} else {
//只记录文件
result.add(targetFileName);
try (OutputStream os = fo.getContent().getOutputStream()) {
try (InputStream is = zipFile.getInputStream(entry)) {
StreamUtils.copy(is, os);
}
}
}
fo.getContent().setLastModifiedTime(entry.getTime());
}
return result;
}
}
/**
* 获取操作系统信息
*/
public final class OSInfo {
private static final String OS_NAME = System.getProperty("os.name").toLowerCase();
public static String getOSName() {
return System.getProperty("os.name");
}
public static String getOSVersion() {
return System.getProperty("os.version");
}
public static boolean isWindows() {
return OS_NAME.contains("windows");
}
public static boolean isMac() {
return OS_NAME.contains("mac") && OS_NAME.indexOf("os") > 0 && !OS_NAME.contains("x");
}
public static boolean isLinux() {
return OS_NAME.contains("linux");
}
}