본문 바로가기

JAVA

(12)
[JAVA] String to Json(String타입의 json데이터를 json으로 파싱) Json 규격에 맞는 String 데이터(본 게시글에서는 str이라는 변수)를 JsonParser로 파싱해서 바로 JsonObject에 담는게 안돼서 짜증났다. JsonArray에 담은 뒤 첫번째 인덱스로 뽑아서 아래와 같이 하면 해결.
[JAVA]HttpUrlConnection : POST 방식 (어떻게 보면 기본적인 상식일 수도 있어서 부끄러운 일이지만 기록하는 오늘의 시행착오) A에서 B로 http 통신 write 한다고 했을 때 A는 write만 한다고 해서 OutputStream만 만들어주면 HTTP 통신이 안된다. connection.getResponseCode 메서드 썼을 때 연결이 안되는 걸 보고 눈치챘어야 했는데 너무 헤맸다. HTTP 정보를 주고 받은 뒤 데이터를 송신하기 때문에 A는 write하는 경우밖에 없다고 하더라도 OutputStream의 write 동작 이후 InputStream의 read 로직이 있어야한다.
[JAVA] int와 Integer 값 비교, 그리고 128 알고리즘 코딩 중에 래퍼클래스(Integer)는 == 나 != 로 비교할 수 없다는걸 까먹고 실수를 했다. 주석코드 : 수정 후 주석없는 코드 : 수정 전 -> 비교하는 값 중 하나만 int로 설정해줘도 알아서 int로 비교한다. 위와 같이 수정하면서 해결했고, 그 과정에서 이상한 점이 발견됐다. 저 실수대로라면 모든 Integer 값을 다르다고 봐야 하는데 100 언저리의 숫자 까지는 같은 값은 같은 값으로 연산이 되었다. 확인 결과 java에서 IntegerCash.low와 IntegerCash.high를 두고 그 사이 값은 다른 로직으로 처리되는 것이 보였다. IntegerCash.low 는 -128이고 IntegerCash.high는 127이다.
[JAVA] EXCEL파일 write하기(WritableWorkbook) 위와 같이 WritableWorkbook 클래스로 객체를 생성해주고 WiritableSheet 클래스로 workbook 객체에 sheet를 생성한다. createSheet(시트 이름, 시트 인덱스)로 사용한다. 이후에 WritableFont와 WritableCellFormat 클래스로 이후 추가할 셀의 폰트와 배경색, 서체 등을 설정할 수 있다. addCell 메서드를 통해 Cell을 위와 같이 추가한다. new Label(x좌표, y좌표, 셀의 내용, 셀의 포맷) 형식으로 사용한다. 두번째 라인처럼 mergeCell(셀 병합 시작할 x좌표, 셀 병합 시작할 y좌표, 셀 병합 끝낼 x좌표, 셀 병합 끝낼 y좌표)로 셀을 병합할 수 있다. setRowView(x좌표, 높이) 와 setColumnView(y..
[JAVA] 큐 정렬하기 Queue<String> sorting 가장 작은 index를 리턴하고 후에 sotrIndex 파라메터를 queue.size() - i 로 조정해주면서 오름차순 정렬이 된다. minIndex 위치의 값을 queue의 마지막에 add해준다. for문으로 두 메서드를 실행해서 queue 내부 데이터를 오름차순으로 만들어준다. www.geeksforgeeks.org/sorting-queue-without-extra-space/ 에서 Queue 형식의 sorting 방법을 참고함. Sorting a Queue without extra space - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained compu..
JAR파일 MANIFEST.MF 수정 JAR파일이 외부 라이브러리를 사용하는 경우가 생겼다. 그런데 위처럼 이클립스에서 아무리 use existing manifest from workspace 옵션으로 선택해도 JAR파일의 MANIFEST.MF를 까보면 내가 셋팅한 파일 설정이 안들어가있다. Generate the manifest file 옵션을 선택한 경우와 차이가 없다. 그래서 직접 MANIFEST.MF 파일을 수정해서 조작하는 방법으로 라이브러리를 추가하기로 했다. 3번째 라인을 추가했는데 주의할 점은 사진처럼 마지막에 엔터(줄넘김)를 꼭 입력해야 한다는 것이다. 1번만 해도 되는지는 모르겠지만, 다른 MANIFEST.MF 파일을 참고했을 때 두번씩 있길래 나도 저걸 입력하고 정상적으로 해당 경로의 라이브러리를 사용하는 것을 확인했다...
executeBatch()메서드 기존에 쿼리문들을 statemene에 담아서 executeQuery()로 처리하다가 executeBatch()메서드를 보게돼서 찾아보았다. statement.addBatch(buf.toString())으로 statement에 쿼리를 여러개 담아놓고 statement.executeBatch(); 로 한번에 실행시킨다. 말 그대로 일괄(batch)실행이었다. 쿼리를 반복해서 실행시키는 것보다 훨씬 효율이 좋다고 한다.
[JAVA]renameTo()메서드 소스파일 A와 목적지파일 B가 있다고 가정하여, A.renameTo(B)는 A파일을 B파일로 이름을 변경해준다. 파일의 경로가 다를 경우 위치도 이동된다. 리눅스의 mv 명령어와 일맥상통하다. 그런데 이 renameTo메서드는 실패 확률이 높다고 한다. 게다가 실패시에도 false를 return할 뿐 별 exception이 없다. 그래서 if(!A.renameTo(B))일 경우 파일을 read, write해서 이동해주는게 좋을 것 같다. 현재 겪은 증상은 windows에서 테스트할 때에는 파일 이동이 안되던게 리눅스에 반영해보니 정상 동작해서 로그를 찍어보니 윈도우에서는 if(!A.returnTo(B)) 를 탔다. 이 메서드는 OS도 좀 타는 것 같다.