2010-07-14 9 views
3

Java 코드를 사용하여 유닉스 환경에서 작성된 텍스트 파일을 가지고 있습니다.캐리지 리턴 (" r n") in java

텍스트 파일을 쓰려면 필자는 java.io.FileWriter 및 BufferedWriter를 사용하고 있습니다. 그리고 각 줄 뒤에 줄 바꿈에 대해 bw.write ("\ r \ n") 메서드를 사용하고 있습니다. (여기서 bw는 BufferedWriter의 객체 임). 유닉스 환경에서 메일 (메인 프레임, 윈도우)과 같은 다른 환경으로 첨부하여 해당 텍스트 파일을 보내십시오.

내 클라이언트가 메인 프레임 시스템에서 텍스트 파일을 다운로드하면, 그들은 텍스트 파일에서 "특수 문자"(작은 직사각형 상자처럼) 과 데이터가 올바르게 정렬되지 않았 음을 알았습니다.

bw.write ("\ r \ n")이 작동하지 않습니다. 그렇게 생각합니다. (그러나 창문에서는 잘 작동합니다.) 너무 특별한
문자 기호 유닉스 환경에서와 않고 그대로들이 메인 프레임의 텍스트 파일을 열 경우

내가, 같은 텍스트 파일 정렬을 원하는, 윈도우 환경 또는 다른 enviroments에.

문제를 해결하는 방법. 사전에 도움을 주셔서 감사합니다.

.. 참고로 여기 자바 코드 내 조각을 붙여 넣기 (유닉스에서 실행되는 자바 코드
환경) 청구에

File f = new File(strFileGenLoc); 
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false)); 
rs = stmt.executeQuery("select * from jpdata"); 
while (rs.next()) { 
    bw.write(rs.getString(1)==null? "":rs.getString(1)); 
    bw.newLine(); 
} 
+0

메인 프레임 시스템은 무엇이며, 어떤 프로그램으로 열 수 있습니까? –

+0

@ 모든 메인 프레임 버전. – Manu

+1

그래서 메인 프레임의 운영 체제에서 열 수있는 파일을 원한다면, 사용하는 줄 종결 자뿐만 아니라 기본 문자 인코딩이 무엇이든 관계없이? 그걸로 행운을 ... –

답변

6

는 달리, 코드를 명확하게 쓰기 아니다 "\ 연구 \ n "을 입력하십시오. BufferedWriter.newLine()은 현재 플랫폼의 기본 행 구분 기호를 사용합니다 (명시 적으로 line.separator 시스템 속성을 설정하지 않은 경우). 유닉스 시스템에서 이것은 "\ n"이 될 것입니다.

이제는 읽을 수 있도록 대상 시스템에서 결과를 원하는 것으로 생각해야합니다. Windows의 경우, 이 명시 적으로 "\ r \ n"으로 작성되어야 함을 의미합니다 ... 내가 언급 한 메인 프레임에 대해서는 알지 못합니다 - 자세한 내용을 제공해야합니다.

다른 줄 구분 기호를 사용할 수 있다는 사실은 아무 텍스트 파일도 보편적으로 적합하지 않다는 것을 의미합니다. 다른 플랫폼에 많은 텍스트 편집기는 어떤 행 분리에 대처 ...하지만 항상 환경 올바른 행 끝으로 파일을 작성하려면

1

을 :(하지 않는 몇 가지가있을 것입니다, 권장 클래스는 PrintWriter입니다. println(String) 방법 출력됩니다 주어진 문자열과 출력 파일에 끝 적절한 줄


존 소총는하지만, 바로이다. 당신의 문제는 당신이 어떤 시스템에서 필요로하는 파일 형식을 파악 기술적 너무 많이는하지 않습니다. 파일이 Windows 시스템에서 처리되는 경우 줄의 끝은 \r\n이고 Unix 시스템에서는 단지 \n.

FTP를 사용하여 다른 시스템간에 파일을 전송할 때이 모든 작업이 훨씬 복잡합니다. ASCII 모드는 자동으로 줄 끝 문자를 변환합니다. 이진 파일은 자동으로 변환되지 않습니다.

전자 메일은 텍스트 형식에도 적합하지 않습니다. Outlook은 시스템 경계를 넘어 전송 된 텍스트 파일을 자주 끊습니다.

여기 사람들은 이런 종류의 물건에 대해 알고 있습니다. 함께 일할 수있는 세부 정보를 주시고 해결책을 제안 할 수 있습니다. 그러나 어느 시스템에서나 정확하게 읽을 파일을 작성할 수는 없습니다.

+0

PrintWriter는 불쾌합니다 - 그것은 아주 나쁜 생각 인 예외를 삼켜 버립니다. 개인적으로 나는 당신이 원하는 플랫폼이 실행중인 플랫폼의 기본값이 아니라면 * 명시 적으로 * 줄 구분 기호를 쓰도록 제안 할 것입니다. (나는 이것을 위해 시스템 속성을 설정하는 것에 열중하지 않습니다. –

관련 문제