Wie verwenden Sie “ls *.c" - Befehl in java?
Ich versuche, drucken Sie "*.C" - Dateien in java -
Ich benutze den code unten
public static void getFileList(){
try
{
String lscmd = "ls *.c";
Process p=Runtime.getRuntime().exec(lscmd);
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while(line!=null)
{
System.out.println(line);
line=reader.readLine();
}
}
catch(IOException e1) {
System.out.println("Pblm found1.");
}
catch(InterruptedException e2) {
System.out.println("Pblm found2.");
}
System.out.println("finished.");
}
P. S:- Es ist in Ordnung, für "ls" - Befehl.wenn ich mit "*" in jedem Befehl, alle nicht arbeiten. müssen die Ersetzung von "*" im Befehl in java.
UPDATE
Dank für Ihre Hilfe Jungs.
Nun brauche ich das gleiche Ergebnis für den Kommentar " ls -d1 $PWD/** "in java. es listet alle Verzeichnis-Namen mit dem vollständigen Pfad.
Vielen Dank für Ihre Zeit.
- Gibt es irgendeinen bestimmten Grund, warum Sie brauchen, um dies zu tun mit der
ls
Befehl? - Tut getRuntime.exec() im java versteht * oder nicht?
- Ja... ich muss zum drucken der Datei - /Verzeichnis-Namen mit vollständigen Pfad. also versuchte ich es mit diesem Beispiel.
- aktualisiert meine Antwort für dein update
- Re: update: Tue das nicht; sich nicht bewegen Torpfosten auf Ihre Frage. Wenn deine ursprüngliche Frage beantwortet wurde, akzeptieren, beantworten und versuchen zu lösen Ihre modifizierte problem mithilfe der Informationen, die Sie haben. Ziehen Sie nicht die Menschen, die noch beantwortet durch schreiben Ihr ganzes Programm. Wenn Sie wieder stecken, öffnen Sie eine neue Frage mit, wie weit Sie bekommen haben.
- Auch in Java-SE-7, wie es scheint, Sie haben eine API für Datei-globbing-Pfade: docs.oracle.com/javase/tutorial/essential/io/find.html . Platzhalter ist, was Sie nennen ausbau Pfad Muster (
*
,?
etc.) in einer shell.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht finden Sie diese zuverlässiger:
Files
sollte der Weg zu gehen.Alternativ können Sie
public File [] - Datei.listFiles(FilenameFilter filter)
Sie brauchen, um einen Befehl auszuführen, der die form "bash -c 'ls *.c'" ..., weil die java -
exec
Methoden nicht verstehen'*'
- Auswertung (globbing). (Die "bash -c" - form, die dafür sorgt, dass eine shell wird verwendet, um die Befehlszeile.)Allerdings kann man nicht einfach den oben stehenden Befehl als eine einzelne Zeichenfolge zu
Runtime.exec(...)
, weilexec
auch nicht verstehen, den richtigen Weg zu split Gebiete Zeichenkette, zitiert in es.Deshalb, um die
exec
das richtige zu tun, müssen Sie etwas tun, wie dieses:In anderen Worten, Sie müssen das argument, die Aufteilung von hand ...
Es sollte angemerkt werden, dass dieses Beispiel könnte auch implementiert werden, indem
FileMatcher
zum ausführen der "Platzhalter" und montieren Sie die Liste der Argumente aus den Ergebnissen. Aber ist schwierig, wenn Sie gehen, etwas anderes als das laufenls
... und IMO die Komplexität ist nicht gerechtfertigt.Die Java-Methode ist die Verwendung eines
FilenameFilter
. Ich angepasst ein code-Beispiel aus hier:update:
Für Ihre update, könnten Sie Durchlaufen eine
new File (".").listFiles();
- und Ausgabefile.getAbsolutePath()
auf jede Datei.Einem Beispiel Dateien auflisten, die seit Java 7.
Den
*
wird erweitert durch die shell. So verwenden Sie einen Dateinamen, glob, Sie würde rufen Sie diels
Kommandos über eine shell, z.B. wie folgt:Bearbeiten
Guter Punkt von @Stephen, über exec-Nichtumsetzung der split-Befehl. Zum ausführen der
ls -d1 $PWD/*
Sie können es so machen: