2013-05-06 2 views
0

мне нужно решить такую ​​задачу:Сохранение массива в файл (Java)

  1. Случайных генерировать длину массива - сохранить эту Int в файл («input.txt)» в качестве первой цифры ;
  2. Случайным генерировать элементы массива - сохранить каждый элемент в файл («input.txt»)

Но элементы массива не будет сохранять в файл.

Как я могу видеть из массива консоли, есть цифры, но они не сохраняются в файле.

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

Вы закрываете pr2, а затем пытаетесь написать ему. Избавьтесь от инструкции перед sc = new Scanner (новый файл («input.txt»)), который закрывает запись. –

ответ

1

Вы закрытия потока с pr2.close();, а затем пытается напечатать что-нибудь через него. Затем вы снова закрываете его. Удалите первый pr2.close(); И все должно работать. Также у вас есть ненужный объект Scanner и второй PrintWriter.

+0

Добавьте еще один символ строки: pr2.println (a); – Igor

+0

Спасибо. Сканер и второй текстовый редактор нужны для дальнейших действий. –

1

Ваша проблема в том, что вы вызываете pr2.close() сразу после записи длины массива. Как только вы закроете PrintWriter, он больше не позволит записывать что-либо в файл; таким образом, когда вы позже попытаетесь записать значения в массиве до pr2, pr2 говорит: «Черт, я знаю, что этот парень хочет, чтобы я что-то написал, но я закрыт, я просто не могу!» и поэтому ничего не написано.

В PrintWriter произведения хранения всех ваших write(...) и print(...) вызовов в память, а затем фактически записывая их в текстовый файл при вызове close() или flush() метод. Хотя это необязательно, если вы хотите функциональное сходство с вашим текущим использованием первого вызова close(), вместо этого вы можете использовать flush(), но убедитесь, что вы вызываете close(), когда вы полностью закончите, используя Scanner (иначе вы просто просите утечка памяти).