2017-02-21 2 views
0

Я новичок в программировании и недавно попытался создать простую программу для создания нескольких каталогов с именами, которые я хочу. Он работает, но вначале он добавляет первый «номер», не спрашивая меня. После этого я могу сделать столько папок, сколько захочу.Как создать несколько каталогов?

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

Если я решил сделать 5 папок, что-то подобное происходит:

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

Также рассмотрите использование цикла 'for' вместо цикла while. – ahjohnston25

+0

@ ahjohnston25 Нет, цикл for изменит поведение из-за обработки ошибок. –

ответ

3

Это потому, что ваш sc.nextInt() в этой строке:

int number_of_folders = sc.nextInt(); 

не потребляет последний символ новой строки.

Когда вы вводили количество введенных вами каталогов, которые также имеют значение ASCII (10). Когда вы читаете nextInt, символ новой строки еще не читается, а nextLine() сначала собирает эту строку, а затем продолжает нормально с вашим следующим входом.

0

В этом случае, вы можете просто использовать mkdir часть File класса, так:

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

должно быть ясно, как включить это в код.

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