지식메모/JAVA
-
자바 스윙으로 파일 열기창 구현2017.06.14
-
자바 일정구간 문자열 추출하기2017.03.24
-
자바 스윙 프레임바 아이콘 바꾸기2015.10.12
poi 라이브러리를 활용하여 엑셀 열(column) 별로 데이터 가져와 ArrayList에 넣기
기본 코드는 이 링크를 참고하였습니다.
https://javaslave.tistory.com/78
POI 버전은 3.11을 사용하였습니다. (최신 poi 4점대 버전에서는 코드가 동작하지 않습니다)
poi 3.11 라이브러리 파일
용량 제한으로 압축파일 2개로 나뉘어 첨부함
사용 용도
위와 같은 엑셀 내용에서 각 열 별로 데이터를 긁어와 각 ArrayList에 저장함
로그인시
ID에는 ArrayList1.get(0)
암호에는 ArrayList2.get(0)
이런 식을 1:1 매칭해서 로그인에 활용하는 단순 용도
발생하는 문제점
첫 열의 개수에 따라 나머지 열의 개수가 결정됨
첫 열이 10개고 나머지 열이 20개,16개 등등 제 각기라면 첫 열 기준으로 모두 10개의 데이터만 가져오게 되는 문제가 존재함
전체 코드
package poi;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class POIReader {
public static List<String> account1 = new ArrayList<String>();
public static List<String> account2= new ArrayList<String>();
public static List<String> account3 = new ArrayList<String>();
public static List<String> account4 = new ArrayList<String>();
public static List<String> account5 = new ArrayList<String>();
public static List<String> account6 = new ArrayList<String>();
/**
* XLSX 파일을 분석하여 List<poi> 객체로 반환
* @param filePath
* @return
* @return
*/
public static void xlsxTopoiList(String filePath) {
// 반환할 객체를 생성
FileInputStream fis = null;
XSSFWorkbook workbook = null;
try {
fis= new FileInputStream(filePath);
// XSSFWorkbook은 엑셀파일 전체 내용을 담고 있는 객체
workbook = new XSSFWorkbook (fis);
// 탐색에 사용할 Sheet, Row, Cell 객체
XSSFSheet curSheet;
XSSFRow curRow;
XSSFCell curCell;
// poiList vo;
// Sheet 탐색 for문
for(int sheetIndex = 0 ; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
// 현재 Sheet 반환
curSheet = workbook.getSheetAt(sheetIndex);
// row 탐색 for문
for(int rowIndex=0; rowIndex < curSheet.getPhysicalNumberOfRows(); rowIndex++) {
// row 0은 헤더정보이기 때문에 무시
if(rowIndex != 0) {
// 현재 row 반환
curRow = curSheet.getRow(rowIndex);
// vo = new poiList();
String value;
// row의 첫번째 cell값이 비어있지 않은 경우 만 cell탐색
System.out.println("---"+curRow.getCell(0));
if(curRow.getCell(0) != null){ // 첫번째열 모자를 때 구분
if(!"".equals(curRow.getCell(0).getStringCellValue())) {
// cell 탐색 for 문
for(int cellIndex=0;cellIndex<curRow.getPhysicalNumberOfCells(); cellIndex++) {
curCell = curRow.getCell(cellIndex);
if(true) {
value = "";
// cell 스타일이 다르더라도 String으로 반환 받음
if(curCell != null){ //각 열의 목록 길이에 따라 분기
switch (curCell.getCellType()){
case XSSFCell.CELL_TYPE_FORMULA:
value = curCell.getCellFormula();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
value = curCell.getNumericCellValue()+"";
break;
case XSSFCell.CELL_TYPE_STRING:
value = curCell.getStringCellValue()+"";
break;
case XSSFCell.CELL_TYPE_BLANK:
value = curCell.getBooleanCellValue()+"";
break;
case XSSFCell.CELL_TYPE_ERROR:
value = curCell.getErrorCellValue()+"";
break;
default:
value = new String();
break;
}
}
switch (cellIndex) {
case 0: // name
account1.add(rowIndex-1, value);
break;
case 1: // 암호
account2.add(rowIndex-1, value);
break;
case 2: // 여기서 하나씩 분류
account3.add(rowIndex-1, value);
break;
case 3: // 여기서 하나씩 분류
account4.add(rowIndex-1, value);
break;
case 4: // 여기서 하나씩 분류
account5.add(rowIndex-1, value);
break;
case 5: // 여기서 하나씩 분류
account6.add(rowIndex-1, value);
break;
default:
break;
}
}
}
}
}
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 사용한 자원은 finally에서 해제
if( workbook!= null)
workbook.close();
if( fis!= null) fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
'지식메모 > JAVA' 카테고리의 다른 글
자바 Swing에서 ArrayList를 JcomboBox에 집어넣기 (1) | 2019.04.28 |
---|---|
자바 스윙으로 파일 열기창 구현 (0) | 2017.06.14 |
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
자바 Swing에서 ArrayList를 JcomboBox에 집어넣기
String 배열을 사용해서 콤보박스에 값들을 보여줬었는데
ArrayList를 사용해서 콤보박스에 보여주고 싶었따.
스트링 배열은 String[] account1 = { id,id1,id2}
이런식으로 콤마로 이루어진 값이었는데 ArrayList는 배열마다 각 값을 가지고 있기 때문에 나중에 관리하기 편할 것 같았다.
기존 String 배열(account1)을 콤보박스에 넣었을 때 코드
JComboBox<?> comboBox = new JComboBox<Object>(account1);
ArrayList(account1)를 콤보박스에 넣을 때 코드
JComboBox<?> comboBox = new JComboBox(account1.toArray(new String[account1.size()]));
이렇게 하면 account1 배열의 사이즈만큼 알아서 콤보박스에 값이 노출되었다
'지식메모 > JAVA' 카테고리의 다른 글
poi 라이브러리를 활용하여 엑셀 열(column) 별로 데이터 가져와 ArrayList에 넣기 (0) | 2019.05.02 |
---|---|
자바 스윙으로 파일 열기창 구현 (0) | 2017.06.14 |
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
자바 스윙으로 파일 열기창 구현
'지식메모 > JAVA' 카테고리의 다른 글
poi 라이브러리를 활용하여 엑셀 열(column) 별로 데이터 가져와 ArrayList에 넣기 (0) | 2019.05.02 |
---|---|
자바 Swing에서 ArrayList를 JcomboBox에 집어넣기 (1) | 2019.04.28 |
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기
이런 Json배열 하나에 여러개의 Json이 있다고 가정했을 때
Json 값마다 있는 idx,link,description 키값을 사용해 데이터를 저장해보았다.
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
|
String eventArray = null; //Json Array를 String으로 저장하기 위한 변수 선언
try {
eventArray = loadHtml(); //loadHtml()는 Json Array를 파싱해서 String으로 가져오는 함수라 가정
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("결과물 : " + eventArray);
try {
JSONArray array = new JSONArray(eventArray); //JSONArray형식으로 파싱하기 위해 새로 선언해주며 eventArray를 집어 넣어준다.
list_cnt = array.length(); //Json 배열 내 JSON 데이터 개수를 가져옴
//key의 value를 가져와 저장하기 위한 배열을 생성한다
getDescription = new String[list_cnt]; //decription 저장용
getLink = new String[list_cnt]; //link 저장용
getImageUrl = new String[list_cnt]; //imageUrl 저장용
for (int i = 0; i < list_cnt; i++) { //JSONArray 내 json 개수만큼 for문 동작
JSONObject jsonObject = array.getJSONObject(i); //i번째 Json데이터를 가져옴
getDescription[i] = jsonObject.getString("description"); //descripton 값을 배열에 저장
getLink[i] = jsonObject.getString("link"); //link 값을 배열에 저장
getImageUrl[i] = jsonObject.getString("imageUrl"); //imageurl 값을 배열에 저장
Log.i("JSON Object", jsonObject + "");
Log.i("JsonParsing", getDescription[i] + "," + getLink[i] + "," + getImageUrl[i]);
}
|
cs |
Log로 찍어보면
JsonObject의 로그
I/JSON Object: {"idx":15858,"imageUrl":"http:\/\/img.cgv.co.kr\/Event\/Event\/2017\/0330\/some_240x200_01.jpg","link":".\/detail-view.aspx?idx=15858&menu=2","description":"<어느날>1+1 예매 이벤트"}
파싱해낸 데이터 description, link, imageUrl 순으로 파싱이 된 걸 볼 수 있다.
I/JsonParsing: <어느날>1+1 예매 이벤트,./detail-view.aspx?idx=15858&menu=2,http://img.cgv.co.kr/Event/Event/2017/0330/some_240x200_01.jpg
배열에 잘 들어갔는지 description을 예로 확인을 해보면
for(int i=0;i<description.length;i++){
System.out.println("배열값 : "+description[i]);
}
I/System.out: 배열값 : <시간위의 집>스타★라이브톡
I/System.out: 배열값 : <보통사람>1+1 예매권 2차 이벤트
I/System.out: 배열값 : <로즈> 기대평 이벤트
I/System.out: 배열값 : <공각기동대:고스트 인 더 쉘>예매 경품 이벤트
description 값만 따로 배열에 잘 들어가있음을 확인할 수 있다.
이제 파싱해낸 값으로 다양한 곳에 쓸 수 있다.
'지식메모 > JAVA' 카테고리의 다른 글
자바 Swing에서 ArrayList를 JcomboBox에 집어넣기 (1) | 2019.04.28 |
---|---|
자바 스윙으로 파일 열기창 구현 (0) | 2017.06.14 |
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
자바 이미지 파일 포함하여 프레임바 아이콘 변경 후 실행가능한 jar 파일로 생성하기 (0) | 2015.10.15 |
자바 일정구간 문자열 추출하기
subString 함수사용
subString(시작위치,끝위치);
예를 들어 애국가에서
하느님이 ~ 우리나라만세 사이에 텍스트를 추출하고 싶다면
String song = "하느님이 보우하사 우리나라만세";
int start = song.indexOf("하느님이"); //하느님이 위치 추출
int end = song.indexOf("우리나라만세"); //우리나라만세 추출
String parseText = song.subString(start,end);
이런 방법도 있다
'지식메모 > JAVA' 카테고리의 다른 글
자바 스윙으로 파일 열기창 구현 (0) | 2017.06.14 |
---|---|
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
자바 이미지 파일 포함하여 프레임바 아이콘 변경 후 실행가능한 jar 파일로 생성하기 (0) | 2015.10.15 |
자바 스윙 프레임바 아이콘 바꾸기 (0) | 2015.10.12 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기
또 이상한 에러가 발생.. 이클립스가 이상한건가..
에러 내용은 이러하다
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:895)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:665)
at java.lang.ClassLoader.defineClass(ClassLoader.java:758)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at NaverAPITest.NAPITest.test.test(test.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
찾아보니 라이브러리 중복으로 인해 발생된다고 한다.
Junit의 라이브러리가 문제라는데..
org.hamcrest.Matchers
아무튼 JUnit4 저걸 통째로 remove하여 제거하였다.
그리고 다시 실행했더니 웬 에러???
pom.xml을 가봤더니 Junit 3.8.1 로 되어있었다.
그래서 저걸 지워버리고
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
이걸 추가해주었더니 에러가 사라졌다!
이제 실행하니 잘되었따
'지식메모 > JAVA' 카테고리의 다른 글
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
---|---|
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
자바 이미지 파일 포함하여 프레임바 아이콘 변경 후 실행가능한 jar 파일로 생성하기 (0) | 2015.10.15 |
자바 스윙 프레임바 아이콘 바꾸기 (0) | 2015.10.12 |
자바 상대경로 지정하여 어디서나 경로 참조가능하게 하기 (0) | 2015.10.04 |
자바 이미지 파일 포함하여 프레임바 아이콘 변경 후 실행가능한 jar 파일로 생성하기
자바에서 프로그램을 만든 뒤 프레임바 아이콘을 바꾸고 싶었다.
바로 요놈을 바꿔주고 싶었다.
그래서 프로젝트 내 이미지 파일을 복사한 뒤 아이콘을 변경하기로 했다.
icon 폴더 생성 후 p.png 파일을 넣었다.
그런다음
ImageIcon img = new ImageIcon("icon/p.png");
win.setIconImage(img.getImage());
이렇게 코드를 넣어주고 실행하면 변경됐으나
Runnable JAR 즉 실행가능한 JAR 파일로 생성하여 실행하면 변경되지가 않았다.
왜 jar 파일로만 생성하면 안되는 걸까해서 찾아본 결과 이미지가 있는 폴더도 같이 묶어주어야 했다.
먼저 프로젝트 우클릭 > properties 에 들어간 뒤 Java Build Path 에 들어간다.
Source 탭에서 Add Folder 를 선택한다.
그런다음 이미지가 있는 폴더를 체크해준다.
여기서는 icon 폴더
적용한 다음 저 위치의 경로를 추출하기 위해 다음 코드를 써준다.
1 2 3 4 | URL imageURL = 클래스명.class.getClassLoader().getResource("p.png"); ImageIcon img = new ImageIcon(imageURL); JFrame객체.setIconImage(img.getImage()); | cs |
이렇게 해주면 프레임바 아이콘이 교체된다.
한번 이클립스에서 실행해보고 적용됐는지 확인해본다.
적용한 다음 프로젝트 우클릭 > Export > Java > Runnable JAR file 선택
Launch configuration 에서 실행될 클래스 지정해주고
Library Handling 에서 두번째 선택한 뒤 finish 해준다.
이유는 모르겠으나 두번째로 해야 적용이 되었다.
그리고 생성된 jar 파일을 실행해보고 아이콘이 바뀌었나 확인해본다.
그럼 어느 컴퓨터를 가도 아이콘은 적용되어 있을 것이다.
'지식메모 > JAVA' 카테고리의 다른 글
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
---|---|
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
자바 스윙 프레임바 아이콘 바꾸기 (0) | 2015.10.12 |
자바 상대경로 지정하여 어디서나 경로 참조가능하게 하기 (0) | 2015.10.04 |
자바 JTextArea 스크롤바 자동으로 설정하기 (0) | 2015.10.04 |
자바 스윙 프레임바 아이콘 바꾸기
ImageIcon img = new ImageIcon("이미지경로");
해당프레임.setIconImage(img.getImage());
'지식메모 > JAVA' 카테고리의 다른 글
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |
---|---|
자바 이미지 파일 포함하여 프레임바 아이콘 변경 후 실행가능한 jar 파일로 생성하기 (0) | 2015.10.15 |
자바 상대경로 지정하여 어디서나 경로 참조가능하게 하기 (0) | 2015.10.04 |
자바 JTextArea 스크롤바 자동으로 설정하기 (0) | 2015.10.04 |
JAVA JPasswordField 암호 값 가져오기 (0) | 2015.09.20 |