Java에서 String, long, int 등으로 변환 할 때 사용하는 코드


public class StringTest {
public static void main(String[] args) {
try {
/* valueOf 사용 */
long val = 20000L;
String s = String.valueOf(val);
System.out.println(s);

/* Wrapper Class */
String ss = Long.toString(val);
System.out.println(ss);


int i = Integer.parseInt(s);
long l = Long.parseLong(ss);

} catch (Exception e){
e.printStackTrace();
}
}
}


'개발 > Java' 카테고리의 다른 글

Java 객체저장  (0) 2016.11.16
[spring] log4j 설정 및 사용법  (0) 2016.10.26
jar 관련 명령어  (0) 2016.09.29

객체 저장(OutputStream, InputStream, BufferStream)

객체를 저장하는 방법에는 2가지가 있습니다.
  1. 직렬화를 사용하여 저장
    • 자바 프로그램에서만 사용한다는 조건에서 사용합니다.
    • 클래스를 직렬화 할려면 implements Serializable를 사용해야 됩니다.
    • static 변수는 직렬화 하지 못합니다. 
    • 클래스 중에 직렬화를 하고 싶지 않은 변수에는 transient를 사용합니다.
  2. 문자로 저장
    • 타 프로그램에서도 저장된 객체를 사용 할 수도 있을때 사용합니다.
◆ 직렬화를 사용할 경우
 try {
 //  "dg.ser"로 저장합니다.
  ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("dg.ser"));
  oos.writeObject(d);
  oos.close();
  
 //  파일이름이 "dg.ser"인 파일을 가져옵니다.
  ObjectInputStream ois = new ObjectInputStream(new FileInputStream("dg.ser"));
  d = (DungeonGame)ois.readObject();
  ois.close();
  
 } catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
 }

《저장》
  • FileOutputStream를 사용하여 바이트 형태로 저장합니다.
  • ObjectOutputStream를 사용하여 직렬화 하여 저장합니다.
  • ObjectInputStream를 닫아 줍니다. ObjectInputStream를 닫으므로서 밑에 있는 FileOutputStream는 자동으로 닫힙니다.
《가져오기》
  • FileOutputStream를 사용하여 바이트 형태로 읽습니다.
  • ObjectOutputStream를 사용하여 클래스를 찾아서 불러온 다음 저장되었던 인스턴스 변수값을 다시 대입합니다. 직렬화된 객체의 생성자는 실행되지 않습니다.
  • ObjectInputStream를 닫아 줍니다. ObjectInputStream를 닫으므로서 밑에 있는 FileOutputStream는 자동으로 닫힙니다.


'개발 > Java' 카테고리의 다른 글

Java String, Long, ETC 변환  (0) 2016.11.16
[spring] log4j 설정 및 사용법  (0) 2016.10.26
jar 관련 명령어  (0) 2016.09.29

참고된 사이트

http://changpd.blogspot.kr/2013/05/spring-lo4j.html


























log4j에서 사용하는 log 레벨은 여섯단계이다. 
TRACE으로 설정하면 모든 레벨의 로그가 전부 기록되지만
FATAL으로 설정하면 FATAL보다 하위수준의 로그는 기록되지 않는다. 


Log4j 설정 

log4j를 사용하기 위해 pom.xml과 web.xml에 다음처럼 추가한다. 

- Log4j Maven dependencies
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.logging.log4j</groupId>
  4. <artifactId>log4j-api</artifactId>
  5. <version>2.0-beta6</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.logging.log4j</groupId>
  9. <artifactId>log4j-core</artifactId>
  10. <version>2.0-beta6</version>
  11. </dependency>
  12. </dependencies>


- Web.xml
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>




log4j.properties
# Log4j Setting file
log4j.rootLogger=INFO, console, logfile

# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n

# Daily file log
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${catalina.home}/logs/changpd.log
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L) - %m%n

# log level and appender
log4j.logger.com.changpd=DEBUG, console
log4j.logger.com.changpd.Test=INFO, logfile
log4j는 위처럼 text형식말고도 xml형식으로도 사용가능하다.
log4j.xml로 검색하면 쉽게 찾을수 있음.

# Log4j Setting file
log4j.rootLogger=INFO, console
log4j 기본 설정이다.
기본적으로 INFO 수준 이상의 로그만 console을 통해 출력.

console에 대한 설정작업
# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n
마지막 아랫줄에서 사용하는 log4j 옵션의 설명은 아래와 같다. 
 %p  debug, info, warn, error, fatal 등의 priority 가 출력된다.  
 %m  로그내용이 출력됩니다 
 %d  로깅 이벤트가 발생한 시간을 기록합니다.
     포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 
     SimpleDateFormat에 따른 포맷팅을 하면 된다 
 %t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.  
 %%  % 표시를 출력하기 위해 사용한다.  
 %n  플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.  
 %c  카테고리를 표시합니다 
     예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다. 
 %C  클래스명을 포시합니다. 
     예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 
     %C{2}는 xyz.SomeClass 가 출력됩니다 
 %F  로깅이 발생한 프로그램 파일명을 나타냅니다. 
 %l  로깅이 발생한 caller의 정보를 나타냅니다 
 %L  로깅이 발생한 caller의 라인수를 나타냅니다 
 %M  로깅이 발생한 method 이름을 나타냅니다. 
 %r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 
 %x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다. 
 %X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.


파일로그
# Daily file log
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${catalina.home}/logs/changpd.log
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L) - %m%n
로그는 appender에 의해 출력 방법이 결정된다. 위의 경우는 file로 출력하는 방법이고,
DailyRollingFileAppender는 일자별로 로그파일을 새로 맹그러 준다.
# log level and appender
log4j.logger.com.changpd=DEBUG, console
log4j.logger.com.changpd.Test=INFO, logfile
특정 클래스에서 log4j를 다른 수준의 다른 형식으로 출력할 수 있다.
log4j.logger.[class_name]
위를 예로들면 changpd 이하의 클래스에서 INFO 이상일경우
rootloger에 의해 한번
위의 설정에서 한번
중복되서 출력이 되게 된다. (debug<info)



sql 로그 출력 - http://changpd.blogspot.kr/2016/08/log4j-sql.html


log4j 공식 사이트 : http://logging.apache.org/
머드초보님블로그 : http://mudchobo.tistory.com/251
수갈단산하자폭단님 블로그:http://scblood.egloos.com/3279715


'개발 > Java' 카테고리의 다른 글

Java String, Long, ETC 변환  (0) 2016.11.16
Java 객체저장  (0) 2016.11.16
jar 관련 명령어  (0) 2016.09.29
jar(Java Archive)에 대해서 
1. jar파일이란 : jar파일은 archive파일이다. 
즉 여러개의 파일을 하나의 파일로 묶는jar명령을 사용하여 생성된다. 
이 파일은 winzip에서 열어 볼 수 있으며, winzip에서 열어보면 여러개의 파일들이 디렉토리 정보를 
가진채 들어 있다.
(아무 jar파일을 직접클릭해 열어 보시라)
 
2. zip 파일과 다른 점 : winzip과 다른점은 압축되어 있을수도 있고, 그냥...하나로 묶어놓은 파일일수
도 있다.
그래서 jar 파일을 archive파일이라 볼수 있다. 
이렇게archive파일로 묶는 이유는 자바로 개발한 여러클래스 파일들 또는 패키지 파일이있을때, 이를 
하나로 묶어두면,
그 클래스들을 참조하기도 편하고, 다운 받기도 쉽다.(애플릿의 경우 더욱 그러함)
 
3. jar명령 사용하기 
(1) 명령구문 : jar {ctxu}[vfm0M] [jar-file] [manifest-file] [-C dir] files ...
(2) {ctxu} 중의 하나는 맨 앞에 나와야할 필수 옵션이다.    
: c  (새로운 archive파일을 생성한다)    
: t  list table of contents for archive     
: x  (다음에 지정한 파일들을 archive파일로 부터 압축을 푼다)    
: u  (기존 archive파일에 들어있는 파일을 수정한다.)
(3) [vfm0M]은 {ctxu} 중의 하나다음에 오는 옵션이다.	
: v  (명령화면창으로 진행사항에 관한 메시지를 출력한다.):웬만하면 써주면좋음..    
: f  (archive될 파일이름을 지정한다.) : 그래도 생성될 파일의 이름은 써줘야겠죠?    
: m  (정보를 manifest파일로 부터 포함한다.)    
: 0  (저장만 하고, zip으로 압축하진 않는다.)      
-  클래스파일을 압축하면 곤란하죠...class파일의 경우는 꼭..써줘야죠..    
: M  (추가되는 엔트리에 대한 manifest 파일을 생성하지 않는다.)
(4) -C  (지정된 디렉토리로 바꾸고, 다음 파일을 포함한다.)	
: 어떤 파일이 디렉토리이면 순환되면서 처리된다. 
(5) manifest file이름과 archive파일 이름은 순서대로 지정되어야 한다.
(6) manifest file : 뭐...대단한 파일인줄 알았는데, 열어보면 내용이 다음과 같습니다.    
: m옵션을 주어 지정하는데 뭐....중요한건 아닌거 같으니까...이런게 있다는것만 아셔도 될듯..   
<내용>
Manifest-Version: 1.0
Created-By: 1.2.2 (Sun Microsystems Inc.)
4. 사용예예) jar cvf new.jar 1.class 2.class
: c옵션이 사용되었으므로 일단은 1.class, 2.class를 묶으려고 시도할 것이다.  
(생성시는 반드시 f옵션을 줘야함, 안주면 어케 될까?...함해봐요...컴에서 삑삑  소리가 나올것임..-.-;
왜그런지는 아시겠죠?)
: v옵션이 사용되었으므로 진행상황 메시지가...줄줄 나올것이다. (이건 안해도 됨)
: f옵션은 c옵션사용시 생성될 파일명을 지정(반드시 해주어야 지정된 이름으로 파일이  생성된다.)
예) jar cvf new.jar -C test/ .
: -C옵션을 주면 현 디렉토리 아래의 test디렉토리에 있는 모든 파일을 new.jar로  묶어준다.
예) jar cvf new.jar -C /test .
: 위의 것이랑 비슷하지만... test디렉토리 뿐 아니라 현디렉토리에 있는 파일도    new.jar로 묶어준다.
예) jar xf test.zip: x옵션은 아카이브를 푼다는 의미, f는 아시죠...?
예) jar ufv0 new.jar test
: u옵션은 test디렉토리 밑의 파일들을 new.jar에 추가한다는 의미...(test디렉토리에  파일이 
있어야겠죠..?)
: 0옵션은 압축하지 말고 추가하라는 의미(클래스 파일의 경우는 이 옵션을 써줘야함)
: f와 v는 아시겠죠...?
 
하나의 자바 응용 프로그램을 실행할때 수십개의 클래스 파일이디렉토리 내에 존재해야 하는 경우가
있습니다.
응용프로그램에서 jar 파일을 이용하게 되면 jar 파일을 받아서 풀어주고실행시켜 주면 되지요. 
하지만 jar 압축시에 추가적인 정보를 지정하는 manifest file의 설정으로 파일을 풀지 않고 jar 파일의 
main() 메소드를찾아 프로그램을 실행(java -jar 옵션을 통해) 시켜 줄 수 있는 설정을 할 수 있습니다. 
Manifest.mf 파일은 jar로 파일을 압축하는 경우 생성되는 파일로 META-INF 디렉토리하에 생성됩니다. 
이 파일을 하나 받아 다음과 같이 파일에 Main-Class 항목을 추가하여 적어줍니다. 
* 파일(manifest.mf)내용.. 
(main() 메소드는 Ness.class 에 있는 경우)
Manifest-Version: 1.0
Created-By: 1.3.1 (Sun Microsystems Inc.)
Main-Class: Ness <= 추가부분
* jar 파일로 클래스 묶어주기 (현재 디렉토리의 모든 class 파일과 image 디렉토리의 파일들을 
묶고manifest.mf 파일을 적용시켜
 ness.jar 파일을 생성합니다. )
jar -cfm ness.jar manifest.mf *.class image
* 실행 다음과 같이 입력하면 자동으로 압축된 jar 클래스 파일로부터메인 클래스를 읽어들어 
실행하게 된다.
java -jar ness.jar 
단, 실행시에 image 디렉토리의 내용은 별도로 풀어주어야 합니다.
 
http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=javatip&c=r_p&n=1001644933&p=1&s=t


여러 개의 class 파일로 이뤄진 프로그램을 jar 형식의 파일로 합쳐서 배포할 수 있다. 하나의 파일로 관리할 수 있다는 장점뿐만 아니라, 압축이 되어서 용량도 더 작게 만들 수 있는 장점이 있다. 그리고, 다음에 설명할 exe 파일로 만들어 배포할 때도 이 jar 파일을 이용하면 편리한 장점을 얻을 수 있다. 이 문서에서는 jar 파일의 모든 옵션을 설명하진 않는다. 기본적인 생성 방법과 jar로 압축된 파일에서 실행시키기 위한 manifest 파일 생성 및 추가 방법에 대해서 설명하고자 한다.

jar 파일 생성하기

jar 프로그램의 기본적인 명령 순서는 다음과 같다.
jar <option> <target_file> <src_files>
jar 파일을 생성하기 위한 option은 c 이다. create 혹은 compress의 의미를 가지고 있을 것이라 생각된다. 그리고 압축이 되고 있는 상황을 볼 수 있게 하려면 v 라는 option을 쓰면, 파일의 압축과정을 볼 수 있다. 한가지 더 볼 것은 f option이다. 이것은 <target_file> 이름을 지정할 수 있도록 해주는 option이다. <src_files> 에는 파일이름이나 디렉토리 이름이 올 수 있다. 그럼, JavaAmp의 경우를 예를 들어 살펴 보자. JavaAmp는 myprojects.javaamp 패키지에 포함되어 있기 때문에 디렉토리 구성이 상당히 복잡하다. 그렇지만, package 자체를 jar 파일로 생성해주어야 하기 때문에, myprojects 의 부모 디렉토리로 나와서 myprojects 디렉토리 자체를 jar 파일로 생성해주면 된다. 즉,
jar cvf JavaAmp.jar myprojects
라고 명령을 주면 된다. 압축과정이 나타나고, 결과로 JavaAmp.jar 가 생성되었음을 볼 수 있을 것이다.

manifest 파일 수정하기

jar 파일이 생성되었다. 그런데, 실행은 어떻게 하나? jar 파일로 프로그램을 실행하기 위해서 java 인터프리터에서는 -jar 라는 옵션을 제공하고 있다. 즉, 다음과 같은 명령을 주면 된다.
java -jar JavaAmp.jar
-jar 옵션 다음에는 실행할 jar 파일을 지정하면 된다. 어라! 그런데 실행이 되지 않네? 우리는 main()을 포함하고 있는 클래스에 대한 정보를 전혀 주지 않았다. 그래서 java 인터프리터가 이 위치를 찾지 못해서 이러한 결과가 나타난다. 그렇다면 어떻게 해줘야 할까? 이 장에서 설명하고자 하는 manifest 파일이라는 것을 수정해야 한다. jar 파일은 winzip 프로그램에서도 지원하므로 winzip 프로그램을 이용해서 내부를 살펴보자. Manifest.mf 라는 파일을 찾을 수 있다. 이것이 바로 manifest 파일이다. 이 파일을 꺼내와서 내부를 살펴보자. 두 줄이 쓰여 있는데 version 정보만 들어 있다. 여기에 추가로 main class의 위치를 지정해주면 된다. 즉, 다음 한 줄을 추가하자.
Main-Class: myprojects.javaamp.JavaAmp
수정한 manifest 파일을 다시 jar 파일 내부로 수정해줘야 하는데 어떻게 하면 될까? 기존의 파일을 update 할 경우에는 u 옵션을 사용한다. 그리고 manifest 파일을 변경할 경우에는 m 옵션을 쓴다. 즉, 다음과 같은 명령으로 jar 파일의 manifest 파일을 update 할 수 있다.
jar umf Manifest.mf JavaAmp.jar
이제 다시 JavaAmp를 실행해보자. 이제 프로그램이 실행되는 것을 확인할 수 있을 것이다.

글을 마치며...

jar 파일은 여기에서 소개한 기능 말고도 많은 기능을 포함하고 있다. jar 파일로부터 추출하는 기능, 압축을 하지 않고 그대로 파일을 합쳐주는 기능 등이 있는데, 직접 확인해보도록 하자. jar 프로그램의 간단한 option은 파라메터를 넘기지 않고 그냥 jar 프로그램만 실행시키면 확인해볼 수 있다. 자세한 설명은 이 곳에서 확인해 볼 수 있다.
 
예) 
Manifest-Version: 1.0 
Main-Class: XXXXX  <== 실행할 클래스이름(main()이 꼭 있어야 됩니다.) 
Class-Path: jcert.jar jsse.jar jnet.jar mm.jar <==필요한 classpath지정 

jar cvfm 파일명.jar manifest.mf *.class

'개발 > Java' 카테고리의 다른 글

Java String, Long, ETC 변환  (0) 2016.11.16
Java 객체저장  (0) 2016.11.16
[spring] log4j 설정 및 사용법  (0) 2016.10.26

+ Recent posts