2012-11-01 6 views
2

파일에서 정수를 읽고, 일부 연산을 적용하여 그 결과 정수를 다른 파일에 쓰려고합니다.Java File I/O의 우수 사례

// Input 
FileReader fr = new FileReader("test.txt"); 
BufferedReader br = new BufferedReader(fr); 
Scanner s = new Scanner(br); 

// Output 
FileWriter fw = new FileWriter("out.txt"); 
BufferedWriter bw = new BufferedWriter(fw); 
PrintWriter pw = new PrintWriter(bw); 

int i; 

while(s.hasNextInt()) 
{ 
    i = s.nextInt(); 
    pw.println(i+5); 
} 

이런 입력 및 출력 스트림을 래핑하는 것이 좋습니다.
저는 자바를 처음 접하고 인터넷에서, 파일에서 I/O의 다른 많은 방법을 보았습니다. 하나의 접근법을 고수하고 싶습니다. 그래서 가장 좋은 접근법 위에 있습니까? 당신이 printwriterargumentfilewriter를 취하는 생성자가 문자 데이터를 작성하는 PrintWriter을 사용하는 경우는 그나마

+1

파일이 얼마나 큰을 ??

Reader r = null; Scanner s = null; try { r = new FileReader("test.txt"); s = new Scanner(r); // Do your stuff here. } finally { if (r != null) r.close(); if (s != null) s.close(); } 

또는, 당신은 자바 7 이상을 사용하는 경우 –

답변

1

정말 BuffredWriter이 필요합니다. 그리고 scanner부터 read까지는 file에서 bufferedreader을 사용하여 확인할 수 있습니다.

FileReader fr = new FileReader("test.txt"); 
BufferedReader br = new BufferedReader(fr); 
while((line=br.readLine())!=null){ 
//do read operations here 
} 

FileWriter fw = new FileWriter("out.txt"); 
PrintWriter pw = new PrintWriter(fw); 
pw.println("write some data to the file") 
+0

효율성을 높이기 위해 BufferedWriter를 사용했습니다. 나는 정수를 읽을 수 있도록 스캐너를 포함 시켰습니다. BufferedReader는 read() 또는 readLine() 메소드 만 있기 때문에 Scanner 없이는 어떻게해야할지 모르겠습니다. –

+0

스캐너에서 단순히 파일을 읽을 필요는 없습니다. 그러나 스캐너를 사용하면 최소한 토큰을 파싱 할 수 있습니다. 대부분의 응용 프로그램에서 필요합니다. – smaccoun

1

스캐너에는 BufferedReader가 필요하지 않습니다. 그것을 FileReader로 감쌀 수 있습니다.

스캐너를 사용하는 동안 원본에 다양한 콘텐츠가 있다고 가정하는 것이 좋습니다. 사용 후 스캐너를 닫을 때 좋습니다.

while(s.hasNext()){ 

    if(s.hasNextInt()) 
     int i = s.nextInt(); 

    s.next(); 
    } 
    s.close(); 
+0

그러나 효율성을 높이기 위해 BufferedReader를 사용해야하는 곳을 읽었습니다. 그렇지 않니? –

+0

그들은 다른 기능을 가지고 있습니다. 스캐너는 프리미티브 값 또는 구분 기호 문자열을 기반으로 입력을 토큰 화하는 데 사용할 수 있습니다. BufferedReader는 한 번에 텍스트 행을 읽을 수있는 FileReader보다 이점이 있습니다. – clinton

1

- 음, 지금 당신은 일반적으로 무엇의 자아의 각 항목을-데리러 다음 다시 다시 청구 카운터로 이동 자아로 이동하여 식품 쇼핑몰에 쇼핑을 갔다 것을 고려 과금 카운터에 .... ?? 또는 모든 품목을 장바구니에 담은 다음 계산대로 가십시오.

- 자바 여기에 그것의 유사 바이트 Files 거래 및 문자 Buffer 거래, 그래서이 문자 바이트의 전환이며, 눈에 띄는 오버 헤드가되지 않습니다, 그것은 잘 작동 날 믿어.

File f = new File("Path"); 
FileReader fr = new FileReader(f); 
BufferedReader br = new BufferedReader(fr); 

그래서 파일 작성하기 :

그래서 파일을 읽을 수

File f = new File("Path"); 
FileWriter fw = new FileWriter(f); 
BufferedWriter bw = new BufferedWriter(fw); 

을 그리고 당신은 Scanner를 사용할 때 BufferedReader

3

를 사용할 필요가 없습니다 이러한 클래스의 디자인은 0을 기준으로합니다.. 좋은 예는 finally 블록에있는 java.io.Closeable의 모든 인스턴스를 닫는 것입니다. 예를 들어 :

try (
      Reader r = new FileReader("test.txt"); 
      Scanner s = new Scanner(r) 
      ) { 
     // Do your stuff here. 
    } 
0

나는 보통이 수행 :

String inputFileLocation = "Write it here"; 

BufferedReader br = new BufferedReader(new FileReader(new File(fileLocation))); 

while((line=br.readLine())!=null){ 
//Scanner operations here 
} 

String outputFileLocation = "Here"; 
PrintWriter pr = new PrintWriter(new FileWriter(new File(outputFileLocation)));