2009-06-26 23 views
16

kullanarak bir zip dosyasından ayıklanırken dosya izinlerini koruyun. Bir zip dosyasının içeriğini diske başarılı bir şekilde eklemek için java.util.Zip ve java.util.ZipEntry kullanıyorum. Bir * nix dosya sistemi üzerinde ayıklanırken ayarlanan dosya izinlerini korumak istiyorum.JDK 5 api

Bunu yapmak için bana "doğru" bir şekilde işaret eden var mı? Commons sıkıştır de

+0

Bunun eski bir yazı olduğunu biliyorum, ancak bu sorunu çözdünüz mü? Şu anda aynı sorunu yaşıyorum; Şimdiye kadar bir yürütülebilir dosyayı etkiliyormuş gibi görünüyor ... "el ile" unzip ettiğimde izin doğru – dm76

+0

Aslında çözmedim. Son yaklaşımım vektörü, zip dosyalarını manipüle etmek ve ne yaptığını belirlemek için apache'nin karınca görevini ayırmak olacaktı. –

+0

Ant bunu sadece 1.8'den beri Java.io.File'nin java 6'daki yeni özelliğini kullanarak yapabilir (aşağıdaki cevaba bakın) – dm76

cevap

1

Bu oldukça eski, ama burada bitti beri ...

Bu soru pek çok bilgi sağlayan: Esasen creating a jar file - preserving file permissions

yapabilirsiniz Zip/Jar değil MAĞAZA (unix) dosya izinleri Bu nedenle, kavanozunuzu ayıklarken onları koruyamazsınız (başlangıçta kavanoz oluşturulduğunda kayboldular). Arşivde korunan dosya izinlerine gereksinim duyarsanız ve geri yükleme yaparken geri yüklerseniz, çoğu Java oluşturma araçları tarafından da desteklenen alternatif .tar veya .tar.gz/.tar.bz2 biçimini dikkate almanız gerekir (Ant, Gradle , Maven ...)

1

Görünüş:

http://commons.apache.org/compress/

ve siz istediğiniz gibi TarArchiveEntry bakmak, bu dosya izinlerini korumak gerekir.

http://commons.apache.org/compress/apidocs/index.html

TarArchiveEntry entry = tarInput.getNextTarEntry(); 

Ben doğru izinleri tutmak aslında imkansız olduğunu düşünüyorum

+0

, TarArchiveEntry, ziplerde ve tar dosyalarında çalışıyor mu? aynı değiller, değil mi? – Cheeso

+0

Cheeso ile aynı fikirdeyim - bu zip dosyaları ile ne ilgisi var? – dm76

+0

Ayrıca ZipArchiveEntry https://commons.apache.org/proper/commons-compress/zip.html – Josejulio

8

... Ben Commons delirdi düşünüyorum.

İzinler OS'ye çok özeldir: POSIX dosya izinleri kullanıcının dosya sahibi, grup ve diğerleri için bir dosya okuyabileceğini, yazabileceğini veya yürütebileceğini ayarlamasına izin verirken, NTFS dosya sistemi benzer bir sisteme sahiptir ancak kavram Bir yürütme izni için geçersizdir. Ve erken FAT/FAT32 dosya syste, hiç dosya izinleri yok (salt okunur özniteliğinin bir parçası).

söyledi

, Java 6 yeni java vardır .... java yatan OS bağlı olarak yeni oluşturulan (açılmış) dosyaları düzgün izni ayarlamak için çapraz platform, bu zor olurdu olmak .io.Filiteyi ayarlamanıza izin verir (setExecutable(), setReadable(), vb. gibi yöntemlerle) (bkz. http://java.sun.com/javase/6/docs/api/java/io/File.html)

Bunlar bana yardımcı oldu, özellikle setExecutable() hangisi benim için önemliydi Linux dosya sisteminde çalıştırılabilir dosyaları açmak zorunda kaldığınızda. Ve hangi işletim sistemi üzerinde çalıştığınızı anlamaya çalışmak zorunda değilsiniz çünkü bu yöntem, Windows veya diğer sistemler altında çalıştırılabilir dosyalar kavramı olmadan çalıştırıyorsa hiçbir şey yapmaz.

+1

Bu iş parçacığının çok eski olduğunu biliyorum ama cevabınız bana yardımcı oldu. Mac Os üzerinde bir *** uygulaması ayıklamak için çalışıyordum ama sonuçta uygulama başlatılacak, setExecutable() yöntemini kullanarak içindeki gerçek başlatıcı dosyasının izinlerini değiştirdim ve mükemmel çalışıyor gibi görünüyor! Yardım için teşekkürler :) –