一時ファイルにコピーせずに、テキスト ファイルからテキスト行を削除しようとしています。Printwriter と Scanner を使用し、同時にファイルをトラバースさせ、ライターが Scanner が読み取ったものを書き込み、各行を同じもので上書きして、目的の行に到達するまでこれを実行しようとしています。消去。次に、ライターではなくスキャナーを進め、以前と同じように続行します。コードは次のとおりです。
しかし、最初に、パラメーター: 私のファイル名は数字なので、これは 1.txt または 2.txt などと読み、f はファイル名を指定します。ファイルのコンストラクターで文字列に変換します。Int n は、削除したい行のインデックスです。
public void deleteLine(int f, int n){
try{
Scanner reader = new Scanner(new File(f+".txt"));
PrintWriter writer = new PrintWriter(new FileWriter(new File(f+".txt")),false);
for(int w=0; w<n; w++)
writer.write(reader.nextLine());
reader.nextLine();
while(reader.hasNextLine())
writer.write(reader.nextLine());
} catch(Exception e){
System.err.println("Enjoy the stack trace!");
e.printStackTrace();
}
}
奇妙なエラーが発生します。スタックトレースに「NoSuchElementException」と「行が見つかりません」と表示されます。異なる行を指しています。nextLine() 呼び出しのいずれかでこれを実行できるようです。この方法で行を削除することは可能ですか? もしそうなら、私は何を間違っていますか?そうでない場合、なぜですか?(ところで、これが必要な場合に備えて、テキスト ファイルは約 500 行です。ただし、それが大きいと見なされるのか、それとも問題になるのかはわかりません。)