2

ファイルの内容を編集し、編集した内容を別のファイルに書き込む必要があります。これは、を使用したコードiamです。

  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();     
        }     
} 

つまり、これは一度に1行を読み取り、それをファイルに出力するようなものです。しかし、このコードを実行すると、出力ファイルが空白になります。サンプルコード、ファイルからの読み取り、内容の変更、ファイル全体の新しいファイルへの書き込み方法を教えてください。

4

3 に答える 3

4

さて、いくつかの問題:

  • 入力または出力のいずれかを閉じることはありません。クロージングもフラッシュされます-何かがフラッシュされていない可能性があります。ストリームベースのリソースをfinallyブロック内で閉じる必要があります。これにより、例外が発生した場合でもリソースが閉じられるようになります。(閉じる必要があることを考えると、明示的にフラッシュすることもしません。トップレベルの抽象化、つまりout(およびbr)を閉じるようにしてください。
  • あなたはそれを捕まえExceptionて飲み込んでいます。例外がスローされている可能性がありますが、それを飲み込んだため、わかりません。少なくともログに記録し、おそらくその時点で停止する必要があります。IOException(代わりにキャッチすることもお勧めしExceptionます。)
  • 使用FileWriterFileReaderているので、入出力エンコーディングを指定できません。ここでの問題ではありませんが、個人的には、使用するエンコーディングをより細かく制御したいと思います。FileInputStreamとを使用してFileOutputStreamラップすることをお勧めしInputStreamReaderますOutputStreamWriter
  • あなたはString.replace()結果を呼び出して無視しています。文字列は不変です。呼び出しても既存のreplace文字列は変更されません。あなたが欲しい:

    line = line.replace("Javascript"," JAVA");
    
  • lines変数を使用することはありません。変数はローカルline変数として適しています。メソッド自体にのみ関連するため、メソッドで宣言するだけです。
  • より適切にインデントされていれば、コードを理解しやすくなります。IDEを使用している場合は、IDEでこれを実行できるはずです。これにより、読みやすさが大幅に向上します。

最初の問題が現在の問題の原因である可能性が最も高いですが、それを過ぎたときに残りの問題が役立つはずです。(「交換」についてのポイントはおそらくあなたの次の問題になるでしょう...)

于 2011-12-12T05:27:16.170 に答える
0

あなたは行方不明out.flush()です。

BufferedWritersは、フラッシュするか、バッファーがいっぱいになるまで、何も書き込みません。

于 2011-12-12T05:26:52.643 に答える
0

ループの外側で、プリントライターを閉じます。

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

さらに、新しい行に文字列を書き込んでいます。javascriptをJavaに置き換えたい場合は、古いファイルに新しい行が含まれている新しいファイルに次の行の文字である'\n'を書き込むこともできます。

于 2011-12-12T05:27:54.627 に答える