我目前正在创建一个使用 java.util.zip 包压缩文件的程序。它运作良好,但我注意到压缩文件夹/目录与压缩文件不同(如果我错了,请纠正我)。在我的程序中,我必须知道所选文件是文件夹还是文件(例如 .jpg、.png、.apk 等)。我已经尝试了一些实验让我知道,这是我的文件选择器活动中的示例代码:(currentDir is a File)
if(currentDir.isDirectory())Toast.makeText(this,"Directory",Toast.LENGTH_LONG).show();
if(currentDir.isFile())Toast.makeText(this, "File", Toast.LENGTH_LONG).show();
插入后,我在活动中选择的每个文件都会输出一个“目录”而不是“文件”,即使我选择了一个图像。有人可以帮助我如何知道android中的文件是否是文件夹吗?谢谢!(第一个问题)
正如我之前所说,我注意到压缩文件夹与压缩文件不同(如果我错了,请纠正/教我)。在压缩文件夹时我已经完成了,但是在压缩文件(例如图像等)时,它仍然会压缩目录,但我相信必须只压缩我选择的文件。这是我的示例代码。(第二个问题)
public void onClick(View v) {
try{
ZipOutputStream zos = new ZipOutputStream( new FileOutputStream(new File(currentDir.getPath()+".zip")) );
zip( currentDir, currentDir, zos );
zos.close();
Toast.makeText(this, "File successfully compressed!", Toast.LENGTH_LONG).show();
}catch (IOException e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();}
}
private static final void zip(File directory, File base,ZipOutputStream zos) throws IOException {
File[] files = directory.listFiles();
byte[] buffer = new byte[8192];
int read = 0;
for (int i = 0, n = files.length; i < n; i++) {
if (files[i].isDirectory()) {
zip(files[i], base, zos);
} else {
FileInputStream in = new FileInputStream(files[i]);
ZipEntry entry = new ZipEntry(files[i].getPath().substring(base.getPath().length() + 1));
zos.putNextEntry(entry);
while (-1 != (read = in.read(buffer))) {
zos.write(buffer, 0, read);
}
in.close();
}
}
}
需要任何意见、帮助、建议、反应,我们将不胜感激!谢谢!