0

我正在用 java 构建一个小软件来测试功能和 PrintWriter 方法。但是当我运行它时,只打印循环的最后一个数字。例如,奇数文件仅打印 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();
    } 
}
4

2 回答 2

2

你正在这样做:

  1. 打开文件
  2. 写号码
  3. 关闭文件
  4. 转到 (1) 重新开始。

这样,您正在清除文件的先前数据。将您的逻辑更改为:

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

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

PrintWriter pw = new PrintWriter(new FileWriter(file, true));
于 2013-10-29T23:18:55.463 回答
1

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

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

于 2013-10-29T23:20:17.880 回答