2012-12-19 3 views
2

저는 Java에서 새로 왔으며 이제 File io를 배우고 있습니다. 하지만 난 그것에 대해 (FileReader, FileWriter, BufferedReader, BufferedWriter, FileInputStream, FileOutputStream ... 그리고 더있을 수 있습니다) 그것을 다루는 많은 개체로 io에 대해 매우 혼란 스러워요.Java에서 가장 좋은 파일 입출력 옵션은 무엇입니까?

File io에서 가장 효율적인 프로세스는 무엇입니까? (필자는 무엇을 사용해야합니까?) 어떤 인코딩도 원하지 않습니다. 텍스트 파일 만 처리하고 싶습니다. 간단한 예제 코드가 큰 도움이 될 것입니다.

감사합니다.

+1

다른 옵션을 시도해 볼 수 있습니다 ... 일반적으로 FileReader를 래핑하는 BufferedReader가 가장 좋습니다 – RNJ

+0

java. ['NIO'] (http://docs.oracle.com/javase/6/docs/api)에서 새 IO API를 사용해보십시오. /java/nio/package-summary.html) –

+0

NIO를 보았고 조금 들었다 (내 코드!) (코드를 이해할 수 없었다) – palatok

답변

5

첫 번째 중요한 점을 읽을 수 있습니다

  • 스트림을 : 순서 바이트입니다.

  • 리더/라이터 : 문자 (문자열)

항상 필요하지 않을 경우 다른 하나 번역하지 않는, 그들을 혼합하지 마십시오 가를 지정의 순서 부호화.

빠른 조리법 : 으로

바이트 (바이너리 읽기)의 순서로 파일을 읽습니다.

new FileInputStream(File f); 

같은 추가 버퍼링 : 으로

new BufferedInputStream(new FileInputStream(File f)); 

에게 일련의 문자 (텍스트 읽기)와 같은 파일을 읽습니다.

new FileReader(File f); // ugly, dangerous, does not let us specify the encoding 

new InputStreamReader(new FileInputStream(File f),Charset charset); // good, though verbose 

라인 중심의 버퍼링을 추가하려면 출력하려면

new BufferedReader( ... someReader ...); 

(텍스트 행을 읽을 수)/쓰기 (출력/작가)

+0

정말 도움이되는 대답입니다. 한 가지 더, Charset은 무엇입니까? charset의 가치가 될 것인가? – palatok

+0

파일이 사용하는 문자 인코딩과 일치합니다. 의심스러운 경우 'UTF-8'이 인기있는 선택입니다. –

+0

@palatok : 파일 자체가 바이트 순서입니다. 이것을 텍스트로 변환하려면 charset 인코딩을 지정해야합니다. 가장 많이 사용되는 인코딩은 UTF-8과 ISO-8859-1입니다. 또한이 필수 링크를 읽으십시오. http://www.joelonsoftware.com/articles/Unicode.html – leonbloy

3

간단한 엄지 손가락.

텍스트 - 독자/작가
진 -의 InputStream/OutputStream에

당신은 이해하고 기억하는 것이 더에서 Files

+2

'FileWriter/FileReader'는 쓸모가 없다. 그들은 당신이 인코딩을 지정하도록 허용하지 않기 때문에. – Esailija

+0

하지만 FileReader, FileWriter는 기본 인코딩을 사용한다고 들었습니다. 그런식이 요법은 약간 까다 롭습니다. 내가 틀렸다면 나를 바로 잡으십시오. – palatok

0

읽기 실질적으로 동일

다음은 라인별로 읽을 수 있습니다.

당신은 일부 질문에 대해서는

DataOutputStream ds = new DataOutputStream(new FileOutputStream(newLocation)); 

에 의해 라인/부분으로 라인을 작성할 수 있습니다 다음

작성

, 아니 BEST 옵션이 없습니다. 심지어 여기에, 당신은 우리가 생성자를 보면 한 번 (에 2 개 이상을 사용해야 볼 수 있습니다. 그들은 다른 리더/라이터를 사용하거나 inputStream을 /의 OutputStream.

가장 좋은 방법은 당신이 정말로

을 수행하려는 작업에 따라 달라집니다
+0

사실은 처음에는 이진 파일을 두 번째로 넣는 동안 텍스트 파일을위한 것입니다. – Cratylus

+0

은 어떤 방법으로도 존재합니다 FileReader()를 사용하지 않고? 어떤 사람들은 낙심하는 것을 보았습니다. (이유를 모르겠습니까?) – palatok

+0

@palatok : FileReader는 문자를 읽는 데 사용됩니다. 함께 사용하면 나쁠 수 있습니다. 하지만 항상 그런 것은 아닙니다. 충분한 이유가있을 수 있습니다. BufferedReader는 한 번에 두 개 이상의 문자를 읽는 데 사용됩니다. 그것은 한 라인 씩 읽을 수있는 방법을 가지고 있는데, 정말 도움이됩니다. 또한 성능을 향상시킵니다. 그것은 간단한 설명입니다. –

관련 문제