Bir kavanozun içindeki bir dosyayı değiştirme


88

Kavanozumun içindeki bir dosyayı değiştirmek istiyorum. Bunu uygulamamın içinden çıkarıp tekrar sarsmadan yapmak mümkün mü?

Değiştirmek istediğim dosya, çoğunlukla xml tabanlı yapılandırma dosyalarıdır.

Sarsıcı olmamakla ilgilenmemin nedeni, uygulamanın launch4j ile sarılmış olması, eğer açarsam .exe dosyasını tekrar oluşturamam.


1
ek dosyaları, dosya sisteminde geçici dosyalar oluşturmadan uygulama içinde tutmak istiyorum.
Hamza Yerlikaya

Bu çözümü deneyin stackoverflow.com/a/4837522/1853864 Kullandım ve sorunlarım çözüldü.
A. Magalhães

Lütfen kabul edilen mevcut cevabı kabul etmeyebilir misiniz? Negatif bir puanı var ve kesinlikle yardımcı olmuyor
Dici

Yanıtlar:


84

İçin useçeneği kullanabilirsinizjar

Java Öğreticilerinden:

jar uf jar-file input-file(s)

"Eklenmekte olan bir dosya ile aynı yol adına sahip halihazırda arşivde bulunan dosyaların üzerine yazılacaktır."

Bkz . Bir JAR Dosyasını Güncelleme .

Bütün kavanozu yeniden yapmaktan çok daha iyi. Bunu programınızın içinden çağırmak da mümkün görünüyor. Java'da Komut Satırını Çalıştırmayı Deneyin


Harika! Ama komik yolları eklediler. Mevcut olan com.etc.etc yerine IE Bitbucket.foo.bar
StarWind0

26

Vim'i kullanabilirsiniz:

vim my.jar

Vim, unziportamınızda olduğu sürece sıkıştırılmış metin dosyalarını düzenleyebilir .


3
Bu harika. Aradığınız dosyaya gidin ve Enter tuşuna basın. Dosyayı düzenleyin ve kaydetmek için wq yazın!
Michael Butler

Ayrıca zip, değişiklikleri kaydedebilmek için ortamınızda da ihtiyacınız vardır. Cevap için teşekkürler!
2018

11

Java jar dosyaları, zip dosyalarıyla aynı formattadır - bu nedenle, bir arşivi değiştirmenize izin veren bir zip dosyası yardımcı programınız varsa, ayağınızı kapıda tutarsınız. İkinci sorun, bir sınıfı veya başka bir şeyi yeniden derlemek istiyorsanız, muhtemelen kavanozu yeniden inşa etmeniz gerekecek; ancak bir metin dosyası veya bir şey (örneğin xml) yeterince kolayca değiştirilmelidir.


8

Birçoğunun söylediği gibi, JAR'ı yeniden taramadan JAR'daki bir dosyayı değiştiremezsiniz. Launch4J ile daha da kötüsü, JAR'ı değiştirdikten sonra EXE'yi yeniden oluşturmanız gerekir. Bu yüzden bu rotaya gitme.

JAR'a yapılandırma dosyalarını koymak genellikle kötü bir fikirdir. İşte benim önerim. Yapılandırma dosyanızı önceden belirlenmiş bazı konumlarda arayın (ana dizin, \ Program Dosyaları \ vb.). Bir yapılandırma dosyası bulursanız, onu kullanın. Aksi takdirde, JAR'daki birini yedek olarak kullanın. Bunu yaparsanız, konfigürasyon dosyasını önceden belirlenmiş konuma yazmanız yeterlidir ve program onu ​​alacaktır.

Bu yaklaşımın bir başka yararı, yazılımınızı yükseltirseniz değiştirilen yapılandırma dosyasının üzerine yazılmamasıdır.



2

Bu, kısa vadede uğraşmak istediğinizden daha fazla iş olabilir, ancak uzun vadede Ant'ı (veya Maven'i veya hatta Bazel'i) kullanmanın çok faydalı olacağından şüpheleniyorum. kavanozları elle inşa etmek yerine ) . Bu şekilde karınca dosyasına tıklayabilir (Eclipse kullanıyorsanız) ve kavanozu yeniden oluşturabilirsiniz.

Alternatif olarak, bu yapılandırma dosyalarının kavanozda hiç bulunmamasını isteyebilirsiniz - bu dosyaları düzenli olarak değiştirmeniz gerekeceğini düşünüyorsanız veya birden fazla tarafa dağıtılması gerekiyorsa, yapılandırma dosyası kavanoz hiç.


2
Kabul. Ancak, JAR'a "varsayılan" bir yapılandırma dosyası koymak isteyebilirsiniz, bu nedenle harici dosyaya bir şey olursa (bozuk, silinmiş vb.), Varsayılan bir yapılandırmaya geri dönebilirsiniz.
Thomas Owens

Doğru - yapılandırma dosyaları olmadan kaç uygulamanın çalışmaya devam edeceğini
bilmesem de

1

DFA'nın söylediklerini genişletmek gerekirse, bunun nedeni jar dosyasının bir zip dosyası gibi ayarlanmış olmasıdır. Dosyayı değiştirmek isterseniz, tüm girişleri okumalı, değiştirmek istediğinizi değiştirmeli ve ardından girişleri jar dosyasına geri yazmalısınız. Bunu daha önce yapmak zorunda kaldım ve bunu yapmanın tek yolu buydu.

DÜZENLE

Bunun, dosya akışları olan dahili Java jar dosyası düzenleyicileri kullandığını unutmayın. Eminim bunu yapmanın bir yolu vardır, tüm kavanozu hafızaya okuyabilir, her şeyi değiştirebilir ve sonra bir dosya akışına yazabilirsiniz. Bir zip başlığının ToC'sinin yazma sırasında tanımlanması gerektiğine inandığım için, 7-Zip ve diğerleri gibi yardımcı programların yaptığına inanıyorum. Ancak yanılıyor olabilirim.


1

Evet, SQLite kullanarak jar dosyasının içinden bir veritabanından okuyabilir veya veritabanına yazabilirsiniz, böylece onu ayıklamak ve sonra yeniden jar yapmak zorunda kalmazsınız, http://shoaibinamdar.in/blog/? p = 313

"jdbc: sqlite :: resource:" sözdizimini kullanarak jar dosyasının içinden bir veritabanını okuyabilir ve veritabanına yazabilirsiniz


1
Merhaba, stackoverflow'a hoş geldiniz. Kısaltmaları gönderinizden kaldırdım. Genel olarak kısa mesaj stili kısaltması burada uygun değildir. Bence bu cevabın, blogunuzdan biraz daha ayrıntıyı cevabın içine eklerseniz, cevabınızı okuyan biri blogu okumasa bile bir şeyler öğrenir veya yer değiştirirse, soruya iyi bir cevap olacağını düşünüyorum. gelecekteki bir tarihte başka bir URL'ye.
Flexo

1

TrueZip'e göz atın .

Sanal bir dosya sistemi API'si aracılığıyla tam olarak istediğinizi yapar (dosyaları bir jar dosyası içinde satır içinde düzenlemek için). Aynı zamanda iç içe geçmiş arşivleri de (kavanoz içindeki kavanoz) destekler.


1

Örn. Jar dosyasını ayıklayın. winrar ile ve CAVAJ kullanın:

Cavaj Java Decompiler, Java kaynak kodunu CLASS dosyalarından yeniden yapılandıran, grafiksel ücretsiz bir yardımcı programdır.

İhtiyacınız varsa eğitim videosu: https://www.youtube.com/watch?v=ByLUeem7680


iyi, "CAVAJ Kullan" yazılımı burada cevaptır. Bağlantı, herhangi bir ekstra açıklama gerekirse, sadece ek niteliğindedir.
Tomasz Mularczyk

0

Bu dosya .class, yani kaynak dosyası veya bildirim dosyası olmadığı sürece - yapabilirsiniz.


ve nasıl, ayıklamadan ve yeniden sarsmadan?
user85421

0

Bunu Windows'ta yapmanın en basit yolu WinRAR ile :

  1. Dosyaya sağ tıklayın ve içerik menüsünden "WinRAR ile Aç" ı seçin.
  2. Düzenlenecek dosyaya gidin ve varsayılan düzenleyicide açmak için üzerine çift tıklayın.
  3. Değişiklikleri yaptıktan sonra, kaydedip düzenleyiciden çıkın.
  4. Ardından arşivdeki dosyayı güncellemek isteyip istemediğinizi soran bir diyalog görünecektir - "Evet" i seçin ve JAR güncellenecektir.

0

Yukarıdaki cevapların çoğu bunu sınıf dosyası için yapamayacağınızı söylüyor.

Sınıf dosyasını güncellemek isteseniz bile bunu da yapabilirsiniz. Tek yapmanız gereken, sınıf dosyasını çalışma alanınızdan kavanozun içine sürükleyip bırakmaktır.

Sınıf dosyasındaki değişikliklerinizi doğrulamak isterseniz, bunu jd-gui gibi bir derleyici kullanarak yapabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.