일반 시스템 속성(System Property) 얻기 및 설정하기

황제낙엽 2007.01.24 15:18 조회 수 : 2340 추천:180

시스템 속성(System Property) 얻기 및 설정하기

System 클래스는 현재 작업 환경에 대한 속성에 대해 키(key)/값(value) 쌍으로 유지하고 있는 속성 테이블을 가지고 있습니다.
자바 런타임 시스템이 처음 시작할 때, 현재 사용자 정보, 현재 사용하고 있는 자바 런타임 버전, 그리고 파일이름의 경로를 구분하기 위한 경로 구분자,
여러 가지 환경변수 등과 같은 런타임 환경에 대한 정보를 포함하기 위해 시스템 속성이 초기화됩니다.
다음은 자바 런타임 시스템이 처음 시작할 때 초기화 하는 시스템 속성 리스트입니다.

 

∴ “java.version”: 자바 버전 번호

∴ “java.vendor”: 자바 벤더 관련 문자열

∴ “java.vendor.url”: 자바 벤더의 URL

∴ “java.home”: 자바 설치 디렉토리

∴ “java.class.version”: 자바 클래스 버전 번호

∴ “java.class.path”: 자바 CLASSPATH

∴ “os.name”: 운영체제 이름

∴ “os.arch”: 운영체제 구조

∴ “os.version”: 운영체제 버전 번호

∴ “file.separator”: 파일 구분자 (“/” 또는 “”)

∴ “path.separater”: PATH 설정시 경로 구분자 (“:” 또는 “;”)

∴ “line.separator”: 라인 구분자 (CR+LF, CR, or LF)

∴ “user.name”: 사용자 계정 이름

∴ “user.home”: 사용자의 홈 디렉토리

∴ “user.dir”: 사용자의 현재 사용 디렉토리

 


위에 나열된 시스템 속성을 자바 프로그램에서 읽거나 쓰기 위해 System 클래스에서 제공해 주는 몇 가지 메소드들을 사용할 수 있습니다.
이 때, 찾고자 하는 속성의 이름을 사용하여 해당 값을 얻어올 수 있고, 또는 모든 속성을 한꺼번에 다 얻을 수도 있습니다.
또한, 시스템 속성을 완전히 바꿀 수도 있습니다.
시스템 속성을 읽거나 쓰기 위해 사용할 수 있도록 System 클래스에서 제공해 주는 메소드는 다음과 같습니다.

 

 

∴ public static Properties getProperties(): 현재 시스템 속성을 모두 얻는다.

∴ public static String getProperty(String key): 주어진 키에 대한 시스템 속성을 얻는다.

∴ public static String getProperty(String key, String def): 주어진 키에 대한 시스템 속성을 얻고, 시스템 속성이 없으면 주어진 디폴트 값을 리턴한다.

∴ public static void setProperties(Properties props): 주어진 Properties 매개변수로 시스템 속성을 설정한다.

 


다음과 같이 시스템 속성을 얻을 수 있습니다.

 

 

System.getProperty(“path.separator”);
System.getProperty(“java.hello”, “Hello, Wolrd!”);
System.getProperties();

 


다음과 같이 시스템 속성을 설정할 수 있습니다.

 

 

Properties p = new Properties(System.getProperties());
System.setProperties(p);

 


다음은 시스템 속성을 읽고 쓰는 예를 보여주고 있는 자바 프로그램입니다.

 

 

class SystemPropertyTest {
public static void main(String args[]) {
      System.out.println(System.getProperty("user.home"));
      System.out.println(System.getProperty("user.dir"));
      System.out.println(System.getProperty("java.hello", "Hello, Wolrd!"));
      System.out.println(System.getProperty("java.hello"));
      System.setProperty("java.hello", "Hello, Java!");
      System.out.println(System.getProperty("java.hello"));
   }
}

/*
* Results:
D:AIITJAVA�5>java SystemPropertyTest
C:WINDOWS
D:AIITJAVA�5
Hello, Wolrd!
null
Hello, Java!
D:AIITJAVA�5>
*/

<프로그램 12. SystemPropertyTest.java>


실제로 자바에서는 사용자가 정의한 시스템 속성을 설정할 수 있습니다.

이 때, 사용자는 시스템 속성을 정의하고 있는 파일을 사용하게 되는데, 다음은 시스템 속성을 정의하고 있는 텍스트 파일입니다.

 

 

myproperty.message=Hello, Java!
myproperty.version=July Version, 1999
myproperty.maker=Yongwoo's Park
myproperty.copyright=Yongwoo's Park

<프로그램 13. SystemPropertyTest.java>


다음은 위와 같은 시스템 속성 파일을 읽어들여, 시스템 속성을 설정하기 위한 자바 프로그램입니다.

 

 

import java.io.FileInputStream;
import java.util.Properties;
class SystemPropertyTest2 {
   public static void main(String args[]) {
      try {
         FileInputStream propertyFile;
         propertyFile = new FileInputStream("myProperties.txt");
         Properties p = new Properties(System.getProperties());
         p.load(propertyFile);
         System.setProperties(p);
         System.getProperties().list(System.out);
      } catch(java.io.FileNotFoundException e) {
         System.err.println("java.io.FileNotFoundException");
      } catch(java.io.IOException e) {
         System.err.println("java.io.IOException");
      }
   }
} 
 
 /* Results:
 *
 * 다음에 나오는 실행결과는 실행결과를 이름 순으로 소트한 것임
 *
 D:AIITJAVA�5>java SystemPropertyTest2
 -- listing properties --
 awt.toolkit=sun.awt.windows.WToolkit
 file.encoding.pkg=sun.io
 file.encoding=Cp1252
 file.separator=
 java.awt.fonts=
 java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
 java.awt.printerjob=sun.awt.windows.WPrinterJob
 java.class.path=.;C:JAVAJSDK2.0LIBJSDK.JAR;C:JAV...
 java.class.version=46.0
 java.compiler=symcjit
 java.ext.dirs=C:JAVAJDK1.2JRElibext
 java.home=C:JAVAJDK1.2JRE
 java.io.tmpdir=C:WINDOWSTEMP
 java.library.path=C:JAVAJDK1.2BIN;.;C:WINDOWSSYSTE...
 java.specification.name=Java Platform API Specification
 java.specification.vendor=Sun Microsystems Inc.
 java.specification.version=1.2
 java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
 java.vendor.url=http://java.sun.com/
 java.vendor=Sun Microsystems Inc.
 java.version=1.2
 java.vm.info=build JDK-1.2-V, native threads, symcjit
 java.vm.name=Classic VM
 java.vm.specification.name=Java Virtual Machine Specification
 java.vm.specification.vendor=Sun Microsystems Inc.
 java.vm.specification.version=1.0
 java.vm.vendor=Sun Microsystems Inc.
 java.vm.version=1.2
 line.separator=
 myproperty.copyright=Yongwoo's Park
 myproperty.maker=Yongwoo's Park
 myproperty.message=Hello, Java!
 myproperty.version=July Version, 1999
 os.arch=x86
 os.name=Windows 95
 os.version=4.10
 path.separator=;
 sun.boot.class.path=C:JAVAJDK1.2JRElibrt.jar;C:JAVA...
 sun.boot.library.path=C:JAVAJDK1.2JREbin
 sun.io.unicode.encoding=UnicodeLittle
 user.dir=D:AIITJAVA�5
 user.home=C:WINDOWS
 user.language=en
 user.name=geust
 user.region=US
 user.timezone=Asia/Tokyo
 D:AIITJAVA�5>
 */  

<프로그램 14. SystemPropertyTest.java> 
 

 

 

번호 제목 글쓴이 날짜 조회 수
347 java.util.Optional 에서의 map() 함수의 이해 황제낙엽 2026.06.24 666
346 linux(ubuntu) 의 jdk 21 이 설정된 환경에서 jdk 17 로 다운그레이드 절차 황제낙엽 2025.09.22 1532
345 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 2459
344 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 2038
343 [ChatGPT] JDBC API에서 java.sql과 javax.sql 패키지의 차이점 황제낙엽 2025.01.31 2218
342 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 2310
341 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 2525
340 [ChatGPT] File.delete() 함수로 파일 삭제가 되지 않는 경우 황제낙엽 2024.12.10 2809
339 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 2493
338 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 2555
337 Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 2624
336 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 2570
335 Exception 출력에 대한 고찰 황제낙엽 2024.06.10 2198
334 google-auth-library-oauth2-http 라이브러리 다운로드 황제낙엽 2023.11.19 4025
333 firebase-admin-java 라이브러리 다운로드 (firebase admin sdk library) 황제낙엽 2023.11.19 2805
332 Enum 활용 (개인블로그, Effective Java) file 황제낙엽 2023.11.02 2759
331 Enum 활용 (우아한기술블로그) file 황제낙엽 2023.11.02 2790
330 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2508
329 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 3336
328 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 2935