如何使用java在zip中获取特殊文件offest

如何使用java在zip中获取特殊文件offest,java,android,python,zip,Java,Android,Python,Zip,我使用java中的ZipEntry和ZipInputStream和ZipFile来获取zip存档的一些信息。但我还是不能得到一个信息 Python可以这样做: otazip = zipfile.ZipFile(sys.argv[1], 'r') load_info = otazip.getinfo('load.bin') load_offset = load_info.header_offset + len(load_info.FileHeader()) 有谁能像python那样使用java帮

我使用java中的
ZipEntry
ZipInputStream
ZipFile
来获取zip存档的一些信息。但我还是不能得到一个信息

Python可以这样做:

otazip = zipfile.ZipFile(sys.argv[1], 'r')
load_info = otazip.getinfo('load.bin')
load_offset = load_info.header_offset + len(load_info.FileHeader())

有谁能像python那样使用java帮助我获取加载偏移量吗?

在java中,没有从ZipEntry获取偏移量的方法

我尝试了以下解决方案,效果很好:

  public long getZipEntryOffset() {
       String path = ota.zip;
       final String loadString = "load.bin";
       long offset = 0;
       File zipFile = new File(path);
       ZipInputStream zis = new ZipInputStream(new FileInputStream(path));

      try { 

        ZipEntry loadEntry = zisp.getNextEntry();
        while( loadEntry != null){
        long fileSize = 0;
        long extra = loadEntry.getExtra() == null ? 0 : loadEntry.getExtra().length;
        String fileName = loadEntry.getName();
        Offset += 30 + loadEntry.getName().length() + extra;
        if(!loadEntry.isDirectory()){
                fileSize = loadEntry.getCompressedSize();
        }    

        if (fileName.equals(loadString )) {
         loadSize = loadEntry.getSize();
         break;
        }
        offset += fileSize;
        loadEntry = zisp.getNextEntry();
    }

   zisp.closeEntry();

 }finally {
    zis.close();
}

  return offset ;
}

偏移量由30字节的标准zip头信息+文件名长度+一些可能的额外操作系统特定标志+数据本身组成。在Java中,没有从ZipEntry获取偏移量的方法

我尝试了以下解决方案,效果很好:

  public long getZipEntryOffset() {
       String path = ota.zip;
       final String loadString = "load.bin";
       long offset = 0;
       File zipFile = new File(path);
       ZipInputStream zis = new ZipInputStream(new FileInputStream(path));

      try { 

        ZipEntry loadEntry = zisp.getNextEntry();
        while( loadEntry != null){
        long fileSize = 0;
        long extra = loadEntry.getExtra() == null ? 0 : loadEntry.getExtra().length;
        String fileName = loadEntry.getName();
        Offset += 30 + loadEntry.getName().length() + extra;
        if(!loadEntry.isDirectory()){
                fileSize = loadEntry.getCompressedSize();
        }    

        if (fileName.equals(loadString )) {
         loadSize = loadEntry.getSize();
         break;
        }
        offset += fileSize;
        loadEntry = zisp.getNextEntry();
    }

   zisp.closeEntry();

 }finally {
    zis.close();
}

  return offset ;
}

偏移量由30字节的标准zip头信息+文件名长度+一些可能的额外操作系统特定标志+数据本身组成

IMHO,这就是您所需要的。我想获得load.bin有效负载在zip-archtive中的位置。该链接似乎是关于在zip-archtive中读取文件的?我从该链接中找到了一个解决方案:该链接也帮助了我:IMHO,这就是您需要的。我想获取zip-archive中load.bin有效负载的位置。该链接似乎是关于在zip-archive中读取文件的?我从该链接中找到了一个解决方案:该链接也帮助了我: