Копирование бинарного файла за пределы банки
У меня есть файл exe, упакованный внутри моего файла JAR, и я пытаюсь скопировать его во временную папку, чтобы я мог запустить его с помощью Desktop.browse()
Для этого я настроил сканер с помощью конструктора входного потока, используя class.getResourceAsStream
, а затем с printwriter
написал что все в файл. Возникшая проблема говорит о том, что исполняемый файл недействителен. Я думаю, что это связано с потерей некоторых двоичных данных. Если кто-то может помочь, пожалуйста, оставьте комментарий.
Scanner sc = new Scanner(ClassBuilder.class.getResourceAsStream("jd-gui.exe"));
File copy = new File("C://users//Owner//Desktop//java//jd-gui.exe");
copy.createNewFile();
PrintWriter writer = new PrintWriter(copy);
while(sc.hasNextLine())
writer.println(sc.nextLine());
writer.flush();
writer.close();
sc.close();
Desktop.getDesktop().browse(copy.toURI());
1 ответ
Решение
Как уже упоминалось, используйте потоки для двоичных данных. Commons io позволяет легко копировать потоки. Что-то вроде:
InputStream in = getClass().getResourceAsStream("jd-gui.exe");
OutputStream out = new FileOutputStream("jd-gui.exe");
IOUtils.copy(in, out);