Пример #1
0
  // -creatediff -applydiff -debug -output file
  public static void main(String[] args) throws IOException {
    boolean diff = true;
    boolean minimal = true;
    String outputFile = "out.jardiff";

    for (int counter = 0; counter < args.length; counter++) {
      // for backward compatibilty with 1.0.1/1.0
      if (args[counter].equals("-nonminimal") || args[counter].equals("-n")) {
        minimal = false;
      } else if (args[counter].equals("-creatediff") || args[counter].equals("-c")) {
        diff = true;
      } else if (args[counter].equals("-applydiff") || args[counter].equals("-a")) {
        diff = false;
      } else if (args[counter].equals("-debug") || args[counter].equals("-d")) {
        _debug = true;
      } else if (args[counter].equals("-output") || args[counter].equals("-o")) {
        if (++counter < args.length) {
          outputFile = args[counter];
        }
      } else if (args[counter].equals("-applydiff") || args[counter].equals("-a")) {
        diff = false;
      } else {
        if ((counter + 2) != args.length) {
          showHelp();
          System.exit(0);
        }
        if (diff) {
          try {
            OutputStream os = new FileOutputStream(outputFile);

            JarDiff.createPatch(args[counter], args[counter + 1], os, minimal);
            os.close();
          } catch (IOException ioe) {
            try {
              System.out.println(getResources().getString("jardiff.error.create") + " " + ioe);
            } catch (MissingResourceException mre) {
            }
          }
        } else {
          try {
            OutputStream os = new FileOutputStream(outputFile);

            new JarDiffPatcher().applyPatch(null, args[counter], args[counter + 1], os);
            os.close();
          } catch (IOException ioe) {
            try {
              System.out.println(getResources().getString("jardiff.error.apply") + " " + ioe);
            } catch (MissingResourceException mre) {
            }
          }
        }
        System.exit(0);
      }
    }
    showHelp();
  }
Пример #2
0
 /**
  * Copies all bytes from the input stream to the output file. Does not close the input stream.
  *
  * @param from the input stream to read from
  * @param to the output file to write to
  * @throws IOException if an I/O error occurs
  */
 private void copy(InputStream from, File to) throws IOException {
   OutputStream out = new FileOutputStream(to);
   try {
     copy(from, out);
   } finally {
     out.close();
   }
 }
Пример #3
0
 void copy(InputStream in, File dest) throws IOException {
   dest.getParentFile().mkdirs();
   OutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
   try {
     byte[] data = new byte[8192];
     int n;
     while ((n = in.read(data, 0, data.length)) > 0) out.write(data, 0, n);
   } finally {
     out.close();
     in.close();
   }
 }
Пример #4
0
 /** Create a jar file containing one or more entries. */
 File createJar(File jar, String... entries) throws IOException {
   OutputStream out = new FileOutputStream(jar);
   try {
     JarOutputStream jos = new JarOutputStream(out);
     for (String e : entries) {
       jos.putNextEntry(new JarEntry(getPathForZipEntry(e)));
       jos.write(getBodyForEntry(e).getBytes());
     }
     jos.close();
   } finally {
     out.close();
   }
   return jar;
 }
Пример #5
0
  /** Starts main program with the specified arguments. */
  public synchronized boolean run(String args[]) {
    ok = true;
    if (!parseArgs(args)) {
      return false;
    }
    try {
      if (cflag || uflag) {
        if (fname != null) {
          // The name of the zip file as it would appear as its own
          // zip file entry. We use this to make sure that we don't
          // add the zip file to itself.
          zname = fname.replace(File.separatorChar, '/');
          if (zname.startsWith("./")) {
            zname = zname.substring(2);
          }
        }
      }
      if (cflag) {
        Manifest manifest = null;
        InputStream in = null;

        if (!Mflag) {
          if (mname != null) {
            in = new FileInputStream(mname);
            manifest = new Manifest(new BufferedInputStream(in));
          } else {
            manifest = new Manifest();
          }
          addVersion(manifest);
          addCreatedBy(manifest);
          if (isAmbiguousMainClass(manifest)) {
            if (in != null) {
              in.close();
            }
            return false;
          }
          if (ename != null) {
            addMainClass(manifest, ename);
          }
          if (pname != null) {
            if (!addProfileName(manifest, pname)) {
              if (in != null) {
                in.close();
              }
              return false;
            }
          }
        }
        OutputStream out;
        if (fname != null) {
          out = new FileOutputStream(fname);
        } else {
          out = new FileOutputStream(FileDescriptor.out);
          if (vflag) {
            // Disable verbose output so that it does not appear
            // on stdout along with file data
            // error("Warning: -v option ignored");
            vflag = false;
          }
        }
        expand(null, files, false);
        create(new BufferedOutputStream(out, 4096), manifest);
        if (in != null) {
          in.close();
        }
        out.close();
      } else if (uflag) {
        File inputFile = null, tmpFile = null;
        FileInputStream in;
        FileOutputStream out;
        if (fname != null) {
          inputFile = new File(fname);
          tmpFile = createTempFileInSameDirectoryAs(inputFile);
          in = new FileInputStream(inputFile);
          out = new FileOutputStream(tmpFile);
        } else {
          in = new FileInputStream(FileDescriptor.in);
          out = new FileOutputStream(FileDescriptor.out);
          vflag = false;
        }
        InputStream manifest = (!Mflag && (mname != null)) ? (new FileInputStream(mname)) : null;
        expand(null, files, true);
        boolean updateOk = update(in, new BufferedOutputStream(out), manifest, null);
        if (ok) {
          ok = updateOk;
        }
        in.close();
        out.close();
        if (manifest != null) {
          manifest.close();
        }
        if (ok && fname != null) {
          // on Win32, we need this delete
          inputFile.delete();
          if (!tmpFile.renameTo(inputFile)) {
            tmpFile.delete();
            throw new IOException(getMsg("error.write.file"));
          }
          tmpFile.delete();
        }
      } else if (tflag) {
        replaceFSC(files);
        if (fname != null) {
          list(fname, files);
        } else {
          InputStream in = new FileInputStream(FileDescriptor.in);
          try {
            list(new BufferedInputStream(in), files);
          } finally {
            in.close();
          }
        }
      } else if (xflag) {
        replaceFSC(files);
        if (fname != null && files != null) {
          extract(fname, files);
        } else {
          InputStream in =
              (fname == null) ? new FileInputStream(FileDescriptor.in) : new FileInputStream(fname);
          try {
            extract(new BufferedInputStream(in), files);
          } finally {
            in.close();
          }
        }
      } else if (iflag) {
        genIndex(rootjar, files);
      }
    } catch (IOException e) {
      fatalError(e);
      ok = false;
    } catch (Error ee) {
      ee.printStackTrace();
      ok = false;
    } catch (Throwable t) {
      t.printStackTrace();
      ok = false;
    }
    out.flush();
    err.flush();
    return ok;
  }