Саморазрывающийся и перезагружаемый файл jar во время выполнения

В настоящее время я работаю над программой для составления сидячих диаграмм для класса моего учителя. Я поместил все файлы данных в банку. Они считываются и заносятся в таблицу. После запуска основной функции программы она обновляет файлы, чтобы они соответствовали значениям таблиц. Я знаю, что мне нужно взорвать банку, а затем перезагрузить ее во время выполнения, чтобы редактировать файлы, но я не могу найти объяснения того, как перезагружать во время выполнения. У кого-нибудь есть идеи?


person Taxes45    schedule 04.01.2012    source источник


Ответы (2)


Краткий ответ:

Поместите файлы данных вне двоичного файла и отправьте вместе с JAR в отдельную папку.

Длинный:

Похоже, вы подходите к проблеме не с той стороны. Файл JAR представляет собой что-то вроде исполняемого файла (.exe) на платформе Windows — двоичный файл только для чтения, содержащий код.

Вы можете (хотя это плохая практика) поместить некоторые ресурсы, такие как файлы данных, мультимедиа и т. д., внутрь JAR (как вы можете внутри .exe). Но лучшим решением было бы разместить эти ресурсы вне бинарного файла, чтобы вы могли переключать их без перекомпиляции/пересборки.

Если вам нужно изменять ресурсы «на лету» во время работы приложения, у вас практически нет выбора. Файлы данных должны находиться вне двоичного файла. Опять же, вы никогда не увидите, как файл Windows .exe изменяет себя во время работы.

person Tomasz Nurkiewicz    schedule 04.01.2012
comment
Спасибо. Я просто надеялся избежать необходимости делать это из соображений безопасности, потому что я использую только файлы .txt. Я не лучший в программировании безопасности. - person Taxes45; 04.01.2012
comment
@Taxes45 .jar файлы в любом случае никоим образом не защищены - person Samuel Harmer; 04.01.2012
comment
Для людей, которым я даю это, это было бы более безопасным, чтобы они случайно ничего не удалили. Пульс, создающий внутренний файл по умолчанию, - это проблема с размером моего кода. Я программирую на Java всего два года, и это был мой первый язык. Я мало что знаю. - person Taxes45; 04.01.2012
comment
Мой учитель не силен в компьютерах. Вот почему я сделал эту программу для нее. - person Taxes45; 04.01.2012

Томаш прав, что это плохая практика, но это возможно.

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

  • JarInputStream или ZipInputStream для чтения содержимого файла JAR.
  • Получите JarEntry для соответствующего файла
  • Прочитайте и измените содержимое по своему желанию
  • JarOutputStream или ZipOutputStream для обратной записи содержимого

Убедитесь, что вы не читаете ресурс через путь к классам и что он поступает из файла на диске/в сети.

person Dan Hardiker    schedule 04.01.2012