打印文件编写器仅写入 1 个数字

Posted

技术标签:

【中文标题】打印文件编写器仅写入 1 个数字【英文标题】:print file writer only writes 1 number 【发布时间】:2013-10-29 23:17:28 【问题描述】:

我正在用 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();
     

【问题讨论】:

【参考方案1】:

你正在这样做:

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

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

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于打印文件编写器仅写入 1 个数字的主要内容,如果未能解决你的问题,请参考以下文章

让 C++ 程序写入文件 [关闭]

java 编写一个从用户读取10个数字的java程序,并在列表中打印第一个奇数。

如何编写要求输入 10 个数字的代码

编写Python程序,打印出由6,7,8,9共四个数字组成的互不相同且无重复数字的三位?

使用 scanf 从管道读取失败

编写一个c程序,从键盘输入任意一个五位数,把这个数值分解为单个数字,然后打印出每个数字并且每个数字