我正在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();
}
}
答案 0 :(得分:2)
你这样做:
这样,您将清除文件的先前数据。将您的逻辑更改为:
或者,您可以选择通过附加数据来写入文件。但在这种情况下,不推荐。如果您想尝试它(仅用于教育目的!),您可以尝试创建这样的PrintWriters:
PrintWriter pw = new PrintWriter(new FileWriter(file, true));
答案 1 :(得分:1)
默认情况下,PrintWriter
会覆盖现有文件。在PrintFile
方法中,为每次写入创建一个新的PrintWriter
对象。这意味着您可以在PrintFile
方法中覆盖之前编写的所有内容。因此,该文件仅包含最后一次写入。要解决此问题,请使用共享的PrintWriter
实例。
请注意,根据惯例,Java中的方法,字段和变量以小写字母开头(numbers()
,evenOdd(...)
,printFile(...)
,odd
,even
,file
...)。这使得您的代码对其他人更具可读性。