byte[] getExtra()

优质
小牛编辑
140浏览
2023-12-01

描述 (Description)

java.util.zip.ZipEntry.getExtra()方法返回条目的额外字段数据,如果没有,则返回null。

声明 (Declaration)

以下是java.util.zip.ZipEntry.getExtra()方法的声明。

public byte[] getExtra()

返回值 (Returns)

条目的额外字段数据,如果没有则为null。

先决条件

D:》 test 》目录中创建一个文件Hello.txt,其中包含以下内容。

This is an example.

例子 (Example)

以下示例显示了java.util.zip.ZipEntry.getExtra()方法的用法。

package cn.xnip;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipEntryDemo {
   private static String SOURCE_FILE = "D:\\test\\Hello.txt";
   private static String TARGET_FILE = "D:\\test\\Hello.zip";
   public static void main(String[] args) {
      try {
         createZipFile();
         readZipFile();
      } catch(IOException ioe) {
         System.out.println("IOException : " + ioe);
      }
   }
   private static void createZipFile() throws IOException{
      FileOutputStream fout = new FileOutputStream(TARGET_FILE);
      CheckedOutputStream checksum = new CheckedOutputStream(fout, new Adler32());
      ZipOutputStream zout = new ZipOutputStream(checksum);
      FileInputStream fin = new FileInputStream(SOURCE_FILE);
      ZipEntry zipEntry = new ZipEntry(SOURCE_FILE);
      zipEntry.setExtra("sample data".getBytes());
      zout.putNextEntry(zipEntry);
      int length;
      byte[] buffer = new byte[1024];
      while((length = fin.read(buffer)) > 0) {
         zout.write(buffer, 0, length);
      }
      zout.closeEntry();
      fin.close();
      zout.close();
   }
   private static void readZipFile() throws IOException{
      final ZipFile file = new ZipFile(TARGET_FILE); 
      System.out.println("Iterating over zip file : " + TARGET_FILE);
      try { 
         final Enumeration<? extends ZipEntry> entries = file.entries(); 
         while (entries.hasMoreElements()) { 
            final ZipEntry entry = entries.nextElement(); 
            System.out.printf("File: %s Size %d Modified on %TD %n", 
               entry.getName(), entry.getSize(), 
                  new Date(entry.getTime())); 
            System.out.println(new String(entry.getExtra(), 0, entry.getExtra().length, "UTF-8"));
            extractFile(entry, file.getInputStream(entry)); 
         } 
         System.out.printf("Zip file %s extracted successfully.", SOURCE_FILE); 
      } 
      finally { 
         file.close(); 
      }
   }
   private static void extractFile(final ZipEntry entry, InputStream is) 
      throws IOException {
      FileOutputStream fos = null; 
      try { 
         fos = new FileOutputStream(entry.getName()); 
         final byte[] buf = new byte[1024]; 
         int read = 0; 
         int length; 
         while ((length = is.read(buf, 0, buf.length)) >= 0) { 
            fos.write(buf, 0, length); 
         } 
      } catch (IOException ioex) { 
         fos.close(); 
      } 
   }
}

让我们编译并运行上面的程序,这将产生以下结果 -

Iterating over zip file : D:\test\Hello.zip
File: D:\test\Hello.txt Size 19 Modified on 05/20/17
sample data
Zip file D:\test\Hello.txt extracted successfully.

最后更新:

类似资料

  • 我正在发出警报,服务由警报启动。我希望服务接收额外数据,因此在谷歌搜索中,我将标志设置为Intent。FILL_IN_DATA。下面是我的代码。(仅显示重要部分)(我有几种警报模式,调用不同的服务) } 服务端代码(编辑:此代码在BService类中。AService不需要接收额外代码。) 但是,结果始终为-1,这意味着没有额外收到。 我的代码有什么问题?我在谷歌上搜索了几个小时,没有任何希望。

  • 当我在活动中创建新意图时: (此代码位于默认的空白活动中) 始终为null,因此,会立即导致null点异常。然而,启动意图没有任何问题。 我已经阅读了所有关于这个主题的类似stackoverflow帖子: https://stackoverflow.com/a/6357330 我都试过了,但似乎都没有效果。 有谁能提供一个解决方案,简单地用非空的额外项启动一个意图,它总是有效的? 或者,是否有任何

  • 这可能是一个错误的警报,见我自己的答案。下面的原始问题: 一个活动有一个按钮,可以将用户带到另一个活动。为了启动新的活动,我们用extra填充我们的Intent,而onCreate(),新活动通过Intent读取这些extra。getExtras()。我们假设返回的bundle是非null的,但正如客户崩溃报告所发现的,getExtras()有时返回null。 正如这个答案所示,空值保护附加值是非

  • null 直到今天(AFAIK--我有一段时间没有测试过),Firebase云消息传递工作得很好。我可以从Firebase控制台发送带有数据的通知,并且使用将允许我从应用程序访问这些数据。 然而,今天我发送了一个测试通知,但是点击它并没有执行预期的操作。经过一番挖掘,我发现只是返回。以下是相关代码: (这个方法是从主活动中的和调用的。) 我怀疑这与Firebase11 vs 10有关,或者这款应用

相关阅读