print file writer只写1个数字

时间:2013-10-29 23:17:28

标签: java user-defined-functions printwriter

我正在java中构建一个小软件来测试函数和PrintWriter方法。但是当我运行它时,只打印最后一个循环数。例如,在Odd文件上只打印99,而偶数文件只打印100.

我创建了几个system.out.println来测试循环是否正常工作,它似乎是。有谁知道它为什么只打印一行?

   /**
 *
 * @author bertadevant
 */

import java.io.*;

public class Filewritermethods {

    public static void main(String[] args) throws IOException {

       Numbers();  

   }

   public static void Numbers () throws IOException {

        for (int i =1; i<=100; i++){

            EvenOdd(i);
        }
}

    public static void EvenOdd (int n) throws IOException {

        File Odd = new File ("odd.txt");
        File Even = new File ("even.txt");
        File All = new File ("all.txt");

        PrintWriter all = new PrintWriter (All);

        all.println(n);
        all.close();

        if (n%2==0){

            PrintFile(Even, n);
            System.out.println ("even");
        }

        else {
            PrintFile (Odd, n);
            System.out.println ("odd");
        }

    }

    public static void PrintFile (File filename, int n) throws IOException {

        PrintWriter pw = new PrintWriter (filename);

        if (n!=0) {
            pw.println(n);
            System.out.println (n + " printfile method");
        }

        else {
            System.out.println ("The number is not valid");
        }

        pw.close();
    } 
}

2 个答案:

答案 0 :(得分:2)

你这样做:

  1. 打开文件
  2. 写号码
  3. 关闭文件
  4. 从(1)开始。
  5. 这样,您将清除文件的先前数据。将您的逻辑更改为:

    1. 打开文件
    2. 写号码
    3. 转到(2)
    4. 完成后,关闭文件。

    5. 或者,您可以选择通过附加数据来写入文件。但在这种情况下,不推荐。如果您想尝试它(仅用于教育目的!),您可以尝试创建这样的PrintWriters:

      PrintWriter pw = new PrintWriter(new FileWriter(file, true));
      

答案 1 :(得分:1)

默认情况下,PrintWriter会覆盖现有文件。在PrintFile方法中,为每次写入创建一个新的PrintWriter对象。这意味着您可以在PrintFile方法中覆盖之前编写的所有内容。因此,该文件仅包含最后一次写入。要解决此问题,请使用共享的PrintWriter实例。

请注意,根据惯例,Java中的方法,字段和变量以小写字母开头(numbers()evenOdd(...)printFile(...)oddevenfile ...)。这使得您的代码对其他人更具可读性。