如何知道zip文件在用adb推送后是否已准备好解压缩

时间:2015-05-04 15:31:17

标签: android file unzip

我想使用adb push myfile.zip /data/将zip文件推送到我的Android设备,然后以编程方式将其解压缩到我的应用中。

在解压缩之前,有没有办法确保myfile.zip已经完成下载到/ data /?

File file = new File("/data/myfile.zip");               
if(file.exists())
    unzip();

这将告诉我文件一旦创建就存在但如果zip文件非常大,它甚至可能在完成下载之前就开始解压缩。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用FileObserver监控/ data /目录,监听CLOSE_WRITE事件,并确保触发事件的文件是您感兴趣的文件:

FileObserver dataDirObserver = new FileObserver("/data/", FileObserver.CLOSE_WRITE){
    public void onEvent(int event, String path){
        if("/data/myfile.zip".equals(path)){
             unzip();
        }
    }
};


//don't forget to start/stop watching at some point.
public void onPause(){
   super.onPause();
   dataDirObserver.stopWatching(); 
}
public void onResume(){
   super.onPause();
   dataDirObserver.startWatching(); 
}

答案 1 :(得分:-1)

根据您的下载方式,您可以获取尺寸,然后进行比较。

例如,

int count completed;
  try {
        URL url = new URL(this.link);
        URLConnection connection = url.openConnection();
        connection.connect();
        InputStream input = new BufferedInputStream(url.openStream(),
                8192);
        OutputStream output = new FileOutputStream(this.savedFileName);
        byte data[] = new byte[1024];
        while ((count = input.read(data)) != -1) {
            output.write(data, 0, count);
            completed+=count;
        }
        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {
        Log.e("Error: ", e.getMessage());
    }

在上面的代码中,总大小将表示为已完成,以字节为单位。您可以使用File.size()

将其与解压缩之前的文件大小进行比较

同样,您可以创建一个对象来封装下载项。并创建一个像isCompleted()

的方法