Поиск и замена содержимого в файле в JAVA - PullRequest
2 голосов
/ 12 декабря 2011

Мне нужно отредактировать содержимое файла и записать отредактированный файл в другой файл. Вот код, который я использую.

  import java.io.*;     
import java.util.*;     

public class TestRef {     
    ArrayList<String> lines = new ArrayList<String>();     
    String line= null;     
    public void printThis(){     
        try{     
    FileReader fr = new FileReader("C:\\Users\\questions.txt");     
    BufferedReader br = new BufferedReader(fr);     
    FileWriter fw = new FileWriter("C:\\Users\\questions_out.txt");     
    BufferedWriter out = new BufferedWriter(fw);     
    while((line=br.readLine()) != null) {  
     if(line.contains("Javascript"))
      line.replace("Javascript"," JAVA");          
        lines.add(line);     
        out.write(line);  
        }                    

        }     
    catch(Exception e){}     
    }     

    public static void main(String [] args){     
            TestRef tr = new TestRef();     
            tr.printThis();     
        }     
} 

Так что это похоже на чтение одной строки за раз и печать ее обратно в файл. Но когда я выполняю этот код, выходной файл остается пустым. Можете ли вы предоставить мне пример кода, как читать из файла, вносить изменения в содержимое и записывать весь файл в новый файл?

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Ну, несколько проблем:

  • Вы никогда не закрываете ни свой ввод, ни вывод. Закрытие также будет сбрасываться - возможно, что-то просто не сбрасывается. Вы должны закрыть потоковые ресурсы в блоке finally, чтобы они в конечном итоге закрылись даже перед лицом исключения. (Учитывая, что вы должны закрываться, я бы тоже не стал беспокоиться о явной очистке. Просто убедитесь, что вы закрыли абстракцию верхнего уровня - т.е. outbr).
  • Вы ловите Exception и затем глотаете это. Вполне возможно, что выдается исключение, но вы не можете сказать, потому что вы его проглотили. Вы должны по крайней мере регистрировать его и, вероятно, остановиться на этом этапе. (Я бы также предложил поймать IOException вместо Exception.)
  • Вы используете FileWriter и FileReader, которые не позволяют указывать кодировку ввода / вывода - здесь не проблема, но лично мне нравится больше контролировать кодировки, которые я использую. Я бы предложил использовать FileInputStream и FileOutputStream, завернутые в InputStreamReader и OutputStreamWriter.
  • Вы звоните String.replace() и игнорируете результат. Строки являются неизменяемыми - вызов replace не изменит существующую строку . Вы хотите:

    line = line.replace("Javascript"," JAVA");
    
  • Вы никогда не используете переменную lines, и ваша переменная line будет лучше, чем переменная local . Это относится только к самому методу, поэтому только объявляет в методе.
  • Ваш код будет легче следовать, если он будет более соответствующим отступом. Если вы используете IDE, она должна сделать это за вас - это делает огромную разницу в удобочитаемости.

Первая - наиболее вероятная причина вашей нынешней проблемы, но остальные должны помочь, когда вы пройдете эту проблему. (Вопрос о замене, вероятно, станет вашей следующей проблемой ...)

0 голосов
/ 12 декабря 2011

Закройте средство записи за пределами цикла.

out.flush();
out.close();

Кроме того, вы пишете строки в новые строки, если вы просто хотите заменить javascript на Java, то вы также можете написать '\ n', символ следующей строки нового файла, где старый файл содержит новую строку.

0 голосов
/ 12 декабря 2011

Вы пропали без вести out.flush().

BufferedWriters ничего не пишут, пока вы их не очистите или буфер не заполнится.

...