Util.java

1 개요[ | ]

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.validator.routines.UrlValidator;
import org.yaml.snakeyaml.Yaml;

import net.minidev.json.JSONValue;

public class Util {
	private final static long currentTimeNanosOffset = (System.currentTimeMillis() * 1000000) - System.nanoTime();
	public static long currentTimeNanos() {
		return System.nanoTime() + currentTimeNanosOffset;
	}
	public static String uniqid() {
		long nanos = Util.currentTimeNanos();
		return Long.toHexString(Long.parseLong(String.valueOf(nanos).substring(0,10)))
				+ Long.toHexString(Long.parseLong(String.valueOf(nanos).substring(10,16)));
	}
	public static String uniqid(String prefix) {
		return prefix + "_" + Util.uniqid();
	}
	
	public static String rawurlencode(String input) {
		try {
			return URLEncoder.encode(input, "UTF-8").replace("*", "%2A").replace("+", "%20").replace("%7E", "~");
		} catch (UnsupportedEncodingException e) {
			return null;
		}
	}
	
	public static String hashHmacSha1(String value, String key) {
		try {
			byte[] hexBytes = new Hex().encode(hashHmacSha1Raw(value,key));
			return new String(hexBytes, "UTF-8");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}	public static byte[] hashHmacSha1Raw(String value, String key) {
		try {
			byte[] keyBytes = key.getBytes();
			SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
			Mac mac = Mac.getInstance("HmacSHA1");
			mac.init(signingKey);
			return mac.doFinal(value.getBytes());
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	public static String base64Encode(byte[] bytes) {
		return new String(Base64.getEncoder().encode(bytes));
	}
	public static String base64Encode(String str) {
		return base64Encode(str.getBytes());
	}
	public static String base64Encode(Object obj) {
		return base64Encode(convertToBytes(obj));
	}
	private static byte[] convertToBytes(Object object) {
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			ObjectOutput out = new ObjectOutputStream(bos);
			out.writeObject(object);
			return bos.toByteArray();
		} catch (IOException e) {
			return null;
		}
	}
	
	public static void writeLog(String str) {
		String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
		try {
			PrintWriter pw = new PrintWriter( new FileWriter( "CpiDriver.txt", true ) );
			pw.println( "[" + now + "] " + str );
			pw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static boolean fileExists(String filepath) {
		return new File(filepath).exists();
	}
public static String fileGetContents(String filename) {
	
	try {
		if( new UrlValidator().isValid(filename) ) {
			Scanner scanner = new Scanner(new URL(filename).openStream(), "UTF-8");
			scanner.useDelimiter("\\A");
			String content = scanner.next();
			scanner.close();
			return content;
		}
		return new String(Files.readAllBytes(Paths.get(filename)));
	}
	catch (MalformedURLException e) { e.printStackTrace(); }
	catch (IOException e) { e.printStackTrace(); }
	return null;
}
	public static Array jsonDecode(String jsonString) {
		return new Array(jsonString);
	}
	public static String jsonEncode(Array arr) {
		return arr.toJson();
	}
	
	public static String shellExec(String command) {
		try {
			String[] commands = { "CMD", "/C", command };
			if( System.getProperty("file.separator") == "/" ) {
				commands = new String[] { "bash", "-c", command };
			}
			Process proc = Runtime.getRuntime().exec(commands);
			BufferedReader brOut = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			BufferedReader brErr = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
	
			String line;
			List<String> outLines = new ArrayList<String>();
			List<String> errLines = new ArrayList<String>();
			while ((line = brOut.readLine()) != null) outLines.add(line);
			while ((line = brErr.readLine()) != null) errLines.add(line);
			String newline = System.getProperty("line.separator");
			return String.join(newline, outLines);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	public static void filePutContents(String filename, String data) {
		filePutContents(filename, data, false);
	}
	public static void filePutContents(String filename, String data, boolean append) {
		try {
			BufferedWriter bw = new BufferedWriter( new FileWriter( filename, append ) );
			bw.write( data );
			bw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static String yaml2json(String yamlString) {
		Yaml yaml= new Yaml();
		Object obj = yaml.load(yamlString);
		return JSONValue.toJSONString(obj);
	}
}

2 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}