Ich habe eine Funktion, die eine Zip-Datei aus einer Liste von Dateien erstellt. Ist es möglich, die Zip-Datei zurückzugeben, ohne dass sie auf der Festplatte gespeichert wird? Ich brauche die Datei, da ich die Zip-Datei als Parameter für eine andere Funktion verwenden muss. Ich bin mir nicht sicher, ob der ByteStream eine Option für mich wäre.Zip-Datei aus ZipOutputStream in Java zurückgeben
public File compressFileList(List<File> fileList,String fileName) {
FileOutputStream fileOutputStream=null;
ZipOutputStream zipOutputStream=null;
FileInputStream fileInputStream=null;
String compressedFileName=fileName +".zip";
if(fileList.isEmpty())
return null;
try
{
fileOutputStream = new FileOutputStream(compressedFileName);
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));
for (File file: fileList) {
fileInputStream = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(file.getName());
zipOutputStream.putNextEntry(zipEntry);
byte[] tmp = new byte[4*1024];
int size = 0;
while((size = fileInputStream.read(tmp)) != -1){
zipOutputStream.write(tmp, 0, size);
}
zipOutputStream.flush();
fileInputStream.close();
}
zipOutputStream.close();
return compressedFile; //This is what I am missing
}
catch (FileNotFoundException e)
{
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
EDIT: Hinzufügen des Anwendungsfalles
Die Idee ist, eine Zip-Datei zu erstellen und die CreateClassifierOptions Methode des VisualRecognition Dienstes von Watson verwenden.
classifierOptions = new CreateClassifierOptions.Builder()
.classifierName("Santa")
.addClass("Santa", new File("C:\\app\\GitRepo\\images\\beagle.zip"))
.negativeExamples(new File("C:\\app\\GitRepo\\images\\nosport.zip"))
.build();
Der Builder übernimmt die Zip-Datei als Parameter.
Legendes
Auf der Grundlage der Erklärung von Alexandre Dupriez, ich denke, dass es besser ist, die Datei an einem Ort auf der Festplatte zu speichern.
was macht die andere Funktion als Eingang akzeptieren? Ein 'Inputstream'? – Lino
Ich verwende die WatsonService API, die eine Zip-Datei als Eingabe akzeptiert.oder vielleicht sollte ich eine temporäre ZIP-Datei erstellen und sie an die Funktion – Vini
zurückgeben. Ihre Frage steht in Konflikt mit Ihrer Methodensignatur. Ein File-Objekt ist im Grunde ein Verweis auf eine Datei, die in einem Pfad gespeichert ist, aber Ihre Frage scheint darin zu bestehen, den (Byte-) Inhalt einer Datei zurückzugeben. Wenn Sie also Ihre Datei nicht irgendwo speichern möchten, sollten Sie kein File-Objekt zurückgeben. –