Saya ingin mengubah file di dalam toples saya. Apakah mungkin melakukan ini tanpa mengekstrak dan mengguncang ulang, dari dalam aplikasi saya?
File yang ingin saya modifikasi adalah file konfigurasi, kebanyakan berbasis xml.
Alasan saya tertarik untuk tidak menghapusnya adalah bahwa aplikasi dibungkus dengan launch4j jika saya unjar, saya tidak dapat membuat file .exe lagi.
Jawaban:
Anda dapat menggunakan
u
opsi untukjar
Dari Tutorial Java:
"Semua file yang sudah ada di arsip dengan nama jalur yang sama dengan file yang ditambahkan akan ditimpa."
Lihat Memperbarui File JAR .
Jauh lebih baik daripada membuat seluruh toples lagi. Memanggil ini dari dalam program Anda juga terdengar mungkin. Coba Jalankan Command Line di Java
sumber
Anda dapat menggunakan Vim:
vim my.jar
Vim dapat mengedit file teks terkompresi, yang Anda miliki
unzip
di lingkungan Anda.sumber
zip
di lingkungan Anda, untuk dapat menyimpan perubahan. Terima kasih atas jawabannya!File jar Java memiliki format yang sama dengan file zip - jadi jika Anda memiliki utilitas file zip yang memungkinkan Anda memodifikasi arsip, Anda dapat melakukannya. Masalah kedua adalah, jika Anda ingin mengkompilasi ulang kelas atau sesuatu, Anda mungkin hanya perlu membuat ulang toples; tetapi file teks atau sesuatu (xml, misalnya) harus cukup mudah dimodifikasi.
sumber
Seperti yang dikatakan banyak orang, Anda tidak dapat mengubah file di JAR tanpa membatalkan JAR. Lebih buruk lagi dengan Launch4J, Anda harus membangun kembali EXE setelah Anda mengubah JAR. Jadi jangan ikuti rute ini.
Biasanya tidak baik untuk meletakkan file konfigurasi di JAR. Ini saran saya. Cari file konfigurasi Anda di beberapa lokasi yang ditentukan sebelumnya (seperti direktori home, \ Program Files \ etc). Jika Anda menemukan file konfigurasi, gunakanlah. Jika tidak, gunakan yang ada di JAR sebagai fallback. Jika Anda melakukan ini, Anda hanya perlu menulis file konfigurasi di lokasi yang telah ditentukan dan program akan mengambilnya.
Manfaat lain dari pendekatan ini adalah file konfigurasi yang dimodifikasi tidak akan ditimpa jika Anda memutakhirkan perangkat lunak Anda.
sumber
Tidak yakin apakah ini membantu, tetapi Anda dapat mengedit tanpa mengekstrak:
Periksa posting blog untuk lebih jelasnya http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
sumber
Ini mungkin lebih banyak pekerjaan daripada yang ingin Anda tangani dalam jangka pendek, tetapi saya kira dalam jangka panjang akan sangat bermanfaat bagi Anda untuk menggunakan Ant (atau Maven , atau bahkan Bazel ) daripada membuat toples secara manual. . Dengan begitu Anda cukup mengklik file ant (jika Anda menggunakan Eclipse) dan membangun kembali jar.
Atau, Anda mungkin ingin tidak memiliki file konfigurasi ini sama sekali di jar - jika Anda berharap perlu mengganti file ini secara teratur, atau jika seharusnya didistribusikan ke banyak pihak, file konfigurasi tidak boleh menjadi bagian dari toples sama sekali.
sumber
Untuk memperluas apa yang dikatakan dfa, alasannya adalah karena file jar diatur seperti file zip. Jika Anda ingin mengubah file, Anda harus membaca semua entri, memodifikasi yang ingin Anda ubah, dan kemudian menulis entri kembali ke dalam file jar. Saya harus melakukan ini sebelumnya, dan itulah satu-satunya cara saya dapat melakukannya.
EDIT
Perhatikan bahwa ini menggunakan editor file jar internal ke Java, yang merupakan aliran file. Saya yakin ada cara untuk melakukannya, Anda dapat membaca seluruh toples ke dalam memori, memodifikasi semuanya, lalu menulis kembali ke aliran file. Itulah yang saya percaya utilitas seperti 7-Zip dan lainnya lakukan, karena saya percaya ToC dari tajuk zip harus ditentukan pada waktu penulisan. Namun, saya bisa saja salah.
sumber
Ya Anda bisa, dengan SQLite Anda dapat membaca atau menulis ke database dari dalam file jar, sehingga Anda tidak perlu mengekstrak dan kemudian memasukkannya kembali, ikuti posting saya http://shoaibinamdar.in/blog/? p = 313
menggunakan sintaks "jdbc: sqlite :: resource:" Anda akan dapat membaca dan menulis ke database dari dalam file jar
sumber
Lihat TrueZip .
Itu persis seperti yang Anda inginkan (untuk mengedit file secara inline di dalam file jar), melalui API sistem file virtual. Ini juga mendukung arsip bersarang (toples di dalam toples) juga.
sumber
Ekstrak file jar untuk ex. dengan winrar dan gunakan CAVAJ:
Cavaj Java Decompiler adalah utilitas freeware grafis yang merekonstruksi kode sumber Java dari file CLASS.
berikut adalah video tutorial jika Anda membutuhkan: https://www.youtube.com/watch?v=ByLUeem7680
sumber
Selama file ini bukan .class, yaitu file sumber daya atau file manifes - Anda bisa.
sumber
Cara termudah yang saya temukan untuk melakukan ini di Windows adalah dengan WinRAR :
sumber
sebagian besar jawaban di atas mengatakan Anda tidak dapat melakukannya untuk file kelas.
Bahkan jika Anda ingin memperbarui file kelas, Anda juga dapat melakukannya. Yang perlu Anda lakukan adalah menyeret dan melepas file kelas dari ruang kerja Anda di dalam jar.
Jika Anda ingin memverifikasi perubahan Anda di file kelas, Anda dapat melakukannya menggunakan dekompiler seperti jd-gui.
sumber