아마 대부분의 공개 api는 json이나 xml 형태를 지원할 것입니다.


Open api를 이용하여 재밌는 것 좀 해볼까해서 XML 파서를 이용하기로 했습니다.


먼저 DocumentBuilder를 사용하여 XML을 Document 형태로 가져왔습니다.

잘 가져왔나 내용을 확인하기 위해서 그냥 Document Object를 출력해봤습니다.


Document doc = xxxxxxxxx;


System.out.println(doc);


그랬더니 원했던 결과가 나오지 않습니다.


구글링을 한 결과 아래와 같은 방법으로 XML 형태의 Document를 String으로 변환 할 수 있었습니다.


TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTransformer();

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

StringWriter writer = new StringWriter();

transformer.transform(new DOMSource(doc), new StreamResult(writer));

String output = writer.getBuffer().toString();

System.out.println(output);

요즘은 대부분 이클립스나 STS를 사용하여 자바를 개발하는 일이 잦습니다. (거의 필수 요소?)


개발을 하다보면 현재 개발환경과 인코딩이 다른 파일을 읽고 써야하는 경우가 매우 빈번하게 발생하는데


자바에서 인코딩이 다른 파일의 내용을 읽는 방법에 대해서 포스팅하겠습니다.


저는 이클립스 개발 환경에서 인코딩을 UTF-8로 세팅하였습니다.


이클립스에서 EUC-KR로 된 파일을 읽고자 합니다.


아래 소스를 붙여넣으면 됩니다.


import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStreamReader;

 

 

public class ConvertTester {

 

       /**

        * @param args

        * @throws FileNotFoundException

        * @throws Exception

        */

       public static void main(String[] args) throws FileNotFoundException, Exception {

             String src = "www.com.001";

             File file = new File(src); 

             BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "EUC-KR")); 

             String line;         

             while ((line = br.readLine()) != null) { 

                 System.out.println(line);                

             }

             br.close();

            

       }

 

}

 


하나 만들어놨으니 라이브러리로 만들어봅시다.


사실 개인적인 라이브러리가 많이 있지만..공개용 라이브러리를 위해서 하나하나 정리하면서 라이브러리를 만들 생각입니다. (사실 매번 할 때마다 다시 찾아서 만들기 귀찮잖아요? ㅋㅋ )


이와 관련된 라이브러리는 내용을 참조하면 될 것 같습니다.


자바 파일 읽기

일반 C(gcc)를 사용하여 Token을 하는 경우에는 보통 strtok를 사용합니다.


그러나 C++(g++)을 사용하게 될 때 구현하기 귀찮아서 기존의 C라이브러리 함수를 이용하게 되는데,


개인적으로 가장 자주 사용하는 것이 strtok와 atoi입니다.


그러나 비주얼 스튜디오 2005 이후에서는 strtok를 이용하면 경고를 출력합니다.


이를 무시하고 코딩을 하는 경우가 많았는데, 이를 무시하면 찾을 수도 없는 까마득한 디버깅의 세계로 빠져들 수 있으니 조심해야합니다.


strtok는 비주얼 스튜디오 6.0에서는 정상 작동하나, 그 이후 버전에서는


실행은 되지만 뒤에 쓰레기 값이 박히는 경우가 종종 발생합니다.


이를 대체하기 위해서 strtok_s를 이용하게 됩니다.


사용법은 아래 링크를 타고 가시면 됩니다.


http://harmonize84.tistory.com/112


그런데 strtok_s는 윈도우에서만 존재하는 함수입니다.


즉, 리눅스에서 같은 소스를 컴파일(g++)하면 에러가 출력됩니다. 


리눅스에서는 strtok_r을 이용하면 됩니다.


사용법은 man 페이지를 참고하시면 됩니다.

'Programming > C' 카테고리의 다른 글

strtok, strtok_s, strtok_r 함수 사용하기  (0) 2012.11.05

보통 자바는 이클립스 기반에서 개발을 많이 하게 된다.


필자도 윈도우나 맥 위에서 이클립스를 사용한다.


유연한 프로그램을 만들기 위해서는 프로퍼티 파일을 사용하는 것이 필요한데, 


필자의 경우에는 프로퍼티 파일에 특정 파일 경로는 거의 필수적으로 포함되어 있는 듯 하다.


이 때 윈도우에서 개발하고 리눅스에서 올리면 제대로 파일을 읽지 못하는 불상사가 발생한다.


물론 초보적인 실수겠지만,


태어나자마자 고수인 사람은 세상 어디에도 없을 것이다.


하나하나 찾아가고 정리해가면서 한단계 한단계 실력을 키우면 되는 것.


각설하고, 


File.separator를 사용하면 깔끔하게 해결된다.


사용방법은 아래와 같다.


만약 Data 밑에 Tweet.txt라는 파일을 원한다고 할 때, 


윈도우는 "Data\\"Tweet.txt"


리눅스는 "Data/Tweet.txt"


라고 썼었다.


그러나 자바에서는 이런 근심걱정 접어두고


"Data" + File.separator + "Tweet.txt"


라고 쓰면 된다.

안드로이드 프로젝트가 들어있는 STS(이클립스)를 열면 가끔씩


이클립스 하단에 "loading data for android"라면서 무한 작업중일 때가 있다.


대부분 이클립스에서 프로젝트 정보가 꼬여서 잘못된 경우인데 이 때는 아래와 같이 해결하면 된다.


1. 워크스페이스 안에 있는 ".metadata"를 백업해둔다. (혹시 모르니까..)

2. ".metadata/.plugins/org.eclipse.core.resources/.project"를 과감하게 지운다.

3. 이클립스를 재시작한다.


  • Backup .metadata
  • delete only .metadata/.plugins/org.eclipse.core.resources/.project
  • restart eclipse

출처 : http://stackoverflow.com/questions/10140732/error-with-parsing-android-sdk-content-and-initializing-java-tooling-in-eclipse

  1. 으흠 2014.09.11 09:45 신고

    저번엔 이거 따라해서 고쳤는데 이번에도 로딩 떠서 이대로 하니까 안되네요 여전히 로딩 ㅠㅠ

    • shine_ing 2014.09.11 11:51 신고

      음..아무래도 이전 버전의 이클립스에서는 위와 같은 방식으로 해결이 되었을지 몰라도 새로운 버전의 이클립스에서는 아마 동작하지 않을 수도 있겠네요..-_-;; 개인적으로 최신버전에서 이런 현상이 다시 발생한다면 그때 포스트를 수정하겠습니다! 도움 드리지 못하여 죄송합니다 ㅠ

  2. 으흠 2015.05.08 14:31 신고

    또 방문했네요.. ㅎㅎㅎ 이 페이지 방문한지 벌써 5~6번은 된듯... ㅎㅎㅎㅎ이클립스 문제가 많은거같아요 ㅋㅋㅋ 안드로이드 스튜디오로 갈아탈 때인가..

안드로이드 프로젝트를 import 하다 보면 종종 아래와 같은 메시지를 콘솔에서 확인할 수 있다.


"Android requires compiler compliance level 5.0 or 6.0. Found 1.7 instead. Please use Android Tools > Fix Project Properties."


말 그대로 안드로이드 프로젝트 최상단에서 오른쪽 마우스 버튼을 누른후 메뉴 아래쪽에 있는 "Android Tools"를 클릭한다.


그 후 Fix Project Properties를 클릭한다.


그래도 변화가 없다면 프로젝트를 갱신 하거나 STS(또는 이클립스)를 재시작하면 된다.

+ Recent posts