2017-02-21 6 views
0

私はプログラミングには慣れていませんが、最近は名前を付けて複数のディレクトリを作成するための簡単なプログラムを作成しようとしています。それは働いていますが、当初は私に尋ねることなく最初の「数字」を追加しています。その後、私が望むだけ多くのフォルダを作成できます。私は5つのフォルダを作成することを選択した場合複数のディレクトリを作成する方法は?

public class Main { 
public static void main(String args[]) throws IOException{ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("How many folders do you want?: "); 
    int number_of_folders = sc.nextInt(); 
    String folderName = ""; 
    int i = 1; 
    do { 
     System.out.println("Folder nr. "+ i); 
     folderName = sc.nextLine(); 
     try { 
      Files.createDirectories(Paths.get("C:/new/"+folderName)); 
      i++; 
     }catch(FileAlreadyExistsException e){ 
      System.err.println("Folder already exists"); 
     } 
    }while(number_of_folders > i); 
} 
} 

、このような何かが起こっている:それは愚かな質問がある場合は

1. How many folders do you want?: 
2. 5 
3. Folder nr. 0 
4. Folder nr. 1 
5. //And only now I can name first folder nad it will be created.

が、私はすぐにそれを削除します。前もって感謝します。この場合

+0

あなたのIDEがそれらを追加していると思います。コマンドラインでプログラムを実行するとどうなりますか? –

+0

また、 'while'ループの代わりに' for'ループを使用することを検討してください。 – ahjohnston25

+0

@ ahjohnston25いいえ、forループは、エラー処理のために動作を変更します。 –

答えて

3

それは、この行のためにあなたのsc.nextInt()です:

int number_of_folders = sc.nextInt(); 

は最後の改行文字を消費しません。

あなたが入力したディレクトリの数を入力すると、それもASCII値(10)です。 nextIntを読むと、改行文字はまだ読み込まれておらず、nextLine()はその行を最初に収集し、次の入力で通常通り続行します。

0

、あなただけのようFileクラスのmkdir一部を使用することができます。

String directoryName = sc.nextLine(); 
File newDir = new File("/file/root/"+directoryName); 
if (!newDir.exists()) { //Don't try to make directories that already exist 
    newDir.mkdir(); 
} 

あなたのコードにこれを組み込む方法を明確にする必要があります。

関連する問題