내가 있는 폴더 위치에 자바 파일이 바로 없는 경우에는 클래스 경로(classpath)를 미리 설정해주면 더 좋다.
실은 이전 포스트에서도 잠시 사용했는데 -cp가 classpath의 줄임말이다.
클래스 경로를 설정하지 않고 돌린다면 아래 코드 형태가 될 거다.
java -cp [자바 파일 이전까지의 path] [클래스 이름]
// 예시: 지금 위치에서 test라는 파일 안에 Sum.java가 있는 경우
java -cp ./test Sum
Eclipse, BitBucket과 같은 IDE로 작성한 경우는 클래스 이름 앞에 패키지 이름을 더해준다.
java -cp [패키지까지의 경로] [패키지 이름].[클래스 이름]
// 예시
java -cp ./Summation/src sum.Sum
이제 classpath를 미리 설정해주면 아래처럼 지금 있는 폴더 위치부터 패키지 전까지의 경로를 설정해주면 된다.
set classpath=[경로]
//예시
set classpath=Summation/src
// 여러개의 classpath
set classpath=[경로1];[경로2]
잘 설정되었는지 확인해주면 설정한 경로가 나온다.
echo %CLASSPATH%
>>./Summation/src
이제 돌려보자
java [클래스 경로에 있는 파일 이름]
java Sum //-cp없이 됨
참고로 classpath 설정 시 지금 열고 있는 명령 창에서만 유효하다.
영구적으로 설정하고 싶으면 환경 변수 -> 시스템 변수 -> 새로 만들기를 누르고
CLASSPATH를 이름으로, 경로를 추가해주면 된다.
무튼 이젠 -cp명령어 없이 그냥 자바 파일을 돌릴 수 있게 되었다!
[path 임시로 추가하기]
그냥 추가로 적어보았다.
path도 미리 설정가능한데, %path%를 넣어주는 이유가
기존의 환경 변수에 이어서 새로운 변수를 추가해주기 위함이다.
// 현재 명령창에서만 해당
set path=%path%;[새로운 경로]
// 아래 코드는 영구적임
setx path=%path%;[새로운 경로]
[파일 입출력 명령창으로 돌리기]
조금 더 나아가서 입출력을 받는 자바 파일을 classpath와 path를 활용해서 돌려보자.
아래 코드는 실수가 담긴 파일(input.txt)을 읽고 그 합을 새로운 파일(output.txt)에 저장하는 코드이다.
Sum.java
package sum;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class Sum {
public static void main(String[] args) throws FileNotFoundException {
PrintStream ps = System.out;
Scanner sc = new Scanner(System.in);
if (sc.hasNextLine()) {
String fname = sc.nextLine();
double sum = 0;
sc = new Scanner(fname);
while (sc.hasNext()) {
sum += sc.nextDouble();
}
PrintStream ps2 = new PrintStream(new File("output.txt"));
ps.printf("Sum of the numbers is: %.2f", sum);
ps2.printf("Sum of the numbers is: %.2f", sum);
sc.close();
}
}
}
input.txt
1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9
참고로 이클립스로 만들어서 파일 경로는 이렇게 되어있다.
ReadAndWrite 파일 밑에 input.txt가 있고 sum 패키지 안에 Sum.java가 있다.
이제 이 코드를 돌려보자
// ReadAndWrite위치 기준
set classpath=./src
javac ./src/sum/Sum.java
java sum.Sum < input.txt
>> Sum of the numbers is: 49.50
윈도우 명령창에서 자바 프로그램 돌리기 (0) | 2021.01.28 |
---|
댓글 영역