docs: ZipFileHandle getZipFileHandle() throws IOException {
          synchronized( zipFileHandleLock ) {
              if ( zipFileHandleFailed ) {
                  return null;
              } else if ( zipFileHandle != null ) {
                  return zipFileHandle;
              }
  
              File useArchiveFile = getArchiveFile();
              if ( useArchiveFile == null ) {
                  zipFileHandleFailed = true;
                  throw new FileNotFoundException( entryInEnclosingContainer.getPath() );
              }
  
              try {
                  String useCanonicalPath = getCanonicalPath(useArchiveFile); // throws IOException
                  zipFileHandle = getZipFileHandle(useCanonicalPath); // throws IOException
              } catch ( IOException e ) {
                  zipFileHandleFailed = true;
                  throw e;
              }
              return zipFileHandle;
          }
      }