2015-05-17 5 views
2

Мне нужно запустить пакетный файл, который уже находится внутри моего пакета Java. Ниже мой код.Как запустить пакетный файл внутри пакета Java с помощью Java-кода?

public class ScheduleTest { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException { 

     Process exec = Runtime.getRuntime().exec("test.bat"); 
    } 

} 

test.bat расположен внутри scheduletest пакета, где ScheduleTest класс также находится. Ниже представлена ​​структура пакета.

enter image description here

Как я могу сделать это случиться?

EDIT

Это содержимое моего пакетного файла

echo hello; 
pause 

ответ

1

Обычно, когда ваш IDE компилирует источники, test.bat должны быть помещены в папку, которая содержит двоичные файлы, сохраняя то же самое структура упаковки, например bin/scheduletest/test.bat. Предполагая это, вы можете загрузить пакетный файл, используя загрузчик классов:

ClassLoader loader = ScheduleTest.class.getClassLoader(); 
URL resource = loader.getResource("scheduletest/test.bat"); 
Process exec = Runtime.getRuntime().exec(resource.getPath()); 

Чтобы прочитать выход процесса, вы должны будете получить свой входной поток:

InputStream inputStream = exec.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 
String line = null; 
while((line = br.readLine()) != null) { 
    System.out.println(line); 
} 

Однако это намного лучше для этого есть каталог ресурсов, так как процедуры автоматической сборки (например, Ant или Maven) будут удалять этот файл при очистке.

+0

Я бы не поместил его непосредственно в двоичные файлы IDE, так как вы можете обнаружить, что очистка вашего проекта автоматически удалит ваш пакетный файл. Вы хотите, чтобы IDE или система сборки копировали его в 'bin' как часть процесса построения. – ktorn

+0

Спасибо. Это сработало. Однако он не показывает мне никакого командного файла. Это случилось, даже я дал ему полный путь к пакетному файлу. Я обновил свой вопрос с содержимым пакетного файла. –

+0

@JustCause Вы не читаете из выходного потока процесса. См. Мой обновленный ответ. – manouti

1

Если вам действительно не нужен пакетный файл в папке исходного кода java, я бы просто переместил его в корень вашего проекта или, еще лучше, создаст папку/resources и поместил его туда.

Затем вы можете создать систему IDE или сборки, чтобы скопировать ее на ваш bin/build. Затем ваш существующий код может работать правильно.