将数组保存到文件中(Java)

时间:2013-05-06 20:20:01

标签: java arrays io printwriter

我需要解决这个问题:

  1. 随机生成数组的长度 - 将此int保存到文件(“input.txt)”作为第一个数字;
  2. 随机生成数组元素 - 将每个元素保存到文件中(“input.txt”)
  3. 但是数组元素不会保存到文件中。

    正如我从控制台数组中看到的那样有数字,但它们没有保存到文件中。

    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;
        }
    
    }
    

2 个答案:

答案 0 :(得分:1)

您正在使用pr2.close();关闭流,然后尝试通过它打印一些内容。然后你再次关闭它。删除第一个pr2.close();它应该都可以。 你还有不必要的Scanner对象和第二个PrintWriter。

答案 1 :(得分:1)

您的问题是您在编写数组长度后正在调用pr2.close()。关闭PrintWriter后,它将不再允许将任何内容写入文件;因此,当你后来尝试将数组中的值写入pr2时,pr2说,“天哪,我知道这个人要我写点东西,但我已经关闭,我就是不能做吧!“所以什么都没写。

PrintWriter的工作原理是将所有write(...)print(...)次调用存储到内存中,然后在调用close()或{时将其实际写入文本文件中{1}}方法。虽然没有必要,但如果您希望与当前使用的第一次flush()通话功能相似,则可以使用close(),但请确保在完全使用时flush()使用close()完成(否则你只是要求内存泄漏)。