Помещение файла bat внутри файла jar - PullRequest
1 голос
/ 01 мая 2009

У меня есть класс Java, который использует bat-файл для выполнения команд. Однако я разработал его в Eclipse IDE. Там все отлично работает. Но когда я экспортирую его в файл JAR, он не может найти файл Bat, который был включен. (Дает мне IOException)

Структура файла в Eclipse выглядит следующим образом :

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

md.bat и ul.bat находятся на том же уровне, что и каталог src. После сотрясения папка src исчезает.

Может ли кто-нибудь помочь мне с этим. Спасибо

Ответы [ 3 ]

5 голосов
/ 01 мая 2009

Чтобы выполнить команду, вам придется извлечь файл bat впоследствии. Вы не можете запускать исполняемые файлы, которые находятся внутри jar-файлов. В основном вам нужно открыть запись командного файла в jar-файле как поток ввода и скопировать данные в FileOutputStream на диске. Вы не сможете выполнить его до тех пор, пока он не станет подходящим автономным файлом в файловой системе.

Если вы уже пытаетесь извлечь его, скорее всего, вы используете getResource или getResourceAsStream немного неправильно. Это легко сделать, потому что это зависит от того, звоните ли вы ClassLoader.getResourceAsStream или Class.getResourceAsStream. Первый всегда использует абсолютные пути (неявно), а второй может использовать абсолютные или относительные пути. Например, в вашем случае вы хотите:

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

или

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

Вы проверили, что файлы bat определенно попадают в файл jar? Просто перечислите содержимое с помощью

jar tvf file.jar

чтобы посмотреть, что там.

1 голос
/ 01 мая 2009

Ну, это может быть очень опасно. Обязательно используйте перчатки при работе с НИМ. Они кусаются и довольно болезненные. Также попробуйте получить банку с достаточно большим отверстием, хотя летучие мыши поместятся почти в любую дыру.

Удачи, и не пытайтесь делать это дома. Это делают профессионалы.

0 голосов
/ 01 мая 2009

Попробуйте скопировать file.jar в file.zip и открыть file.zip (например, просто дважды щелкнув мышью, или, например, 7-Zip). Можете ли вы найти свои .bat файлы внутри? Если файл .bat отсутствует, вам нужно добавить файл .bat в проект Eclipse и перестроить в Eclipse. Если файл .bat есть, но вы все еще получаете IOException, открывающий его из вашего приложения .java, пожалуйста, опубликуйте фрагмент кода, вызывающий IOException, и, пожалуйста, дайте полный список file.zip ( распечатка путем извлечения file.zip в C:\testdir и запуска dir /s C:\testdir в командной строке).

Обратите внимание, что Джон Скит прав, что, хотя можно открыть любой файл в файле .jar как InputStream, используя java.lang.Class.getResourceAsStream и java.lang.ClassLoader.getResourceAsStream (см. Учебник или найдите их в Java API документах ), но чтобы выполнить файл .bat внутри, сначала нужно извлечь файл .jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...