如何在java中多次写入文件?

如何在java中多次写入文件?,java,file,overwrite,Java,File,Overwrite,我正在编写一个程序,它将计算2到10000之间的所有素数,并将其写入一个文件 人们告诉我如何写入文件的不同方法,所以我接受了一个建议并尝试了一下。 起初,我将文件创建放在一个循环中,每次都以程序重新创建文件结束,然后我将文件创建从循环中取出,现在我得到了错误 有人能告诉我这是不是一种方法吗?如果不是,应该怎么做,或者我该怎么做 已经有一个文件也可以工作,然后从我的程序中添加/编辑/覆盖它 public static void main(String[] arg){ int prime =

我正在编写一个程序,它将计算2到10000之间的所有素数,并将其写入一个文件

人们告诉我如何写入文件的不同方法,所以我接受了一个建议并尝试了一下。 起初,我将文件创建放在一个循环中,每次都以程序重新创建文件结束,然后我将文件创建从循环中取出,现在我得到了错误

有人能告诉我这是不是一种方法吗?如果不是,应该怎么做,或者我该怎么做

已经有一个文件也可以工作,然后从我的程序中添加/编辑/覆盖它

public static void main(String[] arg){
    int prime = 2;

    File file = new File("out.txt");      // how should i do this part
    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);     

    while(prime < 10000){
        boolean isPrime = true;

        for( int i = 2; i <= sqrt(prime); i++){
            if( (prime%i) == 0 ){
                isPrime = false;
                break;
            }
        }
        if(isPrime){
            bw.write(prime + " ");     // and this
        }
        prime++;
    }
}
publicstaticvoidmain(字符串[]arg){
int素数=2;
File File=new File(“out.txt”);//我应该如何做这部分
FileWriter fw=新的FileWriter(file.getAbsoluteFile());
BufferedWriter bw=新的BufferedWriter(fw);
while(prime<10000){
布尔值isPrime=true;

对于(int i=2;i您必须写入,然后在末尾关闭FileWriter和BufferedWriter

把这些线放在循环后的最后一行--


此外,使用
FileWriter fw=new FileWriter(file.getAbsoluteFile(),true);
将允许您附加到现有文件中。请注意“true”。

代码看起来不错,完成后请确保关闭流

如果不希望每次都创建一个新文件,可以在写入模式下打开现有文件

如果出现故障,我会将
bw.write(prime+);
放在
try/catch
块中,以便优雅地退出。如果文件不
file.exists()
则可能还需要包含
file.createNewFile()
语句

最后,确保您
bw.close()
缓冲写入程序

除此之外,所有的东西都看起来像标准杆。 我会做一个:

try {
  bw.write(stuff);
}
Catch (IOException e) {
  e.printStackTrace();
}

我的猜测是,您的错误是由于一些代码可以抛出的已检查异常,并且您没有捕获或声明要抛出的
main
。您还可能泄漏资源。如果您使用的是Java 7,我建议您执行以下操作(使用a):

publicstaticvoidmain(字符串[]arg){
File File=新文件(“out.txt”);
试一试(
BufferedWriter bw=新的BufferedWriter(新文件写入程序(文件))
) {
对于(整数素数=2;素数<10000;++素数){
布尔值isPrime=true;
最终整数极限=(整数)sqrt(素数);//

for(int i=2;i使用StringBuffer缓存所有素数,在for循环完成对所有数字的迭代后,将StringBuffer转换为字符串并一次性写入输出文件。

您会遇到什么错误?如果可用,请发布堆栈跟踪。您可能希望查看[此处]()我把try/catch块放在if语句和bw.close()中,放在while循环之后,但它仍然无法编译。它说:“必须捕获或声明抛出未报告的异常ioexception”通过我的文件创建谢谢你!现在它可以正常工作了!我知道这种方法不是最好的,但它是一种简单的方法。但是我会研究你的建议,也许用这种方法做另一个程序!
try {
  bw.write(stuff);
}
Catch (IOException e) {
  e.printStackTrace();
}
public static void main(String[] arg){
    File file = new File("out.txt");
    try (
        BufferedWriter bw = new BufferedWriter(new FileWriter(file))
    ) {
        for (int prime = 2; prime < 10000; ++prime) {
            boolean isPrime = true;
            final int limit = (int) sqrt(prime); // 
            for (int i = 2; i <= limit && isPrime; i++) {
                isPrime = prime % i != 0;
            }
            if (isPrime){
                bw.write(String.valueOf(prime));
                bw.newLine();
            }
        }
    } catch (IOException ex) {
        e.printStackTrace();
    }
}
public static void main(String[] arg){
    File file = new File("out.txt");
    BufferedWriter bw = null;
    try {
        bw = new BufferedWriter(new FileWriter(file));

        for (int prime = 2; prime < 10000; ++prime) {
            boolean isPrime = true;
            int limit = (int) sqrt(prime);
            for( int i = 2; i <= limit && isPrime; i++) {
                isPrime = prime % i != 0;
            }
            if (isPrime) {
                bw.write(String.valueOf(prime));
                bw.newLine();
            }
        }
    } catch (IOException ex) {
        e.printStackTrace();
    } finally {
        if (bw != null) {
            try { bw.close(); }
            catch (IOException ignored) { }
        }
    }
}