2011-11-13 4 views
1

일반 ftp 라이브러리와 함께 ftp에서 텍스트 파일을 다운로드 중입니다.txt 파일의 특수 문자

문제는 내가 한 줄씩 배열로 파일을 읽을 때, 그것은 나 같은 문자를 가져 가지 않습니다. 대신 "?" 캐릭터.

여기 내 inputstreamreader에서 UTF-8을 넣어 시도하고, 나는 UnicodeReader 클래스를 시도했지만 성공하지 내 코드

FileInputStream fstream = openFileInput("name of text file"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8")); 
    String strLine; 

    ArrayList<String> lines = new ArrayList<String>(); 

    while ((strLine = br.readLine()) != null) { 
     lines.add(strLine); 
    } 

    String[] linjer = lines.toArray(new String[0]); 

    ArrayList<String> imei = new ArrayList<String>(); 

    for(int o=0;o<linjer.length;o++) 
    { 
     String[] holder = linjer[o].split(" - "); 
     imei.add(holder[0] + " - " + holder[2]); 
    } 

    String[] imeinr = imei.toArray(new String[0]); 

입니다.

저는 Java에 상당히 익숙합니다. 그래서 어리석은 질문 일지 모르지만 당신이 도울 수 있기를 바랍니다. :)

+0

코드가 올바르게 표시됩니다. 문자가 올바르게 읽히지 않았다는 것을 어떻게 알 수 있습니까? 아마도 문제는 문자열을 처리하거나 보여주는 코드에 있습니까? – AlexR

답변

4

DataInputStream을 사용할 이유가 없습니다. DataInputStreamDataOutputStream 클래스는 원시 Java 데이터 유형을 직렬화하는 데 사용됩니다 ("직렬화"는 파일에 데이터 읽기/쓰기를 의미 함). 줄 단위로 텍스트 파일의 내용을 읽는 중일 뿐이므로 DataInputStream을 사용하면 불필요하며 잘못된 결과가 발생할 수 있습니다.

FileInputStream fstream = openFileInput("name of text file"); 
//DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8")); 

전문 자바 프로그래머 팁 다음 foreach는 루프는 최근 자바 프로그래밍 언어에 추가되었습니다. 프로그래머는 루프 카운터를 정의 할 필요없이 배열 내용을 반복 할 수 있습니다. 이렇게하면 코드가 단순 해 지므로 시간이 지남에 따라 읽고 유지하기가 더 쉽습니다.

for(String line : linjer){ 
    String[] holder = line.split(" - "); 
    imei.add(holder[0] + " - " + holder[2]); 
} 

참고 :의 Foreach도 List 개체를 사용할 수 있습니다 루프.

+0

텍스트에 대해 DataInputStream을 사용하는 개발자의 예가 너무도 많았습니다. –

2

파일이 UTF-8이 아닐 수도 있습니다. 특히 Windows를 사용하는 경우에는 CP1252 또는 뭔가있을 수 있습니다.

로컬 복사본에 파일을 다운로드하고 코드를 실행하여 해당 파일이 작동하는지 확인하십시오.

+0

나는 그것을 다운로드하고, Notepad ++에서 열려고 시도했다. ANSI이고, æøå을 보여준다. 그래서 ansi로 파일을 여는 방법. – NikolajSvendsen

+0

"UTF-8"인수를 새로운 InputStreamReader()에서 떼어 놓으면 Java가 올바른 일을 할 것이라고 확신합니다. – SystemParadox