private static boolean isBlank(String str) {
		int strLen; if (str == null || (strLen = str.length()) == 0) {
			return true; 
		} 
		for (int i = 0; i < strLen; i++) {
			if ((!Character.isWhitespace(str.charAt(i)))) {
				return false; 
			} 
		} 
		return true; 
	}

 

 

댓글을 달아 주세요

 

휴대폰 번호를 asterisk(*)로 암호화하는 코드입니다.

	/**
	 * encrypt number in text
	 * 
	 * maskingCallNumber
	 *  
	 * @param str
	 * @return String
	 */
	public static String maskingCallNumber(String str){
		String replaceString = str;
		String matchedStr ="";

		String pattern ="(\\d{2,3})-?(\\d{3,4})-?(\\d{3,4})";
		Matcher matcher = Pattern.compile(pattern).matcher(str);

		if(matcher.find()){
			StringBuffer br = new StringBuffer();
			for(int i = 1 ; i<=matcher.groupCount(); i++){
				matchedStr = matcher.group(i);
				for(int j = 0 ; j <matchedStr.length();j++){
					br.append("*");
				}
				if(i !=matcher.groupCount()){
					br.append("-");
				}
			}
			replaceString =matcher.replaceAll(br.toString());
		}
		return replaceString;
	}

 

 

댓글을 달아 주세요

 

이름을 asterisk(*)로 암호화하는 코드입니다.

	/**
	 * maskingName
	 *  
	 * @param str
	 * @return String
	 */
	public static String maskingName(String str) {
		String replaceString = str;

		String pattern = "";
		if(str.length() == 2) {
			pattern = "^(.)(.+)$";
		} else {
			pattern = "^(.)(.+)(.)$";
		}

		Matcher matcher = Pattern.compile(pattern).matcher(str);

		if(matcher.matches()) {
			replaceString = "";

			for(int i=1;i<=matcher.groupCount();i++) {
				String replaceTarget = matcher.group(i);
				if(i == 2) {
					char[] c = new char[replaceTarget.length()];
					Arrays.fill(c, '*');

					replaceString = replaceString + String.valueOf(c);
				} else {
					replaceString = replaceString + replaceTarget;
				}

			}
		}
		return replaceString;
	}

 

 

댓글을 달아 주세요

 

 

   /**
    * 날짜 더하기
    * 
    * @param dataeFormat yyyyMMdd ..
    * @param strDate 20190612 ..
    * @param dateUnit DATE or HOUR
    * @param addDate 1, -1 ...
    * @return
    */
   public static String dateAdd(String dataeFormat, String strDate, String dateUnit, int addDate) {
       DateFormat dateFormat = null;
       Date date = new Date();
       
       try {
           dateFormat = new SimpleDateFormat(dataeFormat);
           date = dateFormat.parse(strDate);
       } catch (ParseException e) {
    	   EDWLogger.error(CommonUtil.class, e.getMessage());
       }
       
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       if ("DATE".equals(dateUnit)) {
           cal.add(Calendar.DATE, addDate);
       } else if ("HOUR".endsWith(dateUnit)) {
           cal.add(Calendar.HOUR, addDate);
       } 
       return dateFormat.format(cal.getTime());
   }

 

 

댓글을 달아 주세요

 

두가지 방식 있습니다. 상황에 따라 사용하시면 되겠습니다.

 

1.

String command = "ls";
new ProcessBuilder("/bin/bash", "-c", command).start();

2.

    /**
     * cmd 명령어 실행
     *
     * @param cmd
     */
    public static boolean executeCmd(String cmd) {
        Process process = null;
        Runtime runtime = Runtime.getRuntime();
        StringBuffer successOutput = new StringBuffer();
        StringBuffer errorOutput = new StringBuffer();
        BufferedReader successBufferReader = null;
        BufferedReader errorBufferReader = null;
        String msg = null;
        boolean result = false;
 
        List<String> cmdList = new ArrayList<String>();
 
        cmdList.add("/bin/sh");
        cmdList.add("-c");
        
        cmdList.add(cmd);
        String[] array = cmdList.toArray(new String[cmdList.size()]);
 
        try {
        	Logger.info(CommonUtil.class, "cmd : " + cmd);
            process = runtime.exec(array);
 
            successBufferReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "EUC-KR"));
 
            while ((msg = successBufferReader.readLine()) != null) {
                successOutput.append(msg + System.getProperty("line.separator"));
            }
 
            errorBufferReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), "EUC-KR"));
            while ((msg = errorBufferReader.readLine()) != null) {
                errorOutput.append(msg + System.getProperty("line.separator"));
            }
 
            process.waitFor();
 
            if (process.exitValue() == 0) {
                result = true;
            } else {
                Logger.error(CommonUtil.class, "abnormal finish error : " + successOutput.toString());
            }
 
            if (isNotBlank(errorOutput.toString())) {
                Logger.error(CommonUtil.class, "error : " + successOutput.toString());
            }
 
        } catch (IOException e) {
            Logger.error(CommonUtil.class, e.getMessage());
        } catch (InterruptedException e) {
            Logger.error(CommonUtil.class, e.getMessage());
        } finally {
            try {
                process.destroy();
                if (successBufferReader != null) successBufferReader.close();
                if (errorBufferReader != null) errorBufferReader.close();

            } catch (IOException e1) {
                Logger.error(CommonUtil.class, e1.getMessage());
            }
        }
        return result;
    }

댓글을 달아 주세요

mysql dump 및 import 방법입니다.

 

-DB backup 

1) 테이블 백업

mysqldump --single-transaction -u user -p'password' DB_NM TABLE_NM > table_nm.sql

--single-transaction : 하나의 트랙잭션으로 dump 수행 

  ps ) 용량 큰 테이블 dump 할 경우 해당 테이블 lock 걸림, 이 옵션을 사용해줘야 DB lock 걸리지 않습니다.

 

2) DB 전체 백업

mysqldump --single-transaction --all-databases -u user -p'password' > db_nm.sql

 

-백업한 sql 파일 적용 (import)

mysql -u user -p'password' DB_NM < table_nm.sql

 

 

댓글을 달아 주세요

 

비슷한 규칙에 파일명 동시에 일괄 변경하는 방법입니다.

rename '공통내용' '변경할 공통내용' '변경대상'

ex) rename .txt test.txt *  

 

 

댓글을 달아 주세요

 

자바 date(날짜) 포맷 별 정규식입니다.

public static final String YYYYMMDD = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])";
public static final String YYYYMMDDHH = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])";
public static final String YYYYMMDDHHMI = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])";
public static final String YYYYMMDDHHMISS = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])";
public static final String HH= "(0[0-9]|1[0-9]|2[0-3])";
public static final String MMDD = "(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])";
public static final String HHMI = "(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])";

 

*정규식 해석 (ex : yyyyMMdd)

 - (19|20) :  19 또는 20로 year 앞 2자 표현

 - \\d{2} : 2자리 숫자(00~99 까지) year 뒤 2자 표현

 - (0[1-9]|1[012]) : 0과 1~9에서 1개 또는 1과 012에서 1개로 month 2자 표현

 - (0[1-9]|[12][0-9]|3[01]) : 0과 1~9 또는 1,2와 0~9 또는 3과 0,1로 day 2자 표현

 

 

 

- 위 정규식 사용하여 문자열에서 특정 패턴의 date 검출하는 방법

2016/06/20 - [Programming/JAVA] - [JAVA] 문자열에서 date 특정 패턴 가져오기

 

 

댓글을 달아 주세요

 

이클립스로 java, jar 파일 생성하여 리눅스상에서 java, jar 파일 실행하는 방법입니다.

자바코드는 메인함수로 입력되는 값을 출력하는 간단한 코드로 작성했습니다.

 

public class test{
  public static void main(String[] args){
    for(String arg:args){
      System.out.println(arg);
    }
  }
}

 

1. java 파일 실행

1) java 파일 컴파일

javac -d . Test.java

 - 디렉토리 안에 자바파일을 컴파일하여 클래스 생성

 

ex) 여러 lib jar 파일의 클래스 패스 연결해서 컴파일 

javac -d . -cp lib/hadoop-common-2.7.0.jar:lib/hadoop-distcp-2.7.3.jar:lib/hadoop-hdfs-2.6.0.jar:lib/hadoop-annotations-2.7.0.jar:lib/hadoop-mapreduce-client-core-2.3.0.jar DistCpTest.java

 

 

2) java 파일 실행

java -cp $CLASS_PATH: test.Copy TEST_TEST

 - 클래스패스를 정말 잘 설정해줘야 한다.. (NoClassDefFoundError로 고생함..ㅠㅠ)

   계속 클래스 패스를 잘 못찾아서 저는 콜론도 잘 붙여해결했습니다.

 

 ex) java -cp /home/my/test/*: test.Copy TEST_TEST

 

 

*용어정리

 -classpath: 자바 런타임이 class 파일을 찾을 때 사용하는 경로

 -cp : classpath
 -콜론(:) 클래스 패스들을 연결할 때 사용
 -점(.) java 명령어를 실행하는 디렉토리를 cp로 지정하겠다는 의미
 -d : directory

 

 

2. jar 파일 실행

  1) eclipse로 jar 파일 생성

 

 

메인 클래스를 지정해주지 않으면 no main manifest attribute, in test.jar 에러가 발생합니다.

 

 

 

  2) 생성한 jar 파일을 리눅스 서버로 이동시키고 아래 명령어를 실행합니다.

java -jar test.jar TEST

 

결과 : TEST

댓글을 달아 주세요

 

-missing block error msg

cannot obtain block length for LocatedBlock, Could not find CoarseGrainedScheduler or it has been stopped.


-check corrupt file 

hdfs fsck -list-corruptfileblocks 
hdfs fsck /{path} -openforwrite

 

 

댓글을 달아 주세요