classfilefinder.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 169 行

JAVA
169
字号
/* * @(#)ClassFileFinder.java	1.14 06/10/10 * * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved.   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER   *    * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License version   * 2 only, as published by the Free Software Foundation.    *    * This program 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. See the GNU   * General Public License version 2 for more details (a copy is   * included at /legal/license.txt).    *    * You should have received a copy of the GNU General Public License   * version 2 along with this work; if not, write to the Free Software   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA   * 02110-1301 USA    *    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa   * Clara, CA 95054 or visit www.sun.com if you need additional   * information or have any questions.  * *//* * Collect classpath components, usually from the command line. * Use this list to search for class files. * In addition to the classic, Unix-style directory names, * we also accept zip files. */package util;import java.util.Vector;import java.io.File;import java.io.FileInputStream;import java.io.BufferedInputStream;import java.io.InputStream;import java.io.IOException;import java.util.zip.*;/* * This auxiliary class represents a component of the search * path, which can be either a directory, a zip file, or * neither of the above (in which case it is ignored). */class searchPathComponent {    public String		name;    public boolean		isDirectory;    public boolean		isZip;    public ZipFile	 	zipfile; // only if isZip    public searchPathComponent 	next; // chain.    searchPathComponent( String name ){	this.name = name;	File thisFile = new File( name );	if ( thisFile.exists() ){	    if ( thisFile.isDirectory() ){		this.isDirectory = true;	    } else {		// try to open it as a zip file.		// if the open succeeds, it is a zip file.		// else we are in error.		try {		    this.zipfile = new ZipFile( thisFile );		    this.isZip   = true;		}catch( java.io.IOException e ){		    return;		}	    }	}	//	// else it is none of the above.	// this is an error.	// we do not prevent putting erroneous components	// on the path.	//    }    InputStream find( String name ){	try {	    if ( isDirectory ){		File thisFile = new File( this.name, name );		if ( thisFile.exists() && thisFile.canRead() ){		    return new BufferedInputStream( new FileInputStream( thisFile ) );		}	    } else if ( isZip ){		ZipEntry ze = this.zipfile.getEntry( name );		if ( ze != null )		    return new BufferedInputStream( this.zipfile.getInputStream( ze ) );	    }	} catch ( IOException e ){	    return null;	}	return null;    }        public String toString(){	return	    Localizer.getString(isDirectory?"classfilefinder.directory":isZip?"classfilefinder.zipfile":"classfilefinder.path_noop", this.name);    }    }public class ClassFileFinder {    private searchPathComponent    searchPath;    private searchPathComponent    searchPathEnd;    public  boolean	verbose = false;    /*     * take a single place to look.     * add it to the searchPath.     */    private void addSearchPathEntry( String pathComponent ){	searchPathComponent t = new searchPathComponent( pathComponent );	if ( searchPathEnd == null ){	    searchPath = searchPathEnd = t;	} else {	    searchPathEnd.next = t;	    searchPathEnd = t;	}    }    /*     * take a colon-separated list of places to look.     * parse them out to an array of strings, which gets     * added to any searchPath we already have.     */    public void addToSearchPath( String pathString ){	int curbegin = 0;	int pl = pathString.length();	char sepChar = File.pathSeparatorChar;	int colon;	while( (colon = pathString.indexOf(sepChar,curbegin) ) != -1 ){	    addSearchPathEntry( pathString.substring( curbegin, colon ) );	    curbegin = colon+1;	}	if ( curbegin < pl ){	    addSearchPathEntry( pathString.substring( curbegin, pl ) );	}    }    public InputStream findClassFile( String cname ){	cname = cname+".class";	for ( searchPathComponent spc = searchPath; spc != null; spc = spc.next ){	    InputStream s = spc.find( cname );	    if ( s != null ){		if ( verbose ){		    System.out.print(Localizer.getString(			      	         "classfilefinder.foundin", 					  cname, spc));		}		return s;	    }	    if ( verbose ){		System.out.print(Localizer.getString(			             "classfilefinder.notfoundin",				     cname, spc));	    }	}	return null;    }}

⌨️ 快捷键说明

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