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

Android 如何知道在使用adb推送zip文件后,zip文件是否已准备好解压,android,file,unzip,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文件非常大,它可能会在下载完成之前就开始解压缩 有什么建议吗 根据下载

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

有没有办法确保myfile.zip在解压之前已下载到/data/中

File file = new File("/data/myfile.zip");               
if(file.exists())
    unzip();
这将告诉我文件一创建就存在,但是如果zip文件非常大,它可能会在下载完成之前就开始解压缩


有什么建议吗

根据下载方式,您可以获得大小,然后进行比较

比如说,

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()的方法。

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

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(); 
}

你应该先告诉我们你是如何下载文件的。这没有任何意义。正如我所写的:我在应用程序运行时从命令行
adb push myfile.zip/data/
执行操作,我想通过编程方式从应用程序中解压,但只有在
push
命令完成将文件推入/data/之后,请不要在主题中使用“下载”这个词。你看答案的海报也很混乱。最好用adb来推动
。我想信息的主体就足够了。为了澄清,我更改了标题。我正在使用命令行
adb push myfile.zip/data/
下载文件,而我的应用程序正在运行,我无法知道文件的总大小。根据开发人员指南,当有人打开文件或目录进行写入时,会触发CLOSE_WRITE,然后将其关闭。当文件推送完成而未打开时,是否会触发该事件?为什么您认为adb可以在没有“打开以写入”的情况下将文件推送到某个目录中?在文件系统上写入位之前,每个进程都必须“打开以进行写入”。(在我看来,错过这次活动的唯一方法是,如果您的计算机上安装了带有/data/的分区,并且android无法使用该分区),因此我已经测试了这种方法,如果我将zip推到/data/data/com.example.myapp中,它可以正常工作,但当我将zip推到/data/中时,它根本不起作用。知道为什么吗?我怎样才能做到?嗨,有人能帮我解决这个问题吗?我的应用程序(它是一个启动器)似乎不监视文件中的任何更改,但当我在一个测试应用程序中测试它时,我写的它工作了。。。。请告知。。。