1

私はこのコードでファイルへの書き込みをテストしていました:

package files;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

public class FileTest1 
{
public static void main(String[] args)
{
    try
    {
        try
        {
            File f = new File("filetest1.txt");
            FileWriter fWrite = new FileWriter(f);
            BufferedWriter fileWrite = new BufferedWriter(fWrite);
            fileWrite.write("This is a test!");
        }
        catch(FileNotFoundException e)
        {
            System.out.print("A FileNotFoundException occurred!");
            e.printStackTrace();
        }
    }
    catch(IOException e)
    {
        System.out.println("An IOException occurred!:");
        e.printStackTrace();
    }
}

}

実行しても何も起こりません。"これはテストです!" 書かれていないし、StackTrace も "A/An [例外] が発生しました!"... 何が問題の原因なのかわかりません。ファイルのすぐ下のパッケージにfileTest1.txtがあります...

4

4 に答える 4

4

ABufferedWriterはまさにそれを行い、宛先に書き込まれる前に出力をバッファリングします。これによりBufferedWriter、ディスクやソケットなどの遅い宛先にすぐに書き込む必要がないため、使用が速くなります。

内部バッファがいっぱいになると内容が書き込まれますflushWriterclose

開いたら閉じる必要があることを忘れないでください...

例えば...

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestFileWriter {

    public static void main(String[] args) {
        try {
            BufferedWriter fileWrite = null;
            try {
                File f = new File("filetest1.txt");
                System.out.println("Writing to " + f.getCanonicalPath());
                FileWriter fWrite = new FileWriter(f);
                fileWrite = new BufferedWriter(fWrite);
                fileWrite.write("This is a test!");
                fileWrite.flush();
            } catch (FileNotFoundException e) {
                System.out.print("A FileNotFoundException occurred!");
                e.printStackTrace();
            } finally {
                try {
                    // Note, BufferedWriter#close will also close
                    // the parent Writer...
                    fileWrite.close();
                } catch (Exception exp) {
                }
            }
        } catch (IOException e) {
            System.out.println("An IOException occurred!:");
            e.printStackTrace();
        }
        try {
            BufferedReader br = null;
            try {
                File f = new File("filetest1.txt");
                System.out.println("Reading from " + f.getCanonicalPath());
                FileReader fReader = new FileReader(f);
                br = new BufferedReader(fReader);
                String text = null;
                while ((text = br.readLine()) != null) {
                    System.out.println(text);
                }
            } catch (FileNotFoundException e) {
                System.out.print("A FileNotFoundException occurred!");
                e.printStackTrace();
            } finally {
                try {
                    // Note, BufferedWriter#close will also close
                    // the parent Writer...
                    br.close();
                } catch (Exception exp) {
                }
            }
        } catch (IOException e) {
            System.out.println("An IOException occurred!:");
            e.printStackTrace();
        }
    }
}

Java 7 を使用している場合は、try-with-resources を参照してください。

于 2013-08-16T23:32:40.667 に答える
1

fileWrite.write("This is a test!");

あなたはflush()作家でなければなりません。リソースのリークを避けるにはclose()、ライター (自動的にフラッシュする) も必要です。

したがって、次を追加する必要があります。

fileWrite.close();
于 2013-08-16T23:32:50.813 に答える
1

とを使用BufferedWriter.flush()BufferedWriter.close()ます。追加情報はこちらhttp://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html

于 2013-08-16T23:33:08.917 に答える
0

close()バッファが実際にファイルに書き込まれるようにするには、少なくともflush()ライターでまたは を呼び出す必要があります。

于 2013-08-16T23:33:12.857 に答える