3

私は、ファイルを読み取り、渡された文字列を見つけて、temp という新しいファイルを書き込み (行に渡されていない)、元のファイルを削除し、temp の名前を元のファイルに変更するメソッドを持つプロジェクトに取り組んでいます。名前。エラーなしで実行できますが、新しいファイルには何も出力されません。通常のデバッグを行ったところ、新しいファイルに行を書き出す行にエラーがあることがわかりました。何か間違ったことを呼び出す小さなエラーを犯したように感じます。それを解決する助けがあれば素晴らしいでしょう...

ここにコードがあります

public static void LineDelete(String Filename, String Content) throws IOException {
    try {
        File flights = new File("AppData/" + Filename);
        File temp;
        temp = new File("AppData/temp.txt");
        FileWriter fstream;
        BufferedWriter out;
        try (Scanner sc = new Scanner(flights)) {

            fstream = new FileWriter("AppData/temp.txt", true);
            out = new BufferedWriter(fstream);
            boolean exis = temp.exists();
            if (exis) {
                temp.delete();
                temp = new File("AppData/temp.txt");
                boolean createNewFile = temp.createNewFile();
            } else {
                boolean creatNewFile = temp.createNewFile();
            }
            String f;
            while (sc.hasNextLine()) {
                f = sc.nextLine();
                if (!f.equals(Content)) {

                    out.newLine();
                    out.write(f);

                }

            }
        }
        fstream.close();
        //out.close();
        flights.delete();
        File flightsn = new File("AppData/" + Filename);
        temp.renameTo(flightsn);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(FileWrite.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

4

1 に答える 1

4

out(BufferedReader)でcloseを呼び出す必要があります。

また、try-catch-finallyのfinally句で閉じる必要があります。

あなたのコードは多かれ少なかれあるべきです

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FileWrite {
    public static void LineDelete(String Filename, String Content)
            throws IOException {
        BufferedWriter out = null;
        File flights = new File("AppData/" + Filename);
        File temp = new File("AppData/temp.txt");
        FileWriter fstream = null;

        try {
            Scanner sc = new Scanner(flights);
            fstream = new FileWriter("AppData/temp.txt", true);
            out = new BufferedWriter(fstream);
            boolean exis = temp.exists();
            if (exis) {
                temp.delete();
                temp = new File("AppData/temp.txt");
                boolean createNewFile = temp.createNewFile();
            } else {
                boolean creatNewFile = temp.createNewFile();
            }
            String f;
            while (sc.hasNextLine()) {
                f = sc.nextLine();
                if (!f.equals(Content)) {
                    out.newLine();
                    out.write(f);
                }

            }
        } catch (IOException ex) {
            Logger.getLogger(FileWrite.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                out.close();
            } catch (Exception e) {
                Logger.getLogger(FileWrite.class.getName()).log(Level.SEVERE, null, e);
            }
        }

        if(flights.exists()){           
            flights.delete();
            File flightsn = new File("AppData/" + Filename);
            temp.renameTo(flightsn);
        }
    }
}
于 2012-04-22T18:05:46.533 に答える