第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用JarOutputStream創(chuàng)建JAR文件?

如何使用JarOutputStream創(chuàng)建JAR文件?

Qyouu 2019-08-17 16:27:42
如何使用JarOutputStream創(chuàng)建JAR文件?如何使用編程方式創(chuàng)建JAR文件java.util.jar.JarOutputStream?我的程序生成的JAR文件看起來是正確的(它提取正常)但是當(dāng)我嘗試從中加載庫時,Java抱怨它無法找到明確存儲在其中的文件。如果我提取JAR文件并使用Sun的jar命令行工具重新壓縮它,則生成的庫可以正常工作。簡而言之,我的JAR文件有問題。請解釋如何以編程方式創(chuàng)建JAR文件,并使用清單文件。
查看完整描述

3 回答

?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

事實證明,這JarOutputStream有三個未記載的怪癖:

  1. 目錄名稱必須以“/”斜杠結(jié)尾。

  2. 路徑必須使用'/'斜杠,而不是'\'

  3. 條目不能以“/”斜杠開頭。

以下是創(chuàng)建Jar文件的正確方法:

public void run() throws IOException{
  Manifest manifest = new Manifest();
  manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
  JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);
  add(new File("inputDirectory"), target);
  target.close();}private void add(File source, JarOutputStream target) throws IOException{
  BufferedInputStream in = null;
  try
  {
    if (source.isDirectory())
    {
      String name = source.getPath().replace("\\", "/");
      if (!name.isEmpty())
      {
        if (!name.endsWith("/"))
          name += "/";
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();
      }
      for (File nestedFile: source.listFiles())
        add(nestedFile, target);
      return;
    }

    JarEntry entry = new JarEntry(source.getPath().replace("\\", "/"));
    entry.setTime(source.lastModified());
    target.putNextEntry(entry);
    in = new BufferedInputStream(new FileInputStream(source));

    byte[] buffer = new byte[1024];
    while (true)
    {
      int count = in.read(buffer);
      if (count == -1)
        break;
      target.write(buffer, 0, count);
    }
    target.closeEntry();
  }
  finally
  {
    if (in != null)
      in.close();
  }}


查看完整回答
反對 回復(fù) 2019-08-17
?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊

還有一個需要注意的“怪癖”:所有JarEntry的名字都不應(yīng)以“/”開頭。

例如:清單文件的jar條目名稱是“META-INF / MANIFEST.MF”而不是“/META-INF/MANIFEST.MF”。

所有jar條目都應(yīng)遵循相同的規(guī)則。


查看完整回答
反對 回復(fù) 2019-08-17
  • 3 回答
  • 0 關(guān)注
  • 1692 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號