2016-05-24 13 views
0

so habe ich ein Problem beim Lesen einer Datei, die über die Befehlszeile an mein Programm übergeben wird. Also heißt mein Programm printFile. Ich folgendes tun:Abrufen einer Datei von einem Dateinamen in der Befehlszeile (String [] Args)

java printFile text1.txt 

In meinem Haupt, ich habe:

try{ 
Scanner scan=new Scanner(args[0]); 
    while(scan.hasNextLine()) 
    { 
    System.out.println(scan.nextLine()); 
    } 
} 
catch(IOException e) 
{ 
e.printStackTrace(); 
} 

Wie kann ich richtig die Datei im durch die Befehlszeile übergeben werden?

+1

Sie erhalten die Dateinamen über 'args [0]'. Aber Sie sollten die [Javadoc] (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner (java.lang.String)) über was diese 'Scanner' lesen Konstruktor tut: Token die Zeichenkette selbst; Das wird nicht als Dateiname behandelt. –

+0

Wie lese ich den Text in der Datei, die in Args [0] ist? Wie in, wie würde ich den Dateipfad von nur args [0] erhalten? Aber ich sehe was du sagst. – Tom

+1

Sie tun etwas wie erstellen Sie einen 'FileInputStream'. –

Antwort

1

Scanner(String) erstellt einen Scanner aus der angegebenen Zeichenfolge. Aber Sie möchten den Inhalt einer Datei scannen, also möchten Sie den Scanner(File) Konstruktor verwenden.

Wechsel von dieser:

Scanner scan=new Scanner(args[0]); 

Um dies:

Scanner scan = new Scanner(new File(args[0])); 
+0

Aber macht das nicht einfach eine neue Datei mit dem gleichen Namen, weil args [0] eine Zeichenkette ist, keine Datei? Nicht die Datei param lesen? – Tom

+0

'File (String)' erstellt eine Java 'File' Instanz. Das ist nicht das Gleiche wie das Erstellen einer neuen Datei. Es erstellt keine neue Datei im Dateisystem. Ganz und gar nicht. Es erstellt eine Darstellung der Datei im Dateisystem unter dem angegebenen Pfad. – janos

+0

@Tom ist das klar genug jetzt? – janos