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の機能に関しては、1つのライナーThreadLocalRandom.current() .ints(10, 0, 10).toArray()を使用して目的の配列を生成できますが、実際には配列を生成する必要はありません。書き込みする前に新しいランダム値を求めることができます。両方の例は、(ラインターミネータなし)ファイルの先頭に"Name"を書いて、あなたの元のコードの振る舞いを再現

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

注意。私はこの目的を知らないのですが...