2009-05-01 18 views
1

Ich habe eine Java-Klasse, die eine Bat-Datei verwendet, um Befehle auszuführen. Ich habe es jedoch in Eclipse IDE entwickelt. Es funktioniert gut darin. Aber wie ich es in einer JAR-Datei zu exportieren, schlägt es die bat-Datei zu finden, die aufgenommen wurde (gibt mir eine IOException)Bat-Datei in eine JAR-Datei einfügen

die Dateistruktur in Eclipse ist als folgt:.

Project1 
---->src 
------>com.myproj 
-------->BatFileRead.java 
----md.bat 
----ul.bat 

md. bat und ul.bat ist dieselbe Ebene wie src-Verzeichnis. Nach dem Rütteln verschwindet der src-Ordner.

Könnte mir jemand dabei helfen. Danke

Antwort

5

Um den Befehl auszuführen, müssen Sie die Bat-Datei danach extrahieren. Sie können keine ausführbaren Dateien ausführen, die sich in JAR-Dateien befinden. Grundsätzlich müssen Sie den Batch-Dateieintrag in der JAR-Datei als Eingabestream öffnen und die Daten auf einen Datenträger auf eine FileOutputStream kopieren. Sie können es erst ausführen, wenn es sich um eine eigenständige Datei im Dateisystem handelt. Wenn Sie bereits versuchen, es zu extrahieren, verwenden Sie wahrscheinlich getResource oder getResourceAsStream etwas falsch. Dies ist einfach zu tun, weil es davon abhängt, ob Sie ClassLoader.getResourceAsStream oder Class.getResourceAsStream aufrufen. Der erste verwendet ausschließlich absolute Pfade (implizit) und der zweite kann entweder absolute oder relative Pfade verwenden. Zum Beispiel, in Ihrem Fall würden Sie wollen:

BatFileRead.class.getResourceAsStream("/md.bat") 

oder

BatFileRead.class.getClassLoader().getResourceAsStream("md.bat") 

Haben Sie überprüft, dass die Fledermaus-Dateien definitiv enden in der JAR-Datei auf? Listen Sie einfach den Inhalt mit

jar tvf file.jar 

um zu sehen, was da drin ist.

+0

Ich habe es überprüft, die bat-Dateien sind da drin. Nun, ich benutze Runtime.getRuntime(). Exec ("md.bat"); um die Fledermaus-Datei in meiner Klasse auszuführen. –

+0

Nun, das wird sicherlich nicht funktionieren, wenn Sie sie nicht extrahieren. Die Windows-Befehlsshell versteht keine JAR-Dateien. –

0

Versuchen Sie, file.jar zu file.zip zu kopieren, und öffnen Sie file.zip (z. B. nur Doppelklick oder Verwendung von beispielsweise 7-Zip). Können Sie Ihre .bat Dateien finden? Wenn die Datei .bat nicht vorhanden ist, müssen Sie die Datei .bat zu Ihrem Eclipse-Projekt hinzufügen und in Eclipse neu erstellen. Wenn die .bat Datei gibt es, aber immer noch eine IOException Öffnung es von Ihnen .java Anwendung bekommen, dann bitte den Code-Schnipsel post die IOException Triggerung und wählen Sie bitte eine vollständige Auflistung der file.zip (erhalten Sie die Auflistung von file.zip-C:\testdir Extrahieren geben und Laufen dir /s C:\testdir in der Befehlszeile).

Bitte beachten Sie, dass Jon Skeet richtig ist, dass, obwohl es möglich ist, eine beliebige Datei zu öffnen, in der .jar Datei als InputStreamjava.lang.Class.getResourceAsStream und java.lang.ClassLoader.getResourceAsStream (siehe tutorial oder sie in der Java API docs finden), aber um eine .bat Datei auszuführen Im Inneren müssen Sie zunächst die Datei .jar extrahieren.

+0

java.io.IOException: Das Programm "ul.bat" kann nicht ausgeführt werden: CreateProcess error = 2, Das System kann die angegebene Datei unter java.lang.ProcessBuilder.start (ProcessBuilder.java:459) bei java.lang nicht finden. Runtime.exec (Runtime.java:593) bei java.lang.Runtime.exec (Runtime.java:431) bei java.lang.Runtime.exec (Runtime.java:328) bei com.myproj.BatFileRead. Ausführen (BatFileRead.java:38) Verwenden Sie dies, um die Bat-Datei auszuführen: exec = Runtime.getRuntime(). exec ("ul.bat"); –

1

Nun, das kann sehr gefährlich sein. Verwenden Sie Handschuhe, wenn Sie mit der BAT arbeiten. Sie beißen und ziemlich schmerzhaft. Versuchen Sie auch, Glas zu bekommen, das eine große Öffnung hat, obwohl die Fledermäuse fast durch jedes Loch passen.

Viel Glück, und versuchen Sie dies nicht zu Hause. Dies wird von Profis gemacht.

Verwandte Themen