zipmodule.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 223 行

JAVA
223
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Charles Reich */package com.caucho.quercus.lib.zip;import com.caucho.quercus.QuercusModuleException;import com.caucho.quercus.annotation.NotNull;import com.caucho.quercus.annotation.Optional;import com.caucho.quercus.annotation.ReturnNullAsFalse;import com.caucho.quercus.env.BooleanValue;import com.caucho.quercus.env.Env;import com.caucho.quercus.env.LongValue;import com.caucho.quercus.env.StringValue;import com.caucho.quercus.env.UnicodeValueImpl;import com.caucho.quercus.env.Value;import com.caucho.quercus.lib.file.BinaryInput;import com.caucho.quercus.lib.file.BinaryStream;import com.caucho.quercus.lib.file.FileModule;import com.caucho.quercus.module.AbstractQuercusModule;import com.caucho.util.L10N;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;/** * PHP Zip */public class ZipModule extends AbstractQuercusModule {  private static final Logger log    = Logger.getLogger(ZipModule.class.getName());  private static final L10N L = new L10N(ZipModule.class);  public String []getLoadedExtensions()  {    return new String[] {  "zip" };  }  /**   * Opens stream to read zip entries.   * Since we're only reading, fopen mode is always "rb".   */  @ReturnNullAsFalse  public ZipDirectory zip_open(Env env,                               @NotNull StringValue filename)  {    if (filename == null || filename.length() == 0)      return null;    BinaryStream s = FileModule.fopen(env, filename, "rb", false, null);    if (s == null)      return null;    return new ZipDirectory((BinaryInput) s);  }  /**   * Reads an entry's metadata from the zip stream.   * It appears PHP's zip_read also does a zip_entry_open.   */  @ReturnNullAsFalse  public QuercusZipEntry zip_read(Env env,                                  @NotNull ZipDirectory directory)  {    if (directory == null)      return null;    try {      QuercusZipEntry qze = directory.zip_read();      zip_entry_open(env, directory, qze, "rb");      return qze;    } catch (IOException e) {      throw new QuercusModuleException(e);    }  }  /**   * Returns the file name.   *   * @return false if zipEntry is null   */  public Value zip_entry_name(Env env,                              @NotNull QuercusZipEntry entry)  {    if (entry == null)      return BooleanValue.FALSE;    return env.createString(entry.zip_entry_name());  }  /**   * Returns the file's uncompressed size.   *   * @return false if zipEntry is null   */  public Value zip_entry_filesize(@NotNull QuercusZipEntry entry)  {    if (entry == null)      return BooleanValue.FALSE;    return new LongValue(entry.zip_entry_filesize());  }  /**   * Closes the file.   */  public boolean zip_close(@NotNull ZipDirectory directory)  {    if (directory == null)      return false;    return directory.zip_close();  }  /**   * Opens entry for decompression.   *   * @return true on success or false on failure   */  public boolean zip_entry_open(Env env,                                @NotNull ZipDirectory directory,                                @NotNull QuercusZipEntry entry,                                @Optional String mode)  {    if ((directory == null) || (entry == null))      return false;    return entry.zip_entry_open(env, directory);  }  /**   * Closes this entry's stream.   *   * @return true if successful, else false;   */  public boolean zip_entry_close(Env env,                                 @NotNull QuercusZipEntry entry)  {    try {      if (entry == null)        return false;      return entry.zip_entry_close();    } catch (IOException e) {        env.warning(L.l(e.toString()));        log.log(Level.FINE, e.toString(), e);        return false;    }  }  /**   * Reads and decompresses entry's compressed data.   *   * @return false or decompressed BinaryValue   */  @ReturnNullAsFalse  public StringValue zip_entry_read(Env env,				    @NotNull QuercusZipEntry entry,				    @Optional("1024") int length)  {    if (entry == null)      return null;    return entry.zip_entry_read(env, length);  }  /**   * Returns the compression method used for this entry.   * Only "deflate" and "store" are supported.   *   * @return empty string, stored or deflated   */  public String zip_entry_compressionmethod(@NotNull QuercusZipEntry entry)  {    if (entry == null)      return "";    return entry.zip_entry_compressionmethod();  }  /**   * Returns the size of the compressed data.   *   * @return -1, or compressed size   */  public long zip_entry_compressedsize(@NotNull QuercusZipEntry entry)  {    if (entry == null)      return -1;    return entry.zip_entry_compressedsize();  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?