Ich wollte ein Verzeichnis mit Dateien und Unterverzeichnissen darin komprimieren. Ich tat dies und funktionierte gut, aber ich bekomme und ungewöhnliche und neugierige Dateistruktur (zumindest sehe ich es so). DieseMerkwürdige Strukturdatei beim Zippen eines Verzeichnisses mit Java
ist die erstellte Datei: Wenn ich darauf klicke, sehe ich ein „leeres“ Verzeichnis wie folgt aus: aber wenn ich diese entpacken ich diese Dateistruktur sehen (nicht alle Namen sind exacly, wie sie in gezeigt sind, das Bild unten):
|mantenimiento
|Carpeta_A
|File1.txt
|File2.txt
|Carpeta_B
|Sub_carpetaB
|SubfileB.txt
|Subfile1B.txt
|Subfile2B.txt
|File12.txt
Mein Problem ist, irgendwie, dass der Ordner „mantenimiento“ ist, wo ich aus (das Verzeichnis bin zippping, die ich zip wollen), und ich möchte nicht dort sein, also wenn ich entpacken die gerade erstellte .zip-Datei Ich will es mit dieser Dateistruktur (das sind die Dateien und Verzeichnisse im "mantenimiento" -Verzeichnis): und die andere Sache ist, wenn ich auf die .zip-Datei klicke Ich möchte die Dateien sehen a nd Verzeichnisse wie das oben gezeigte Bild.
Ich weiß nicht, was ist falsch mit meinem Code, ich habe gesucht, aber habe keinen Verweis auf, was mein Problem sein könnte.
Hier ist mein Code:
private void zipFiles(List<File> files, String directory) throws IOException
{
ZipOutputStream zos = null;
ZipEntry zipEntry = null;
FileInputStream fin = null;
FileOutputStream fos = null;
BufferedInputStream in = null;
String zipFileName = getZipFileName();
try
{
fos = new FileOutputStream(File.separatorChar + zipFileName + EXTENSION);
zos = new ZipOutputStream(fos);
byte[] buf = new byte[1024];
int len;
for(File file : files)
{
zipEntry = new ZipEntry(file.toString());
fin = new FileInputStream(file);
in = new BufferedInputStream(fin);
zos.putNextEntry(zipEntry);
while ((len = in.read(buf)) >= 0)
{
zos.write(buf, 0, len);
}
}
}
catch(Exception e)
{
System.err.println("No fue posible zipear los archivos");
e.printStackTrace();
}
finally
{
in.close();
zos.closeEntry();
zos.close();
}
}
hoffen, ihr mir einen Hinweis geben können, was ich falsch mache oder was ich fehle.
Vielen Dank.
Btw, das Verzeichnis, das ich der Methode gebe, wird nie benutzt. Der andere Parameter, den ich gebe, ist eine Liste von Dateien, die alle Dateien und Verzeichnisse aus dem Verzeichnis C: \ mantenimiento enthält.
können Sie GetZipFileName-Methode freigeben. – Sanj
Diese Methodenimplementierung ist sehr einfach: private String getZipFileName method() { \t String zipName; \t \t Datum currentDate = newDate(); \t \t SimpleDateFormat Formatierer = SimpleDateFormat ("yyyy_MM_dd_HH-mm-ss"); \t \t zipName = formatter.format (aktuellerDatum); \t \t Rückgabe zipName; \t } –