2016-04-15 3 views
1

Я работаю над упражнением, где должен скопировать символ файла по символу в Java. Я работаю со следующим файлом:Копирование символа файла по символу в Java

Hamlet.txt 
To be, or not to be: that is the question. 
Whether 'tis nobler in the mind to suffer 
The slings and arrows of outrageous fortune, 
Or to take arms against a sea of troubles, 
And by opposing end them ? 

создать второй файл, называемый copy.txt, который будет содержать символ за символом копии Hamlet.txt Проблема заключается в том, что после того, как я запускаю мой код, copy.txt остается пустым.

import java.io.FileWriter; 
import java.io.BufferedWriter; 
import java.io.PrintWriter; 
import java.io.FileReader; 
import java.io.BufferedReader; 
import java.io.IOException; 

public class Combinations { 
    public void run() { 
     try { 
      BufferedReader rd = new BufferedReader(new FileReader("Hamlet.txt")); 
     PrintWriter wr = new PrintWriter(new BufferedWriter(new FileWriter("copy.txt"))); 
     copyFileCharByChar(rd, wr); 
    }catch(IOException ex) { 
     throw new RuntimeException(ex.toString()); 
    } 
} 

private void copyFileCharByChar(BufferedReader rd, PrintWriter wr) { 
    try { 
     while(true) { 
      int ch = rd.read(); 
      if(ch == - 1) break; 
      wr.print(ch); 
     } 
     } catch(IOException ex) { 
     throw new RuntimeException(ex.toString()); 
    } 
    } 

public static void main(String[] args) { 
    new Combinations().run(); 
} 
} 

Итак, я пишу метод copyFileCharByChar, который принимает в BufferedReader объекта rd и FileWriter объекта wr. rd читает каждый отдельный символ, а wr записывает соответствующий символ. Что я здесь делаю неправильно?

+1

Кстати, почему 'new PrintWriter (новый BufferedWriter (новый FileWriter'?' новый BufferedWriter (новый FileWriter' или 'новый FileWriter'). –

+0

@ArnaudDenoyelle Каждый уровень повышает эффективность объекта записи. –

ответ

3

Вы должны бросить печать в этом случае:

wr.print((char)ch); 

или использовать метод записи:

wr.write(ch); 

Вы также должны закрыть PrintWriter:

wr.close(); 
+0

Получил ли он работу, будет ли wr.write (ch) требоваться литье? –

+0

Я не согласен с первым утверждением. Он работает без кавычки в 'char' (потому что OP пишет результат' rd.read() ', который уже является ascii-кодом). –

+0

@ArnaudDenoyelle На самом деле, без случая, он просто печатает числа, так как ch является int. Но метод write не требует никакого трансляции, только если я вызываю print. –

Смежные вопросы