0

ファイルにテキストを書き込んでから削除しましたが、削除に失敗しました。

コードは非常に単純です。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class TestFile {

    public static void main(String[] args) throws IOException {
        File file = new File("c:\\abc.txt");
        writeFile(file, "hello");

        // delete the file
        boolean deleted = file.delete();
        System.out.println("Deleted? " + deleted);

    }

    public static void writeFile(File file, String content) throws IOException {
        OutputStream out = null;
        try {
            out = new FileOutputStream(file);
            out.write(content.getBytes("UTF-8"));
        } catch (IOException e) {
            try {
                out.close();
            } catch (IOException e1) {
                // ignored
            }
        }
    }
}

出力は次のとおりです。

Deleted? false

そして、の下にまだそこにabc.txt含まれているファイルがあります。helloc:

その後、代わりにFileUtils.writeStringToFile(...)fromを使用commons-io.jarすると、ファイルが削除されます。

しかし、コードのどこが間違っているのかわかりません。コードを見つけるのを手伝ってください。

4

5 に答える 5

5

IOExceptionが発生した場合にのみ、ファイルを閉じます。

ブロックに変更するとfinally、ファイルを閉じて削除できるようになります。

public static void writeFile(File file, String content) throws IOException {
    OutputStream out = new FileOutputStream(file);
    try {
        out.write(content.getBytes("UTF-8"));
    } finally {
        try {
            out.close();
        } catch (IOException ignored) {
        }
    }
}
于 2012-09-28T13:51:17.927 に答える
1

ファイルの書き込みが終了したら、OutputStreamを閉じる必要があります。

try {
        out = new FileOutputStream(file);
        out.write(content.getBytes("UTF-8"));
        out.close();
    } catch (IOException e) {
        try {
            out.close();
        } catch (IOException e1) {
            // ignored
        }
    }
于 2012-09-28T13:49:56.697 に答える
1

例外が発生した場合は、ファイルを削除するだけです。ファイルを開いた後は、毎回それを行う必要があります。あなたはfinallyブロックに近づきたいかもしれません。

Java 7を使用している場合は、ファイルを閉じる処理を行うtry-with-ressourcesブロックの使用を検討します。

try (BufferedReader br = new BufferedReader(new FileReader(path))) 
{
    return br.readLine();
}
于 2012-09-28T13:51:22.470 に答える
1

あなたの主な方法では、

 public static void main(String[] args) throws IOException {
        File file = new File("c:\\abc.txt");
        writeFile(file, "hello");

        // delete the file
        boolean deleted = file.delete();
        System.out.println("Deleted? " + deleted);

    }

ファイルを開いて書き込み、閉じないでください。Javaはファイルを開いたままにしておくので、さらに情報を追加したい場合は、そうすることができます。ただし、ファイルを削除できるようにするには、他の参照が開いていないことを確認する必要があります。これを行うには、file.close()を使用して、Java予約のファイルハンドルを閉じます。

ストリームを使い終わったら、特にデータを追加した場合は、常にストリームを閉じることをお勧めします。そうしないと、誤ってファイルを開いたままにしたり、極端な場合には、すでに保存されていると思っていたデータが失われたりする可能性があります。

于 2012-09-28T13:51:28.110 に答える
1

FileUtils.writeStringToFile()あなたがしていないことを見てください。

public static void writeStringToFile(File file, String data, String encoding) throws IOException {
    OutputStream out = new java.io.FileOutputStream(file);
    try {
        out.write(data.getBytes(encoding));
    } finally {
        IOUtils.closeQuietly(out);
    }
}

outストリームは常に閉じていることに注意してください。この例では、例外がスローされたcatch場合にのみ、ブロック内でストリームが閉じられます。write()

Windowsでは、どのプログラムで開いているファイルも削除できません。

于 2012-09-28T13:52:22.250 に答える