Dateien Zippen und wieder heraus lesen?

Thallius

Top Contributor
Hi,

Ich habe viele Verzeichnisse mit Hunderten von nicht komprimieren Bilddateien (DICOM Format). Um Platz zu sparen würde ich diese gerne Zippen. Da die Bilder nicht Ansicht geändert werden dürfen (Medizinprofukte-Gesetz) darf ich sie also nicht in sich packen. Also bleibt der Weg über das Zippen. Nun brauche ich aber trotzdem von meiner Java Applikation heraus hin und wieder zugriff auf diese Bilder. Das muss nicht schnell sein.

Meine Frage also:

Gibt es ein Java Framework das mir alle Dateien mit gleicher Endung (zur Not kann ich natürlich auch durch das Verzeichnis iterieren und ein Array mit filenamen erstellen) in eine .zip Datei packt und mit dem ich dann trotzdem über ein File Open auf die Dateien zugreifen kann (nur lesend)? Oder zur Not muss ich das .zip eben in einen temp. Ordner entpacken um dann auf die Bilder zuzugreifen.

Gruß

Claus
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
1. Ja, du musst die Bilder temporär entzippen, da bleibt nichts anderes übrig und
2. Sollte alles nötige in folgenden In-Java-Bibliotheken zu finden sein:

2.1 java.io
2.1.1 java.io.FileInputStream
2.1.2 java.io.FileOutputStream
2.1.3 java.io.File

2.2 java.util.zip
2.2.1 java.util.ZipInputStream
2.2.1 java.util.ZipEntry
2.2.1 java.util.ZipException

Ein Beispiel - Zippen:
Java:
public static void main( String[] args ) {
	final int bufLength = 1024;
	byte[] buffer = new byte[ bufLength ];
	int readReturn = 0;
	File source = null, target = null;
	FileInputStream in = null;
	ZipOutputStream out = null;
	if ( args.length != 2 ) {
		System.err.println( "java Zip quelle ziel" );
		System.exit( -1 );
	}
	source = new File( args[ 0 ] );
	if ( !source.exists() ) {
		System.err.println( "Datei " + args[ 0 ] + " nicht gefunden" );
		System.exit( -1 );
	}
	target = new File( args[ 1 ] );
	if ( !target.exists() ) {
		System.err.println( "Datei " + target.getPath() + " existiert bereits" );
		System.exit( -1 );
	}
	try {
		in = new FileInputStream( source );
		out = new ZipOutputStream( new FileOutputStream( target ) );
		out.setComment( "Generated by Zip" );
		out.setMethod( out.DEFLATED );
		out.setLevel( 9 );
		out.putNextEntry( new ZipEntry( source.getName() ) );
		do {
			readReturn = in.read( buffer );
			if ( readReturn != -1 )
				out.write( buffer, 0, readReturn );
		}
		while ( readReturn != -1 );
		out.closeEntry();
		out.finish();
		out.close();
	}
	catch ( ZipException ze ) {
		System.err.println( "ZipException: " + ze.getMessage() );
	}
	catch ( Exception e ) {
		System.err.println( "Fehler: " + e.getMessage() );
	}
}

Ein Beispiel - Unzippen:
Java:
public static void main( String[] args ) {
	final int bufLength = 1024;
	byte[] buffer = new byte[ bufLength ];
	int readReturn = 0;
	File source = null, target = null;
	ZipInputStream in = null;
	FileOutputStream out = null;
	...
	try {
		in = new ZipInputStream( new FileInputStream( source ) );
		ZipEntry zipentry = in.getNextEntry();
		if ( args.length >= 2 )
			target = new File( args[ 1 ] );
		else
			target = new File( zipEntry.getName() );
		...
		out = new FileOutputStream( target );
		do {
			readReturn = in.read( buffer );
			if ( readReturn != -1 )
				out.write( buffer, 0, readReturn );
		}
		while ( readReturn != -1 );
		in.close();
		out.close();
	}
	catch ( ZipException ze ) {
		System.err.println( "ZipException: " + ze.getMessage() );
	}
	catch ( Exception e ) {
		System.err.println( "Fehler: " + e.getMessage() );
	}
}
 
Zuletzt bearbeitet:

lawila

Gesperrter Benutzer
ich frag mal lieber nach bevor ich eine für dich unqualifizierte antwort gebe

du willst also um plattenplatz zu sparen deine dateien komprimieren ? - gut, mit java kein thema und in der SE-API enthalten

muss dabei die ordner-struktur auf der platte erhalten bleiben oder ist es möglich bestimmte unter-ordner oder ganze verzeichnis-bäume zu komprimieren ? - mit ein paar File-ops ebenfalls kein thema

besteht zugriff nur über deinen java-code oder muss direkter zugriff auch für andere programme bestehen bleiben ? - das dürfte je nach anforderung schon fast das aus für die idee bedeuten

wie dringend ist das ganze und welchen vorteil erhoffst du dir ? - erlich, plattenplatz ist heutzutage ziemlich billig geworden, es gibt teilweise datenträger mit weniger als 20ct pro gigabyte (ich selbst hab 2x 2TB-platten im system für die ich jeweils 100€ gezahlt habe) ... und komprimierung bringt auch bei guten algos wie 7z in der regel irgendwas zwischen 30% und 50% (so im schnitt .. es gibt teilweise auch raten bis 70% ... das wird dann aber schon sehr rechenaufwändig und man braucht "gute" inputdaten)
ist es wirklich so dringend notwendig sich auf kosten zusätzlichen rechenaufwandes und damit einen schlechteren kosten/nutzen-faktor zusätzlichen speicherplatz zu erkaufen statt einmal in zusätzlichen platten-platz zu investieren, die "produktivität" jedoch gleich zu halten ?


ich weis, klingt alles eher theoretisch als wirklich wirtschaftlich, und ist bei heutiger rechenpower auch eher nebensächlich (ich bin der meinung es gibt mitlerweile sogar verschiedene kompresions-algos in hardware-implementierung) ... aber zieht man es wirklich mal so auf oder vergrößert den maßstab von einem pc auf ein paar tausend ... dann kommt man schon ins grübeln was die effizientere lösung ist
 

Thallius

Top Contributor
Ich kann hier leider nicht in die Details gehen, da das ganze zur Zeit noch confidential ist und auscbetriebswirtschaftlichen Gründen nicht vor der Release public gemacht werden darf.

Aber nur ein paar allgemeine Fakten die dir vielleicht klar machen warum ich so handeln muss.

In Deutschland gibt es ein Medizinproduktegesetzt. Dieses gesetzt besagt, dass jegliche Hard- und Software welche zu medizinischen Zwecken eingesetzt wird validiert sein muss. Man kann also nicht einfach eine Festplatte bei Amazon bestellen sondern muss eine speziell validierte Platte kaufen. Da kann so eine 500MG Platte schnell mal weit über 1000 Euro kosten. Auch kann man nicht mal eben einfach eine neue Festplatte in einen Computer einsetzen die für medizinische Zwecke benutzt werden. Das ist eine Änderung an einer medizinischen Hardware und das Gerät muss danach neu abgenommen werden und die Abnahme von TÜV oder den KV's überprüft werden.

Gruss

Claus


Gesendet von iPad mit Tapatalk
 
Zuletzt bearbeitet:

fischefr

Aktives Mitglied
Kleiner Hinweis:
Es gibt neben den bekannten zip-Dateien, die mehrere Dateien enthalten (können) auch noch das gnu-zip-Format. Damit wird der Inhalt einer einzelnen Datei verlustfrei komprimiert. Das sollte dann so gesehen auch ok sein vermute ich mal, weil aus der gz-Datei dann jederzeit der Originalinhalt reproduziert werden kann. Wäre für deine Zwecke denke ich auch sehr gut geeignet. Die Bibliothek hierfür ist ebenfalls bereits im Java-JDK dabei. Sie dir mal die Klasse an - einfach statt InputStream diese hier verwenden und du erhälst beim Einlesen den unkomprimierten Inhalt:

GZIPInputStream (Java Platform SE 8 )
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13
L Generieren Zufallsdaten aus CSV dateien Allgemeine Java-Themen 11
G Namensgebung der Dateien von FileHandler Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben