프로젝트를 진행하다 보면 서버단(JAVA)에서 파일을 저장해야 할 때가 생긴다.

 

이유야 여러가지가 있겠지만 가장 기초적인 파일 저장 샘플 로직을 공유해드립니다.

 

참고하셔서 성공적인 프로젝트를 수행하시길 바랍니다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try{
     //파일 본문 내용을 String 변수에
     String s = "파일 저장 내용";
    
     String jsonFullPath = "/test/json/test.json";
    
     //파일 객체를 생성
     File fullFolder = new File(jsonFullPath);
    
     BufferedWriter writer = new  BufferedWriter;
     writer.write(s);
     writer.close();
 
   }catch(){
    
   }
cs
Posted by by.타니
,

프로젝트를 진행하다보면 가끔 cmd 명령을 날리는 로직이 필요할때가 있다. 

대부분 운영 환경은 리눅스일것이고

개발환경(로컬)은 윈도우일 것이다.

오늘은 java 환경에서 cmd 명령을 날리는 샘플 로직을 만들어 보겠다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//1.실행할 명령어 배열 변수에 담기
 
String param1 = "test1.xml";
String param2 = "test2.xml";
String param3 = "test3.xml";
 
//cmd 명령창에서 python test1.xml test2.xml test3.xml  명령을 실행하는것과 똑같다.
String[] cmdArrayWindow = {"python",param1,param2,param3};
 
//리눅스일 경우 해당 명령어 실행(윈도우와 리눅스를 구분해야 할 경우)
String[] cmdArrayLinux = {"python3",param1,param2,param3};
 
String firstLine = null;
 
//시스템이 윈도우인지 리눅스 인지 판단
if(System.getProperty("os.name").indexOf("Windows")>-1{
    Process p = Runtime.getRuntime().exec(cmdArrayWindow);
BufferReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"euc-kr"));
 
firstLine = br.readLine();
 
}else{
    Process p = Runtime.getRuntime().exec(cmdArrayLinux);
BufferReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"euc-kr"));
firstLine = br.readLine();
}
 
System.out.prinln(firstLine);
cs
 
 
 

윈도우와 리눅스 환경을 구분하여 수행되는 명령어를 분기를 나눴다.

그리고 명령어 수행된후 리턴되는 값은 

한줄이라는 가정하에 한번만 읽어들여 String 변수값에 넣어 줬다. 

만약 리턴되는 값이 여러줄이라면 마지막

firstLine 변수에 집어 넣는 로직을 조금 수정해주면 되겠다.

 

이 포스팅이 도움이 되셨다면 좋아요 한번눌러주세요.^^;

 

Posted by by.타니
,

오늘은 이클립스 개발도구의 테마(배경 및 소스코드) 를 변경하는 법을 같이 알아 볼께요

사실 여러가지 테마 플러그인이 있지만 제가 여러가지 사용해본 결과 "Moonrise UI " 가장 좋다고 생각이 듭니다.

물론 이 부분은 저의 개인적인 견해입니다.

 

장시간 모니터를 바라보는 개발자 입장에서는 배경을 어둡게 하여서 눈의 피로를 조금이라도 줄이는게 좋다고 생각됩니다.

그럼 어떻게 적용할지 시작해 보도록 하겠습니다.

 

먼저 기본화면 입니다.

 

1. 이클립스를 실행한뒤에

 

https://marketplace.eclipse.org/content/eclipse-moonrise-ui-theme

 

Eclipse Moonrise UI Theme

Dark UI theme for Eclipse 4+.

marketplace.eclipse.org

 

링크로 가서 Install 부분을 드래고 한다음에 이클립스 위에다가 드래그 한다.

그러면 설치가 된다. 설치후 재부팅해준다.

 

2. 재부팅이 완료되면

메뉴바에서 [ window ] -> [ preferences ] 이동 후 [ General ] -> [ Appearance ] 이동합니다. 그 다음Theme : MoonRise로 변경 해주신 후 Apply를 클릭 해주시면 됩니다.

 

 

3.

RainbowDrops.epf
0.08MB

그 다음 첨부파일(RainbowDrops.epf) 이클립스 내에서 File > Import > General > Preferences를 통해 RainbowDrops.epf 를 불러들이면 Syntax Color까지 변경할 수 있습니다.


 

 

 

- 수동으로 적용하기

  • Manual:

    Or download moonrise_0.8.9.jar package and put it into your Eclipse \dropins\plugins\ folder;

  • Restart Eclipse and go to Window > Preferences > General > Appearance;

  • Select MoonRise (standalone) or, for a little better tabs decoration, install Eclipse 4 Chrome Theme from marketplace or from here and select MoonRise;

  • Rest your eyes ;)


Syntax highlighting scheme:

You can find the one used in the screenshot here:

Posted by by.타니
,



파일 업로드시 전체 경로 + 파일명을 받아와

파일명만 추출하고 싶을경우

 

//전체경로를 받아온다.

String url = mberManageVO.getPortfolioFile();

 

//파일명만 추출한다.
String fileName = url.substring( url.lastIndexOf('\\')+1, url.length() );

 

//확장자를 제외한 파일명을 추출한다.
String fileNameWithoutExtn = fileName.substring(0, fileName.lastIndexOf('.'));

Posted by by.타니
,

이제 본론으로.... iBatis를 이용할때 이부분 더 좋게 지원해준다.
<selectKey>를 이용하면 프로그램쪽에서 한번더 select하는 번거로움을 덜어주고 성능면에서도 조금은 도움을 줄것으로 생각된다.

* 키값이 자동증가인 경우 ...
<insert id="insertId">
  insert into MEMBER (MBR_ID, NAME) values
    ( #mbrId#, #name# )
  <selectKey keyProperty="memberSeq" resultClass="int">
    SELECT  LAST_INSERT_ID()
  </selectKey>
</insert>
Integer result = sqlMap.insert("insertId", member);

이렇게 처리하면 result에 마지막으로 추가된 키값이 담기게 된다.

* 키값이 자동증가가 아닌경우...

<insert id="insertId">
  <selectKey keyProperty="memberSeq" resultClass="int">
    SELECT MAX(MBR_SEQ) + 1 FROM MEMBER
  </selectKey>
  insert into MEMBER (MBR_SEQ, MBR_ID, NAME) values
    ( #memberSeq#, #mbrId#, #name# )
  <selectKey keyProperty="memberSeq" resultClass="int">
    SELECT  LAST_INSERT_ID()
  </selectKey>
</insert>

이와 같이 처리하면 끝.

Posted by by.타니
,

시퀀스를 생성하지 않고 ID 값으로 자동으로 insert 할때마다 자동으로 1값을 증가 시켜 놓고 싶었다

 

 

1
2
3
4
INSERT INTO school
(school_id, school_name,id_designer)
VALUES
((select ifnull(max(a.school_id), 0)+1 from school a) , #name#, #idCustomer#)

주의, mysql의 경우 하위 쿼리시 테이블에 별명을 붙여야 함

 

위에 쿼리에는 a라는 별명을 붙임.

 

 

Posted by by.타니
,

동적으로 어떠한 정보를 추가, 삭제후 Controller 에게 값을 전달하기 위한 방법

 

-html

 

<input type="hidden" value="test1" name="test">
<input type="hidden" value="test2" name="test">
<input type="hidden" value="test3" name="test">
<input type="hidden" value="test4" name="test">
<input type="hidden" value="test5" name="test">

 

위와같이 name 속성을 같게 해준다.

 

-Controller

 

private List<String> test;

 

선언하면 동적으로 생성된 input이 들어오는것을 확인할수 있다.

 

Posted by by.타니
,

특정 횟수만큼 반복하여 동일한 일을 처리한다던지 할때 사용하는것이 반복문이다. 반복문에는 for문, while문 등이 있으며
그 중에서도 for문을 가장 많이 이용하기도 한다.
특히 반복문의 경우 DB에서 리스트등을 가져와 가져온 갯수만큼 반복하여 동일한 일들을 처리할때 흔하게 사용된다고 할 수 있다.

오늘은 JSTL의 반복문인 <c:forEach> 와 <c:forTokens>에 대해 알아보자



  For 문 : <c:forEach>

 


1. 전체 속성 값 예


<c:forEach var="item" items="${list}" begin=0 end=5 step=1 varStatus="status">
    번호 : ${status.count}
    이름 : ${item.name}
    나이 : ${item.age}
    주소 : ${item.addr}
</c:forEach>



2. 속성 설명

항목

설명

비고

 var

 사용할 변수명

 필수항목

 items

 Collection 객체(List, ArrayList)

 필수항목

 begin

 시작 index. 정의되지 않을경우 0


 end

 종료 index. 정의되지 않을경우 itmes 크기 - 1

 

 step

 반복할때 이동할 index 갯수

 

 varStatus

 반복상태를 알수 있는 변수

 

 



3. varStatus 값 설명


리턴

설명

 index

 int

 items에 정의한 항목을 가리키는 index 번호이다. 0부터 시작

 count

 int

 몇번째 반복인지 나타낸다. 1부터 시작

 first

 boolean

 첫번째 반복인지 나타냄

 last

 boolean

 마지막 반복인지 나타냄

 




일반적으로 특별하게 사용할 속성이 없다면 var와 items만 이용하여 아래와 같이 사용할 수 있다.

<c:forEach var="item" items="${list}">
    이름 : ${item.name}
    나이 : ${item.age}
    주소 : ${item.addr}
</c:forEach>

 

 


 

---------------------------------------------------------------------------------------------------------------------------

 

<c:foreach> 태그 상태 속성 입니다.

속성을 이용해서 제어하면 좀더 쉽게 제어할수있습니다.

 

< c:foreach items=”${RESULT}” var=”RESULT” varStatus=”status”>

 

${status.current}<br/> <!– 현재 아이템 –>

${status.index}<br/>        <!– 0부터의 순서 –>

${status.count}<br/>        <!– 1부터의 순서 –>

${status.first}<br/>           <!– 현재 루프가 처음인지 반환 –>

${status.last}<br/>           <!– 현재 루프가 마지막인지 반환 –>

${status.begin}<br/>        <!– 시작값 –>

${status.end}<br/>         <!– 끝값 –>

${status.step}<br/>         <!– 증가값 –>

< /c:forEach>

for:each 태그의 상태를 제어함으로써, 접근이 용이해집니다

 


 


토큰을 이용한 반복문 : <c:forTokens>

 


문자열을 특정기호로 잘라내어 반복할수 있는 태그이다.
Java에서 StringTokenizer을 이용하여 토큰을 분리하여 while문을 사용하는것을 볼 수 있는데, 이와 동일한 기능을 제공한다.

<c:forTokens var="item" items="서울,대전,대구,부산,울산" delims=",">
    지역 : ${item}
</c:forTokens>

items에는 문자열을 넣고, delims 에는 분리할 기준 문자열을 넣으면 된다. 각 토큰별로 분리된 문자열은 var로 지정된 변수로 표출이 가능하다.

-------------------------------------------

 

Posted by by.타니
,

 개발을 하다보면 DB에 저장되어 있는 DATE 형태의 날짜 정보를 화면에 보여주기 위한 방법의

 

하나로 SQL 쿼리를 이용하여 String 형태로 가져와 쉽게 보여주는 방법은 아래와 같다.

 

 


 

물론 Date 형태의 타입을 그대로 가지고와서 화면단에서 변경 해주는 방법도 있지만 뭔가 더 복잡하게 느껴진다.


 

 

선택은 개발자의 몫이긴 하다.

 

방법은 간단하다. 


SELECT 문에서 아래와 같이

 T0_CHAR( "날짜값" , " 포맷 " ) 

형태로 검색해서 가지고 오면 간단하다.


EX)

SELECT

TO_CHAR(TO_DATE(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD')

FROM DUAL;


 


moon_and_james-2


Posted by by.타니
,


화면단에서 넘어온 날짜는 - 붙어있는 경우가 대부분이다

DB 의 형태가 DATE 타입이 아니라 VCHAR 형태로 가정하였을경우 - 를 제거 하고 값을 입력하는 방법은 간단하다.


방법은 2가지



1. JAVA 단에서 - 를 제거하고 넘기는 방법


2. SQL 에서 INSERT 할때 SQL을 이용하여 - 를 제거 하는 방법


2번에 대해서 설명을 간단히 하면 REPLACE 함수를 통해 특수문자인 - 를  ""  공백으로 바꿔주면


간단하게 해결 할 수 있다.

EX)


REPLACE(2016-02-21,'-','') 


이렇게 하면 20160221 로 값이 변경되며 DB에 쉽게 저장할수 있다.





Posted by by.타니
,