1

我想写入一个文件,如果它存在我想释放内容并从文件的开头写入我使用的代码,但我现在不知道如何做到这一点。

try {
            File f = new File(testPath + "/logtest.txt");
            if (f.exists()) {
                f.delete();                                                                                             
                BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
                bw.write(text);
                bw.newLine();
                bw.close();
            } else {
                BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
                bw.write(text);
                bw.newLine();
                bw.close();

            }
        } catch (Exception e) {

        }
4

5 回答 5

1

构造函数的第二个参数FileWriter允许指定是否要附加或覆盖内容:

公共 FileWriter(文件文件,布尔附加)抛出 IOException

在给定 File 对象的情况下构造一个 FileWriter 对象。如果第二个参数为真,那么字节将被写入文件的末尾而不是开头。

参数:

  • file - 要写入的 File 对象
  • append - 如果为真,那么字节将被写入文件的末尾而不是开头

在您的代码中,您通过true. 只需将其更改为false

BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));

编辑:如果您在问题中提供的代码在循环内,您应该如何更改它:

try {
    File f = new File(testPath + "/logtest.txt");
    if (f.exists()) {
        f.delete();
    }
    BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));

    for/while (...) { // your loop here
        // extract your text
        bw.write(text);
    }

    bw.close();
    f.close();
} catch (Exception e) {
    // handle exceptions...
}
于 2013-02-26T10:58:35.477 回答
1

你必须使用

BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));

append您正在使用的构造函数中的第二个参数FileWriter是一个标志,它控制在第一次写入之前是否应该截断文件,或者是否应该附加写入的数据。

见 javadoc

于 2013-02-26T10:59:33.923 回答
0

这样做会覆盖之前的任何内容。

    String fileName = "foo.txt";
    FileWriter fw = null;
    try{
        fw = new FileWriter(fileName);
        fw.write("haha");
    } catch (IOException e) {
        System.err.println("Could not write to the file.");
    }finally{
        if(fw!=null)
            try {
                fw.close();
            } catch (IOException e) {
                System.err.println("Could not close the file.");
            }
    }

如果要附加数据使用

fw.append();
于 2013-02-26T11:04:16.590 回答
0

试试下面的代码。

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


public class FileClient {

    public static void main(String[] args) {
        try {

            String content = "Hello test";

            File file = new File("D:\\filename.txt");

            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();

            System.out.println("Done");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
于 2013-02-26T11:09:19.680 回答
0

您删除了文件,因为您f.delete();循环执行了一个。

你应该做这样的建设:

File f = new File(testPath + "/logtest.txt");
if (f.exists()) {
    f.delete();     
}
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));

while (...)
    String text = ...;

    bw.write(text);
    bw.newLine();
}
bw.close();

这样,您只需创建/删除文件一次。

于 2013-02-26T11:18:22.260 回答