2016-04-24 5 views
0

Идея состоит в том, чтобы создать массив из 10 элементов & заполнить его случайными числами. Затем получите имя выходного файла от пользователя и напечатайте мое имя, а затем содержимое массива в этот новый файл. Если пользователь выбирает существующее имя файла, программа должна сообщить им об этом и не перезаписывать этот файл.Используя метод в Java 8, как мне написать массив в файл после первой проверки, существует ли он уже?

private static void arrayOfTen() throws IOException { 
    String userFilename; 
    int[] randomList = new int[10]; 
    for (int i = 0; i < randomList.length; i++) { 
     randomList[i] = (int) (Math.random() * 10); 
    } 
    System.out.println("An array of ten elements has been populated with" + 
      "random integers. Please name a new file in which to print " + 
      "this array: "); 
    userFilename = input.nextLine(); 
    java.io.File file = new java.io.File(userFilename); 

    // Check to see if filename already in use & exit if so 
    if (file.exists()) { 
     System.out.println("File already exists."); 
     System.exit(0); 
    } 
    else { 
     // Create output file 
     java.io.PrintWriter outfile = new java.io.PrintWriter(file); 

     // Write formatted output to file 
     outfile.print("Name"); 
     for (int i = 0; i < randomList.length; i++) { 
      outfile.println(randomList[i]); 
     } 
     outfile.close(); 
    } 
} 
+3

Какая проблема возникла сейчас? – Flown

ответ

0

Это не ясно, что действительная проблема в том, но так как вы просили Java 8, давайте обсудим, что вы можете и должны сделать лучше:

private static void arrayOfTen() throws IOException { 
    int[] randomList = ThreadLocalRandom.current().ints(10, 0, 10).toArray(); 
    System.out.println("An array of ten elements has been populated with" + 
      "random integers. Please name a new file in which to print " + 
      "this array: "); 
    String userFilename = input.nextLine(); 
    // Create output file, demand creating a new file 
    try(BufferedWriter w = Files.newBufferedWriter(
      Paths.get(userFilename), StandardOpenOption.CREATE_NEW)) { 
     // Write formatted output to file 
     w.write("Name"); 
     for(int value: randomList) { 
      w.write(String.valueOf(value)); 
      w.newLine(); 
     } 
    } 
} 

Самое главное, try(…) конструкция для обеспечения правильное закрытие файла, который не является новичком в Java 8, но является функцией Java 7. Затем, создав запись с помощью StandardOpenOption.CREATE_NEW, вы убедитесь, что выходной канал будет открыт, только если файл является новым, то есть не существует. Попытки открыть существующий файл приведут к java.nio.file.FileAlreadyExistsException; это избавит вас от выполнения ручных проверок перед открытием. Обратите внимание, что вы можете обрабатывать все элементы массива, используя синтаксис for-each for(int value: array) (начиная с Java 5).

Что касается конкретных функций Java 8, вы можете сгенерировать желаемый массив с помощью одного линейного устройства ThreadLocalRandom.current() .ints(10, 0, 10).toArray(), но на самом деле нет необходимости генерировать массив вообще, так как вы могли бы запросить новое случайное значение прямо перед его написанием:

private static void arrayOfTen() throws IOException { 
    System.out.println("Please name a new file in which to print ten random integers: "); 
    String userFilename = input.nextLine(); 
    // Create output file, demand creating a new file 
    try(BufferedWriter w = Files.newBufferedWriter(
      Paths.get(userFilename), StandardOpenOption.CREATE_NEW)) { 
     // Write formatted output to file 
     w.write("Name"); 
     ThreadLocalRandom r=ThreadLocalRandom.current(); 
     for(int i=0; i<10; i++) { 
      w.write(String.valueOf(r.nextInt(10))); 
      w.newLine(); 
     } 
    } 
} 

Обратите внимание, что оба примера повторить поведение вашего оригинального кода в написании "Name" в начале файла (без конца строки). Я не знаю цели этого, хотя ...

 Смежные вопросы

  • Нет связанных вопросов^_^