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

时间:2013-09-18 19:36:44

标签: java file overwrite

我正在研究一个计算2到10 000之间的alla素数并将其写入文件的程序。

人们告诉我们如何写一个文件的不同方法,所以我采取了一个消化并尝试了。 起初我把我的文件创建放在一个循环中,每次重新创建文件的程序结束,然后我把文件创建从循环开始,现在我得到了错误。

有人可以告诉我这是否是这样做的方式,如果没有,应该怎么做,或者我怎样才能做到这一点?

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

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++;
    }
}

5 个答案:

答案 0 :(得分:2)

代码看起来很好,只要确保在完成后关闭你的流。

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

How do I create a file and write to it in Java?

答案 1 :(得分:0)

您必须在最后编写然后关闭FileWriter和BufferedWriter。

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

bw.close();
fw.close();

此外,使用FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);可以将您附加到现有文件。请注意'真实'。

答案 2 :(得分:0)

如果某些内容失败,我会将bw.write(prime + " ");置于try/catch块中以优雅地退出。如果文件不是file.createNewFile(),您可能还希望包含file.exists()语句。

最后,请确保bw.close()缓冲的编写者。

除此之外,是的,一切都看起来很平等。

我会做:

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

答案 3 :(得分:0)

我的猜测是你的错误是由于某些代码可以抛出的已检查异常,以及你没有捕获或声明main抛出。您也可能泄漏资源。如果您使用的是Java 7,我建议使用以下内容(使用try-with-resources statement):

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();
    }
}

在Java 7之前,您应该执行以下操作:

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) { }
        }
    }
}

顺便说一下,你测试素性的方法非常低效。您可能需要查看使用Sieve of Eratosthenes

答案 4 :(得分:0)

使用StringBuffer缓存所有素数,并在for循环完成迭代所有数字后,将StringBuffer转换为String并一次性写入输出文件。