2016-11-29 2 views
-1

Ich versuche, ein Programm zu machen, wo es eine Datei lesen wird, wenn es existiert. Wenn die Datei nicht existiert, möchte ich sie zurückschleifen und den Benutzer erneut nach der Eingabe fragen. Im Moment habe ich das hier, wo es einfach stehen bleibt, aber ich wollte, dass es zurückschleicht und nochmal nach Ideen fragt?Wenn Datei nicht existiert, versuchen Sie es erneut

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

Also, warum nicht Ihren Code mit einer Schleife umgeben? – agad

Antwort

3

Eine Möglichkeit ist es, eine do, while(false) Schleife zu verwenden (die f ermöglicht die Schleife scoped werden):

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*/); 

Wenn Sie f wollen nach der Schleife zur Verfügung stehen dann File f; erklären kurz vor der do { Zeile, und schreibe f = new File(in); in den Schleifenkörper.

+1

Der 'Scanner' sollte sich wahrscheinlich außerhalb der Schleife befinden. –

+2

Tun Sie kein 'continue; während (falsch) '. Tun Sie einfach while (! F.exists()) 'oder überspringen Sie den do-Teil und machen Sie' while (true) {code if (f.exists()) break; } ' – marisbest2

+0

Woah, geht' continue' eine 'do ... while' Schleife um? : o Warum habe ich das nicht gewusst? – Qix

1

Nur um Ihnen eine klassische while Schleife zu bieten, um dies zu tun.

Beachten Sie, dass die Antwort von @Bathsheba wirklich ordentlich ist, sollten Sie definitiv seine Antwort akzeptieren.

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

Ich mag nicht do - while und while(false) oder sogar while(true) und break s.

Wenn es nicht zu viel Arbeit, ich so etwas wie tun würde:

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

Dies vermeidet hässliche do-while-Schleifen und kapselt die immer Logik gut. Sie könnten es theoretisch auch rekursiv machen (obwohl dies Stapelüberläufe erlaubt) oder es kann eine Pair von File, in zurückgeben, die die Eingabe in die äußere Schleife erhöht, so dass die Schleife Zugriff auf die Variable in haben kann.

Verwandte Themen