2009-06-26 15 views
16

Sto usando java.util.Zip e java.util.ZipEntry per aggiungere con successo il contenuto di un file zip su disco. Vorrei mantenere le autorizzazioni sui file impostate durante l'estrazione su un sistema di file * nix.Mantenere i permessi dei file durante l'estrazione da un file zip usando JDK 5 api

Qualcuno può indicarmi il modo "corretto" per farlo?

+0

So che questo è un post piuttosto vecchio ma hai risolto il problema? Sto avendo lo stesso problema adesso; Sembra che solo un file eseguibile possa interessare fino a quel momento ... quando lo decomprimo "a mano" il permesso è corretto – dm76

+0

Non l'ho risolto in realtà. Il mio ultimo vettore di approccio sarebbe stato quello di separare il compito della formica di apache per manipolare i file zip e determinare cosa stavano facendo. –

+0

Ant può farlo solo dal 1.8, utilizzando la nuova funzionalità di Java.io.File in java 6 (vedere la mia risposta di seguito) – dm76

risposta

1

Questo è piuttosto vecchio, ma da quando ho finito qui ...

Questa domanda fornisce un sacco di informazioni: creating a jar file - preserving file permissions

In sostanza, non si può Store (Unix) i permessi dei file in Zip/Jar file, quindi non puoi conservarli quando estrai il tuo barattolo (sono stati persi quando il barattolo è stato creato per cominciare). Se sono necessarie le autorizzazioni di file conservate nell'archivio e ripristinate durante l'estrazione, è necessario considerare il formato alternativo .tar o .tar.gz/.tar.bz2, che è anche supportato nativamente dalla maggior parte degli strumenti di compilazione Java (Ant, Gradle , Maven ...)

1

Guardate Commons Compress:

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

e guardare TarArchiveEntry, che dovrebbe preservare i permessi dei file come si desidera.

TarArchiveEntry entry = tarInput.getNextTarEntry(); 

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

penso che ho passato Commons pazza ...

+0

TarArchiveEntry funziona su zip e file tar? non sono la stessa cosa, giusto? – Cheeso

+0

Sono d'accordo con Cheeso - cosa c'entra questo con i file zip? – dm76

+0

C'è anche ZipArchiveEntry https://commons.apache.org/proper/commons-compress/zip.html – Josejulio

8

penso che in realtà è impossibile tenere correttamente le autorizzazioni.

Permessi sono molto OS specifica: mentre i permessi dei file POSIX consentono all'utente di impostare se è possibile leggere, scrivere o eseguire un file per il proprietario del file, il gruppo e gli altri, il file system NTFS ha un sistema simile, ma il concetto perché un permesso di esecuzione è inesistente. E il primo sistema di file FAT/FAT32, non ha affatto permessi di file (una parte dall'attributo di sola lettura).

Essere cross-platform, sarebbe difficile per Java per impostare l'autorizzazione correttamente i file appena creati (decompressi) a seconda del sistema operativo sottostante ....

Detto questo, Java 6 ha un nuovo java .io.File class che ti permette di impostare permessi (con metodi come setExecutable(), setReadable(), ecc ... vedi http://java.sun.com/javase/6/docs/api/java/io/File.html)

Questi mi hanno aiutato molto, specialmente il setExecutable() che era il mio principale interesse quando si devono decomprimere gli eseguibili su un file system Linux. E non devi preoccuparti di capire quale sistema operativo stai utilizzando, poiché il metodo non farà nulla se si esegue Windows o altri sistemi senza il concetto di file eseguibili.

+1

So che questa discussione sta diventando piuttosto vecchia ma la tua risposta mi ha aiutato. Stavo cercando di estrarre un'app *** su Mac Os, ma l'applicazione risultante si avviava, ho modificato le autorizzazioni del file di avvio effettivo al suo interno utilizzando il metodo setExecutable() e sembra che funzioni perfettamente! Grazie per l'aiuto :) –

Problemi correlati