Копирование бинарного файла за пределы банки

У меня есть файл 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);
Другие вопросы по тегам