본문 바로가기
프로젝트/토이 프로젝트(개인)

[ONLY JAVA-CMD] 자바로 자바 프로그래밍?!! / 자바로 Command이용한 자바프로그래밍/ Cmd에서 자바 실행하기 / cmd로 자바 컴파일하기

by 으노으뇨 2022. 12. 5.
728x90
반응형
SMALL
개요

자바의 Command를 이용하여 파일을 새로 작성하고 해당 파일을 컴파일하고, 해당 파일을 직접 실행하는 프로그램을 구현하였다. 

주로 사용한 스킬과 기술은 아래와 같다.

  1. 파일라이터를 통해 파일을 생성
  2. 버퍼트리드를 통해 파일을 읽기
  3. 커맨드라인을 통해 자바파일 컴파일
  4. 리눅스 기본적인 문법
내용

안녕하세요~! ㅎㅎㅎㅎ

슬슬 추워지는 계절이네요 ㅠㅠ올해도 하나도 해놓은것 없이 지나가고 나이만 먹어가네요ㅠ

이번 포스팅으로는 조금 재미있게 자바로 자바프로그래밍을 해보겠습니다!!!

??? : 그게 무슨 말이냐 자바로 자바를 프로그래밍 한다니,, 주인장 단단히 미쳤구나 끌끌;;

자바로 입력받은 문자열들을 java 파일로 생성하고,

Command를 이용해서 자바 컴파일러와 자바 명령어를 통해  자바 프로그래밍을 할 수 있으니까

그것을 이용해서 간단하게 진행하고자 합니다.

https://uno-kim.tistory.com/247

 

[Command] 자바로 CMD (Command) 실행 및 응용해보기 (자바로 포트번호 8080 죽이기), Port 8080 required by aPla

안녕하세요~!ㅎㅎㅎ 오늘 자바로 간단하게 프로그래밍 해볼 것은 자바로 Command를 이용하기 입니다. 우선 해당 프로그램 실행화면 부터보겠습니다.!! 제가 개발을 하면서 Boot 환경에서는 안그렇

uno-kim.tistory.com

지난 번 포스팅했던 자바에서 커맨드를 실행해서 작동시킨 톰캣 중복 포트 없애는 프로그램입니다 ㅎㅎ

이것과 FileWriter 클래스를 응용해서 프로그램을 한번 만들어보겠습니다.

크게 중요한 로직은 없습니다. 재미로만 봐주세요!!!!


1. 실제 구현 기능


2. 소스

package Java.File.cmd;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.Scanner;

public class CreateJavaFile
{
	
	public static void main(String[] args)
	{
		CreateJavaFile createJavaFile = new CreateJavaFile();
		createJavaFile.runCommand();
	}
	private void runCommand()
	{
		System.out.println("Do u wanna Start java programming?");
		System.out.println(":::   Yes - Y   :::   Nope- N   :::");
		Scanner sc = new Scanner(System.in);
		if (sc.nextLine().equalsIgnoreCase("Y"))
		{
			try
			{
				System.out.println("Enter new java programming file name u want.");
				String fileName = sc.nextLine();
				String initClass = "public class " + fileName + "{";
				System.out.println("Let's Start Java Programming!! Have fun~!!");
				System.out.println(":wq - Quit(save + quit) \n :!q - Quit(no save + quit)");
				System.out.println(initClass);
				while (true)
				{
					String inputStr = sc.nextLine();
					if (inputStr.equalsIgnoreCase(":wq"))
					{
						System.out.println("End Wrting Mode");
						break;
					}
					else if (inputStr.equalsIgnoreCase(":!q"))
					{
						System.out.println("Program Drop ::: See - yah");
						System.exit(0);
					}
					else
					{
						initClass += inputStr;
					}
				}
				System.out.println("Where do you wanna save?");
				System.out.println(":: (C) - c:/programming  :: (D) - d:/");
				String filePath = "";
				while (true)
				{
					String inputStr = sc.nextLine();
					if (inputStr.equalsIgnoreCase("c"))
					{
						filePath = "c:/programing/" + fileName + ".java";
						break;
					}
					else if (inputStr.equalsIgnoreCase("d"))
					{
						filePath = "d:/" + fileName + ".java";
						break;
					}
				}
				FileWriter fileWriter = new FileWriter(filePath);
				fileWriter.write(initClass);
				fileWriter.close();
				Process process = Runtime.getRuntime().exec("javac -d . " + filePath);
				Thread.sleep(1000);
				process = Runtime.getRuntime().exec("java " + fileName);
				Thread.sleep(1000);
				BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
				String str = "";
				while ((str = reader.readLine()) != null)
				{
					System.out.println(str);
				}
			}
			catch (Exception e)
			{
				e.getStackTrace();
			}
		}
		sc.close();
		System.out.println("::: END THIS PROGRAM :::");
	}
}

 


3. 소스 설명

소스는 우선 

  • 입력받는 부분
  • 문자열을 java 파일로 생성하는 부분
  • 컴파일하는 부분
  • 자파 프로그램 실행

크게 나누자면 총 4가지 부분을 간략하게 설명드리겠습니다.


[1] 문자열 입력받는 부분

문자열 입력은 while반복문을 통해서 계속 입력을 받아냅니다.

이때 입력받는 문자열을 매번 if 조건절로 찾아냅니다. switch case를 통해도됩니다.

조금 특별하게 최초 파일이름을 지정하는데 이게 곧 class 이름처럼 받아와서 입력할때 

자바 class 를 만들어 직접 프로그래밍을 하는 느낌이 들도록 했습니다.

색깔과 약간의 이질감만 있을뿐...?

해당 부분을 그래서 initClass 문자열변수로 만들고 관리합니다. 

추가적으로 문자열을 input 받을 때마다 += 연산자로 계속 문자열을 더해갑니다.

이렇게 계속 쭉쭉더해갑니다.

여기서 리눅스 명령어인

:wq 또는 :!q

를 통해서 나갈수 있게끔 설정하였고

만약 :!q가 입력딘다면 바로 시스템종료를 시킵니다.

이제 :wq 가

이렇게 입력된다면 

if조건절을 통한 결과 값에 의해 while문을 빠져나옵니다.


[2] 문자열을 java 파일로 생성

이제 파일을 저장할 루트를 물어보는데 둘다 가능합니다. 저의 경우엔

우선 저의 경우는 C드라이브에 프로그래밍관련된 폴더가 있어서 이렇게 했습니다.

해당 폴더 내에는 우선 현재 폴더와 프리퍼런스 기본 파일만 있고 자바파일은 아무것도 없습니다.

C드라이브에 저장한다고 선택한다면

이렇게 아주 간단하게 파일경로를 만듭니다. 맨처음 입력받았던 파일이름에 경로와 .java확장자를 붙여주기만하네요

그리고 해당 경로를 생성했다면

새로 FileWriter fileWriter = new FileWriter(filePath);

FileWriter fileWriter = new FileWriter(filePath);

를 통해서 새로운 파일을 생성하고 

fileWriter.write(initClass);

를통해서 문자열을 파일에 쓰게됩니다.

그렇게 해당 메서드가 실행되면

이렇게 지정한 경로에 파일과 파일내용물이 소실없이 생성되었습니다.


[3] 컴파일

컴파일 관련 소스는 생각보다 많이 간단합니다.

Thread.sleep(1000);

처음 쓰레드를 주지않고 실행하면 오류가 발생했었습니다. 그런데

디버깅을 하면서 천천히 오류를 살펴보면서 봐야지... 했더니 정상적으로 실행되더랍니다!!!

그래서 혹시하는마음에 1초 딜레이를 주니까 문제없이 컴파일이 완료되고 java 프로그램실행도 정상적으로 

진행되더군요 ...

그래서 쓰레드로 1초의 버퍼를 주었습니다. 물론 더 축소해도되지만, 극적의 재미를 위해서...

이제 콘솔창에서도 완료되었다는 것을 출력받았습니다.


[4] 자바 프로그램 실행

위의 소스는 실행하는 것입니다.

아마도 cmd를 통해 실행하게 되니까 cmd를 통해 출력되는 결과값을 콘솔로 가져오기 위해서 작성했습니다.

이렇게 정상적으로 자바프로그램이 실행했습니다.

이것을 마찬가지고 cmd로 동작시킨다면

cmd에서도 동일하게 자바 컴파일되고 실행이 된것을 볼 수 있습니다.

이것으로 자바로 자바 프로그래밍!

자바로 Cmd프로그래밍

자바로 cmd 자바 컴파일하기

자바로 자바컴파일하기

자바로 자바파일 생성하기

에 대해서 포스팅 했습니다. 

긴 글 읽어주셔서 감사합니다.

CreateJavaFile.java
0.00MB

저도 프로그래밍이 처음이고 서툴지만 같이 소스공유하고 부족한게 있다면 질타해주세요 감사합니다.

728x90
반응형
LIST

댓글