2012-06-25 5 views
3

내 질문 : 입력 스트림이 시스템 표준 행 분리 기호로 처리하려면 어떻게해야합니까?시스템 개행과 다른 개행 문자

문자열로 파일을 읽고 줄 바꿈이 \n으로 변환되었지만 내 System.getProperty("line.separator");\r\n이됩니다. 이 파일을 portable으로하고 싶습니다. 따라서 파일 판독기에서 줄 바꿈 문자를 시스템 표준 줄 바꿈 문자로 읽을 수 있습니다. 강제로 어떻게 할 수 있습니까? 여기에 파일을 문자열로 읽는 Java Helper 라이브러리의 내 메소드가 있습니다.

/** 
* Takes the file and returns it in a string. Uses UTF-8 encoding 
* 
* @param fileLocation 
* @return the file in String form 
* @throws IOException when trying to read from the file 
*/ 
public static String fileToString(String fileLocation) throws IOException { 
    InputStreamReader streamReader = new InputStreamReader(new FileInputStream(fileLocation), "UTF-8"); 
    return readerToString(streamReader); 
} 

/** 
* Returns all the lines in the Reader's stream as a String 
* 
* @param reader 
* @return 
* @throws IOException when trying to read from the file 
*/ 
public static String readerToString(Reader reader) throws IOException { 
    StringWriter stringWriter = new StringWriter(); 
    char[] buffer = new char[1024]; 
    int length; 
    while ((length = reader.read(buffer)) > 0) { 
    stringWriter.write(buffer, 0, length); 
    } 
    reader.close(); 
    stringWriter.close(); 
    return stringWriter.toString(); 
} 

답변

2

귀하의 readerToString 방법은 행의 말단에을 쓰지 않습니다. 단순히 문자 데이터를 복사하기 만하면됩니다. 문제를 어떻게 진단하고 있는지 완전히 명확하지 않지만 코드 이 아니며 \n에서 \r\n으로 변경되었습니다. 파일에서 \r\n이어야합니다.이 파일은 16 진수 편집기에서 확인해야합니다. 무엇이 처음부터 파일을 만들었습니까? 줄 바꿈이 어떻게 나타나는지 살펴야합니다.

당신이 라인을 읽고 싶다면

\r, \n 또는 \r\n에 대처 할 BufferedReader.readLine() 사용합니다.

Guava 것을 당신은 라인으로 파일 라인을 읽을의 BufferedReader를 사용하여 변환 할 수 있습니다

+0

나는이 대답/설명을 좋아한다. 감사. 빠른 질문. 이것을 구현하려고하는데 UTF-8 인코딩을 사용하고 싶습니다. 나는 단지 내가 가지고있는 것을'BufferedReader'에서 랩핑해야할까요, 아니면 더 좋은 방법이 있을까요? 내 구현은 다음과 같을 것이다 :'BufferedReader reader = new BufferedReader (new InputStreamReader (new FileInputStream (fileLocation), "UTF-8"));' – kentcdodds

+1

@kentcdodds : 그것을 더 간단하게 만드십시오. (특히, Charsets.UTF_8을 지정하여 코드에서 문자열 리터럴을 제거 할 수 있습니다 ...) –

+0

Jon에게 도움을 주셔서 감사합니다. ** 미래 독자를위한 참고 사항 ** 이것이 자체 개발 프로젝트가 아니라면 구아바 도서관의 제안과 함께 갈 것입니다. – kentcdodds

2

이 휴대용 방법으로 파일을 줄 단위를 읽는 BufferedReader을 사용하는 것이 좋습니다, 그리고 당신은 당신의 선택

의 행 분리를 사용하여 필요한 출력에 기록 라인의 각 읽기를 사용할 수 있습니다
1

Scanner#useDelimiter 메서드를 사용하면 File 또는 InputStream 등에서 읽을 때 사용할 구분 기호를 지정할 수 있습니다.

1

등 라인으로 독자를 독자로부터 모든 데이터를 읽는뿐만 아니라 분할하는 유용한 방법을 많이 가지고 예 :

public static String readerToString(Reader reader) throws IOException { 
    BufferedReader bufReader = new BufferedReader(reader); 
    StringBuffer stringBuf = new StringBuffer(); 
    String separator = System.getProperty("line.separator"); 
    String line = null; 

    while ((line = bufReader.readLine()) != null) { 
     stringBuf.append(line).append(separator); 
    } 
    bufReader.close(); 
    return stringBuf.toString(); 
} 
+0

+1 좋은 예를 들어. – kentcdodds