2016-08-04 2 views
3

저는 애플리케이션의 구성 설정을 저장하고로드하는 여러 가지 방법을 연구했습니다. Preferences, JSON, Properties 및 XML을 살펴 봤지만 대부분의 응용 프로그램 설정에 Properties 메서드를 사용하여 해결했다고 생각합니다.(자바) 속성을 사용하여 ArrayList 저장 /로드

그러나 ArrayList를 저장하고로드하는 방법에 대한 정보를 찾을 수 없습니다. 개별 키/쌍 문자열 조합 만 가능합니다.

제 질문은 기본적으로 더 좋은 방법이 있습니까? 내 응용 프로그램에서 저장 및로드 할 수 있어야합니다 문자열 ArrayList 있습니다. 이 작업을 Properties으로 할 수 있습니까? 아니면이 목록을 보유하기 위해 별도의 파일을 사용하고 ArrayList (아마도 한 줄당)으로 읽어야합니까?

수정 : 언급해야 할 것은 모든 설정 파일을 읽을 수있는 텍스트로 유지하여 Serialization을 사용하지 않는 것입니다.

답변

0

다음 조합을 사용하면 완벽하게 작동하는 것으로 나타났습니다.

을 저장 :

String csv = String.join(",", arrayList()); 
props.setProperty("list", csv); 

이것은 String 쉼표로 구분 ArrayList의 각 원소를 함유하는 생성한다.

로드 :

arrayList = Arrays.asList(csv.split(",")); 

arrayList 참조하는 요소를 추가하는 csv 문자열을 받아 각 콤마로 분할한다.

+0

는, 컴파일러는 말한다 : "호환되지 않는 유형의 필수 ArrayList를 하지만 'asList은'을 목록에 추정되었다. 형 변수 (들)의 더 예 (들) T 그래서 그 목록 이 준수 존재하지 ArrayList Gewure

+0

'ArrayList'에 보관할 데이터 유형을 지정해야합니다. 수신 한 오류 메시지가 명확해야합니다.이 메소드는 문자열에서만 작동하므로 'ArrayList'를 이와 같이 정의해야합니다 : 'ArrayList arrayList; – Zephyr

2

쉼표를 사용하여 동일한 키에 여러 값을 배치 할 수 있습니다.

key:value1,value2,value3 

는 그런하는 당신에게 Arrays.asList() 통해 ArrayList으로 전환 할 수있는 String[] 배열을 줄 것을 읽은 후 문자열의 분할 기능을 사용하여 분할합니다. 나는 Properties 파일에 목록을 작성하기위한 두 가지 방법을 본 적이

ArrayList<String> al = new ArrayList<>(); 
al.add("value1"); 
al.add("value2"); 
al.add("value3"); 

String values = al.toString(); 
//Substring used to get rid of "[" and "]" 
prop.setProperty("name",values.substring(1,values.length() - 1); 
+0

나에게 훌륭한 해결책이 들립니다. 고맙습니다. 구분 기호를 사용하여 배열을'Properties' 파일에 쓰는 방법에 대한 샘플 코드를 게시 할 수 있다고 생각하십니까? 나는'setProperty()'메쏘드에서 배열을 통해 iteration을 반복 할 것이라고 가정한다. – Zephyr

+0

나는 실제로 전달할 대표적인 String을 만들 것이다. 나는 잠시 후에 검증 된 코드를 게시 할 것이다. –

+0

그동안이'String'을 값으로 전달하려고합니다 :'String csv = String.join (",", arrayList)'. – Zephyr

0

:

여기 부분 MCVE입니다. 하나는 속성의 이름에 색인을 추가하여 목록의 각 요소를 별도의 항목으로 저장하는 것입니다. — "mylist.1", "mylist.2"과 같은 것입니다. 다른 하나는 요소의 단일 값을 구분 기호로 구분하여 만드는 것입니다.

첫 번째 방법의 장점은 값에 구분 기호가 포함 된 경우 수행 할 작업을 염려하지 않고도 모든 값을 처리 할 수 ​​있다는 것입니다. 두 번째 이점은 Properties의 모든 항목을 반복하지 않고 전체 목록을 검색 할 수 있다는 것입니다.

어느 경우 든 사용자가 선택한 구성표를 사용하여 목록을 저장하고 검색하는 메서드를 추가하는 Properties 개체 주위에 래퍼 (또는 라이브러리 찾기)를 작성하려고합니다. 종종 이러한 랩퍼에는 숫자 및 URL과 같은 다른 공통 데이터 유형의 유효성을 검사하고 변환하는 메소드가 있습니다.