Копирование бинарного файла вне jar

У меня есть exe, упакованный внутри моего jar-файла, и я пытаюсь скопировать его во временное место, чтобы я мог запустить его с помощью Desktop.browse(), для этого я установил сканер с конструктором входного потока, используя class.getResourceAsStream, а затем с printwriter то все написал в файл. Возникшая проблема говорит о том, что exe недействителен. Я думаю, это из-за потери некоторых двоичных данных. Если кто-то может помочь, оставьте комментарий.

    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()); 

person Josh Sobel    schedule 21.03.2013    source источник
comment
Пожалуйста, покажите код. Make - короткое и приятное, только самое важное: sscce.org   -  person Christian Garbin    schedule 22.03.2013
comment
Сканер используется для чтения текста. PrintWriter используется для написания текста. EXE-файл - это двоичный файл. Используйте потоки.   -  person JB Nizet    schedule 22.03.2013
comment
Вам нужно скопировать файл .exe в новое место?   -  person Azad    schedule 22.03.2013
comment
getResourceAsStream () возвращает InputStream. Считайте байты из этого потока, пока не дойдете до конца, и запишите их в FileOutputStream.   -  person JB Nizet    schedule 22.03.2013


Ответы (1)


Как уже упоминалось, используйте потоки для двоичных данных. Commons io упрощает копирование потоков. Что-то типа:

InputStream in = getClass().getResourceAsStream("jd-gui.exe");
OutputStream out = new FileOutputStream("jd-gui.exe");
IOUtils.copy(in, out);
person user1016126    schedule 21.03.2013