我需要解决这个问题:
但是数组元素不会保存到文件中。
正如我从控制台数组中看到的那样有数字,但它们没有保存到文件中。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
new Main().run();
}
Random rand;
Scanner sc;
PrintWriter pr, pr2;
public void run() throws FileNotFoundException {
pr2 = new PrintWriter(new File("input.txt"));
pr = new PrintWriter(new File("output.txt"));
rand = new Random();
int a = rand.nextInt((int) Math.pow(10, 3));
System.out.println(a);
pr2.print(a);
pr2.close();
sc = new Scanner(new File("input.txt"));
int[] arr = new int[a];
for (int i = 0; i < arr.length; i++) {
arr[i] = rand.nextInt((int) Math.pow(10, 3));
}
for (int i = 0; i < arr.length; i++) {
System.out.println("" + i + ": " + arr[i]);
pr2.print(arr[i]);
}
pr2.close();
return;
}
}
答案 0 :(得分:1)
您正在使用pr2.close();
关闭流,然后尝试通过它打印一些内容。然后你再次关闭它。删除第一个pr2.close();
它应该都可以。
你还有不必要的Scanner对象和第二个PrintWriter。
答案 1 :(得分:1)
您的问题是您在编写数组长度后正在调用pr2.close()
。关闭PrintWriter
后,它将不再允许将任何内容写入文件;因此,当你后来尝试将数组中的值写入pr2
时,pr2
说,“天哪,我知道这个人要我写点东西,但我已经关闭,我就是不能做吧!“所以什么都没写。
PrintWriter
的工作原理是将所有write(...)
和print(...)
次调用存储到内存中,然后在调用close()
或{时将其实际写入文本文件中{1}}方法。虽然没有必要,但如果您希望与当前使用的第一次flush()
通话功能相似,则可以使用close()
,但请确保在完全使用时flush()
使用close()
完成(否则你只是要求内存泄漏)。