alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (Main.java)

This example Scala source code file (Main.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

action_done, action_proceed, action_proceed, action_usage, file, file, fjbgcontext, inputstream, io, ioexception, ioexception, jar, jarfile, string, string, util, zip, zipentry

The Scala Main.java source code

/* FJBG -- Fast Java Bytecode Generator
 * Copyright 2002-2011 LAMP/EPFL
 * @author  Michel Schinz
 */

package ch.epfl.lamp.fjbg;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;

/**
 * Main program entry to execute the FJBG reader from the command line.
 *
 * The reader prints out the decoded data in the same output format as
 * javap, the Java bytecode disassembler of the Sun J2SE SDK.
 *
 * @author Stephane Micheloud
 * @version 1.1
 */

public class Main {
    private static final String PRODUCT_STRING = "Fast Java Bytecode Generator";
    private static final String VERSION_STRING = "version 1.1";

    private static final int ACTION_USAGE = 0;
    private static final int ACTION_DONE = 1;
    private static final int ACTION_PROCEED = 2;

    private static String classPath = ".";
    private static String[] classNames = null;

    public static void main(String[] args) {
        switch (parseArgs(args)) {
        case ACTION_USAGE: printUsage(); break;
        case ACTION_PROCEED: processClasses(); break;
        default:
        }
    }

    private static void processClasses() {
        FJBGContext fjbgContext = new FJBGContext(49, 0);
        if (classNames.length > 0)
            try {
                for (int i = 0; i < classNames.length; ++i)
                    processClass(fjbgContext, classNames[i]);
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }
        else
            System.err.println(
                "No classes were specified on the command line.  Try -help.");
    }

    private static void processClass(FJBGContext fjbgContext, String className)
    throws IOException {
        InputStream in = getInputStream(className);
        JClass jclass = fjbgContext.JClass(new DataInputStream(in));
        System.out.println(jclass);
        in.close();
    }

    private static InputStream getInputStream(String className) throws IOException {
        String name = null;
        String[] paths = classPath.split(File.pathSeparator);
        for (int i = 0; i < paths.length; ++i) {
            File parent = new File(paths[i]);
            if (parent.isDirectory()) {
                name = className.replace('.', File.separatorChar)+".class";
                File f = new File(parent, name);
                if (f.isFile()) return new FileInputStream(f);
            } else if (paths[i].endsWith(".jar")) {
                JarFile f = new JarFile(parent);
                name = className.replace('.', '/')+".class";
                ZipEntry e = f.getEntry(name);
                if (e != null) return f.getInputStream(e);
            }
        }
        throw new IOException("ERROR:Could not find "+className);
    }

    private static int parseArgs(String[] args) {
        ArrayList/*<String>*/ classes = new ArrayList();
        String arg = null;
        int action = ACTION_USAGE;
        int i = 0, n = args.length;
        while (i < n) {
            arg = args[i];
            if (arg.equals("-classpath") && (i+1) < n) {
               classPath = args[i+1]; i += 2;
            } else if (arg.equals("-cp") && (i+1) < n) {
               classPath = args[i+1]; i += 2;
            } else if (arg.equals("-help")) {
               i = n+1;
            //} else if (arg.equals("-v")) {
            //   verbose = true; i += 1;
            } else if (arg.equals("-version")) {
               System.err.println(PRODUCT_STRING+" "+VERSION_STRING);
               action = ACTION_DONE; i = n+1;
            } else if (arg.startsWith("-")) {
               System.err.println("invalid flag: "+arg);
               i = n+1;
            } else {
               classes.add(arg); i += 1;
            }
        }
        if (i == n && i > 0) {
            classNames = (String[])classes.toArray(new String[classes.size()]);
            action = ACTION_PROCEED;
        }
        return action;
    }

    private static void printUsage() {
        System.out.println("Usage: fjbg <options> ");
        System.out.println();
        System.out.println("where possible options include:");
        System.out.println("  -cp <path>           Specify where to find user class files");
        System.out.println("  -classpath <path>    Specify where to find user class files");
        System.out.println("  -help                Print a synopsis of standard options");
        System.out.println("  -version             Version information");
        System.out.println();
        System.exit(1);
    }
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala Main.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.