У меня есть Java jar-файл, завернутый в исполняемый файл. Он работает отлично, если дважды щелкнуть.Duplicate file функционирует иначе, чем оригинал
Я попытался скопировать файл по байтам и переписать его в новый исполняемый файл.
Когда я пытаюсь запустить эту новую копию, я получаю окно с сообщением об ошибке:
Код я использовал, чтобы скопировать байты файла следующим образом:
import java.nio.file.*;
import java.io.*;
public class Exec {
public static void main(String args[])throws Exception {
byte[] data = Files.readAllBytes(Paths.get("C:\\Users\\Dziugas\\Desktop\\Darts.exe"));
File x = new File("C:\\Users\\Dziugas\\Desktop\\file.exe");
if(!x.exists())
x.createNewFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(x, true));
for(byte b: data)
writer.write(b);
writer.close();
}
}
Размер копия такая же, как и оригинал. Это заставляет меня задуматься о API ввода/вывода Java. Я думал, что все эти байты означают именно это?
Я попытался удалить копию и запустить код еще раз, но ошибка сохранилась. Любые идеи о том, что я делаю неправильно?
Doe преобразования в уголь применяется ко всем потокам байт или просто метод в классе Files? – Dziugas
@Dziugas Не применяется ни к байтовым потокам, ни к файлам. Это * ваш код *, который вызывает 'Writer.write (char)' с 'byte' (неявным образом выставляя байта на символ). – immibis