본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)

Java로 프로그램(exe, sh같은) 실행

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 25.

 

 

java로 파이썬이나 R 프로그램을 동작하는 경우가 있었다.

조금더 깔끔하게 무언가 callback형식으로 만들고 싶다는 생각이 들어서 여러방법을 조합하여 보았다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Test {
    private static Process process = null;
    public static void main(String args[]){
        exeOrder("c:/test.exe",new Item() {
			@Override
			public void todo(String res) {
				// 콜백으로 할일~~
			}
		});
    }
    synchronized private static final void exeOrder(final String order, Item item) {
    	String res = null; // 실행결과
	    InputStream inputStream = null;
    	BufferedReader bufferedReader = null;
	    InputStreamReader insReader = null;
    	try {
    		process = Runtime.getRuntime().exec(order, null);
    		process.waitFor();
    		inputStream = process.getInputStream();
	    	insReader = new InputStreamReader(inputStream);
		    bufferedReader = new BufferedReader(insReader, 1);
    		String line = null;
	    	while ((line = bufferedReader.readLine()) != null) {    
    			res = line;
	    	}
    	} catch (Exception e) {
	    	e.printStackTrace();
    	} finally {
    		process = null;
	    	try {inputStream.close();} catch (IOException e) {}
		    try {bufferedReader.close();} catch (IOException e) {}
    		try {insReader.close();} catch (IOException e) {}
	    	if (item != null) {
		    	item.todo(res); // 콜백 실행, res값이 결과 값
        	}
       }
    }
}	
//콜백용 인터페이스, 명령수행 이후의 행동을 정의 한다.
public interface Item {
	public void todo(final String argument);
}

해당 프로세스중 item이라는 인터페이스를 만들어서 콜백형식으로 사용하였다.

프로세스가 끝날 때 해당 인터페이스 내용이 실행 되므로 편리하였던 것 같다.

반응형

'Java(자바)' 카테고리의 다른 글

자바 함수형 프로그래밍 2  (0) 2019.04.25
Java Exception 기록하기  (0) 2019.04.25
파일 복사하기, Blob데이터를 파일로 만들기  (0) 2019.04.25
Java로 File 만든 날짜 보기  (0) 2019.04.25
jsch 사용법(ssh 연결)  (0) 2019.04.25
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글