2016-04-06 1 views
1

Also versuche ich eine Textdatei von der Linux-Befehlszeile in mein Java-Programm zu akzeptieren, aber der Compiler gibt mir den Fehler, der im Titel erwähnt wird. Es besagt, dass der Fehler in der Zeile "String fileName = args [0];" auftritt. Weiß jemand zufällig warum? Hier ist mein Code:ArrayIndexOutOfBoundsException: 0 tritt auf, wenn versucht wird, eine Datei von der Linux-Befehlszeile in Java einzulesen?

public class Parsons_Decoder 
{ 
    // method: main 
    // purpose: receives key-phrase and sequence of integers and 
    // prints the secret message to the screen. 
    public static void main(String[] args) throws IOException 
    { 
    String fileName = args[0]; 

    // reads incoming file (if it exists) and saves the key-phrase to 
    // String variable "keyPhrase" 
    File testFile = new File(fileName); 

    if(!testFile.exists()) 
    { 
     System.out.println("\nThis file does not exist.\n"); 
     System.exit(0); 
    } 

    Scanner inputFile = new Scanner(args[0]); 
    String keyPhrase = inputFile.nextLine(); 

    // creates an ArrayList and stores the sequence of integers into it 
    ArrayList<Integer> numArray = new ArrayList<Integer>(); 

    while(inputFile.hasNextInt()) 
    { 
     numArray.add(inputFile.nextInt()); 
    } 

    // decodes and prints the secret message to the screen 
    System.out.println(); 
    System.out.print("Your secret message is: "); 

    for(int i = 0; i < numArray.size(); i++) 
    { 
     int num = numArray.get(i); 
     System.out.print(keyPhrase.charAt(num)); 
    } 
    System.out.println("\n"); 

    //keyboard.close(); 
    inputFile.close(); 
    } 
} 
+1

Wie starten Sie das Programm? Der vollständige Befehl mit den Argumenten bitte – 3kings

+0

Was schreibst du in das CLI? – Gendarme

+0

Entschuldigung, die Befehlszeile sollte lauten: java Parsons_Dedocer thelonewanderer

Antwort

4

Update:

Ihr Professor wird Sie fragen, mit stdin in einer Datei zu lesen, einen Befehl wie den folgenden verwenden:

java Diaz_Decoder < secretText1.txt 

Ihre main() Die Methode sollte dann ungefähr wie folgt aussehen:

public static void main(String[] args) throws IOException { 
    // create a scanner using stdin 
    Scanner sc = new Scanner(System.in); 

    String keyPhrase = inputFile.nextLine(); 

    // creates an ArrayList and stores the sequence of integers into it 
    ArrayList<Integer> numArray = new ArrayList<Integer>(); 

    while (inputFile.hasNextInt()) { 
     numArray.add(inputFile.nextInt()); 
    } 

    // decodes and prints the secret message to the screen 
    System.out.println(); 
    System.out.print("Your secret message is: "); 

    for (int i = 0; i < numArray.size(); i++) { 
     int num = numArray.get(i); 
     System.out.print(keyPhrase.charAt(num)); 
    } 

    System.out.println("\n"); 
} 
+0

Danke, das hat besser funktioniert, aber mein Professor zeigte uns ein Beispiel, das das "<" benutzt, gibt es einen Weg, es so zu machen? – thelonewanderer

+0

Sind Sie sicher, dass er das wirklich geschrieben hat? Vielleicht benutzte er eine Kurzschrift für eine generische Datei, z. 'Java Parsons_Decoder '? –

+0

Er hat uns ein Beispiel dafür gegeben, wie unsere Interaktionen mit unseren Programmen aussehen sollten. Hier ist ein Screenshot aus der Anleitung zu diesem Teil: https://drive.google.com/file/d/0BwujWiqVRKKsMzdRZDRPcTFQVkk/view?usp=sharing – thelonewanderer

1

Basierend auf Ihrer Beschreibung und dem von Ihnen angegebenen Link (der in der Frage enthalten sein sollte, kein Kommentar), möchte Ihr Prof Sie ein Programm schreiben, das den Inhalt einer Datei über "Standard in" (STDIN) akzeptiert als Shell-Befehlszeile im POSIX-Stil mit Umleitung.

Wenn dies in der Tat eine Voraussetzung ist, können Sie nicht nur die angegebene Datei als Argument lesen, sondern Ihr Programm so ändern, dass es von STDIN liest. Das Schlüsselkonzept hier ist, dass das "<" nicht für Ihre Programmargumentliste verfügbar ist. Es wird von der Shell (Bash, Ksh usw.), die den Java-Prozess ausführt, und einer "Pipe" -Einrichtung zwischen der Datei auf der rechten Seite und dem Prozess auf der linken Seite verbraucht. In diesem Fall ist der Prozess Ihr Java-Prozess, der Ihr Programm ausführt.

Versuchen Sie eine Suche nach „java STDIN“ tun, um ein paar Ideen zu bekommen, wie ein Java-Programm zu schreiben, das seinen Standard in lesen.

By the way, wenn Ihr Programm mit einem ArrayIndexOutOfBoundError stürzt ab, wenn mit Umleitung laufen Auf diese Weise hat es immer noch einen Fehler darin. Sie müssen den Fall prüfen und behandeln, in dem Sie 0 Dateiargumente haben, nachdem die Shell die Befehlszeile verarbeitet hat. Wenn Sie vollständige Markierungen wünschen, müssen Sie die Fehler- und Kantenfälle behandeln.

Verwandte Themen