【发布时间】:2017-11-13 10:01:52
【问题描述】:
我有一个从文件列表创建 Zip 文件的函数。是否可以在不保存在磁盘上的情况下返回 Zip 文件?我需要该文件,因为我必须将 zip 文件用作另一个函数的参数。我不确定 ByteStream 是否适合我。
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;
}
编辑:添加用例
这个想法是创建一个 zip 文件并使用 Watson 的 VisualRecognition Service 的 CreateClassifierOptions 方法。
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();
构建器接受 zip 文件作为参数。
了解
根据 Alexandre Dupriez 的解释,我认为最好将文件存储在硬盘上的某个位置。
【问题讨论】:
-
其他函数接受什么作为输入?
Inputstream? -
我正在使用 WatsonService API,它接受一个 zip 文件作为输入。或者我应该创建一个临时 zip 文件并将其返回给函数
-
您的问题与您的方法签名冲突。 File 对象基本上是对存储在某个路径中的文件的引用,但您的问题似乎是关于返回文件的(字节)内容。因此,如果您不想将文件存储在某处,则不应返回 File 对象。
-
我应该在磁盘上创建一个临时文件并将其发送到函数吗?
-
从功能的角度来看,您想要实现什么目标?存储临时文件并返回对它的引用是一种选择,但这取决于您要对该文件执行的操作。
标签: java zip zipoutputstream