2016-11-29 3 views
-1

Я пытаюсь создать программу, в которой он будет читать файл, если он существует. Если файл не существует, я хочу, чтобы он зациклился и снова попросил пользователя ввести вход. На данный момент у меня есть это, где он просто остановится, но я хотел, чтобы он вернулся и снова спросил, какие идеи?Если файл не существует, попробуйте еще раз

System.out.println("Enter the file you want to check (without file extension): "); 
Scanner scanner = new Scanner(System.in); 
String input = scanner.nextLine(); 
String in = (input + ".txt"); 

File f = new File(in); 

if(!f.exists()) { 
    System.out.println(in + " doesn't exist! Try again."); 
    return; 
} 


String fileName = input; 
String content = readFile(in); 
System.out.println(content); 
+4

Итак, почему бы вам не окружить свой код петлей? – agad

ответ

3

Один из способов заключается в использовании do, while(false) петлю (которая позволяет f быть областью действия в теле цикла):

Scanner scanner = new Scanner(System.in); 
do { 
    System.out.println("Enter the file you want to check (without file extension): ");   
    String input = scanner.nextLine(); 
    String in = (input + ".txt"); 

    File f = new File(in); 
    if(!f.exists()){ 
     System.out.println(in + " doesn't exist! Try again."); 
     continue; /*go round again*/ 
    } 
} while (false/*i.e. exit the loop if we get here*/); 

Если вы хотите f быть доступны после цикла затем объявить File f; перед линией do { и напишите f = new File(in); в корпусе контура.

+1

«Сканер», вероятно, должен находиться вне цикла. –

+2

Не выполняйте 'continue; в то время как (ложь) '. Просто выполняйте 'while (! F.exists())' или пропустите часть do и выполняйте 'while (true) {code if (f.exists()) break; } ' – marisbest2

+0

Woah,' 'продолжайте' обходить условие цикла do ... while'? : o Почему я этого не знал? – Qix

1

Просто, чтобы предоставить вам более классический цикл while, чтобы сделать это.

Обратите внимание, что ответ от @Bathsheba действительно опрятен, вы должны обязательно принять его ответ.

System.out.println("Enter the file you want to check (without file extension): "); 
Scanner scanner = new Scanner(System.in); 
String input = scanner.nextLine(); 
String in = (input + ".txt"); 
File file = new File(input); 

while(!file.exists()){ 

    System.out.println(in + " doesn't exist! Try again."); 
    input = scanner.nextLine(); 
    in = (input + ".txt"); 
    file = new File(input); 

} 
0

Я не люблю do - while и while(false) или даже while(true) и break с.

Если его не слишком много работы, я бы что-то вроде:

Scanner scanner = new Scanner(System.in); 
File f = getFile(); 
while (!f.exist()) { 
    f = getFile(); 
} 

private File getFile() { 
    System.out.println("Enter the file you want to check (without file extension): ");   
    String input = scanner.nextLine(); 
    String in = (input + ".txt"); 
    File f = new File(in); 
    if (!f.exists()) { 
     System.out.println(in + " doesn't exist! Try again."); 
    } 
    return f; 
} 

Это позволяет избежать некрасиво сделай в то время как петли и инкапсулирует логику, получая хорошо. Вы также теоретически могли бы сделать его рекурсивным (хотя это допускает переполнение стека) или вернуть его Pair из File, in, что повышает вход во внешний контур, что позволяет петле иметь доступ к переменной in.

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