⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resource.java

📁 Classifier4J是一个很好的基于java的分类器,里面有Native bayes和KNN等方法的文本分类.另外还 提供了分词和自动摘要等功能
💻 JAVA
字号:
/*
 * ====================================================================
 * 
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2003 Nick Lothian. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:  
 *       "This product includes software developed by the 
 *        developers of Classifier4J (http://classifier4j.sf.net/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The name "Classifier4J" must not be used to endorse or promote 
 *    products derived from this software without prior written 
 *    permission. For written permission, please contact   
 *    http://sourceforge.net/users/nicklothian/.
 *
 * 5. Products derived from this software may not be called 
 *    "Classifier4J", nor may "Classifier4J" appear in their names 
 *    without prior written permission. For written permission, please 
 *    contact http://sourceforge.net/users/nicklothian/.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 */

package net.sf.classifier4J.util;

import java.io.*;
import java.net.*;
import java.util.*;

/**
 * <p>A class to locate resources, retrieve their contents, and determine their
 * last modified time. To find the resource the class searches the CLASSPATH
 * first, then Resource.class.getResource("/" + name). If the Resource finds
 * a "file:" URL, the file path will be treated as a file. Otherwise, the
 * path is treated as a URL and has limited last modified info.</p>
 * 
 * <p>Heavily based on the example from http://www.onjava.com/pub/a/onjava/excerpt/jebp_3/index1.html?page=3#ex3-4</p>
 * 
 */
public class Resource implements Serializable {

    private String name;
    private File file;
    private URL url;

    public Resource(String name) throws IOException {
        this.name = name;
        SecurityException exception = null;

        try {
            // Search using the CLASSPATH. If found, "file" is set and the call
            // returns true.  A SecurityException might bubble up.
            if (tryClasspath(name)) {
                return;
            }
        } catch (SecurityException e) {
            exception = e; // Save for later.
        }

        try {
            // Search using the classloader getResource(  ). If found as a file,
            // "file" is set; if found as a URL, "url" is set.
            if (tryLoader(name)) {
                return;
            }
        } catch (SecurityException e) {
            exception = e; // Save for later.
        }

        // If you get here, something went wrong. Report the exception.
        String msg = "";
        if (exception != null) {
            msg = ": " + exception;
        }

        throw new IOException("Resource '" + name + "' could not be found in " + "the CLASSPATH (" + System.getProperty("java.class.path") + "), nor could it be located by the classloader responsible for the " + "web application (WEB-INF/classes)" + msg);
    }

    /**
     * Returns the resource name, as passed to the constructor
     */
    public String getName() {
        return name;
    }

    /**
     * Returns an input stream to read the resource contents
     */
    public InputStream getInputStream() throws IOException {
        if (file != null) {
            return new BufferedInputStream(new FileInputStream(file));
        } else if (url != null) {
            return new BufferedInputStream(url.openStream());
        }
        return null;
    }

    /**
     * Returns when the resource was last modified. If the resource 
     * was found using a URL, this method will work only if the URL 
     * connection supports last modified information. If there's no 
     * support, Long.MAX_VALUE is returned. Perhaps this should return 
     * -1, but you should return MAX_VALUE on the assumption that if
     * you can't determine the time, it's maximally new.
     */
    public long lastModified() {
        if (file != null) {
            return file.lastModified();
        } else if (url != null) {
            try {
                return url.openConnection().getLastModified(); // Hail Mary
            } catch (IOException e) {
                return Long.MAX_VALUE;
            }
        }
        return 0; // can't happen
    }

    /**
     * Returns the directory containing the resource, or null if the 
     * resource isn't directly available on the filesystem. 
     * This value can be used to locate the configuration file on disk,
     * or to write files in the same directory.
     */
    public String getDirectory() {
        if (file != null) {
            return file.getParent();
        } else if (url != null) {
            return null;
        }
        return null;
    }

    // Returns true if found
    private boolean tryClasspath(String filename) {
        String classpath = System.getProperty("java.class.path");
        String[] paths = split(classpath, File.pathSeparator);
        file = searchDirectories(paths, filename);
        return (file != null);
    }

    private static File searchDirectories(String[] paths, String filename) {
        SecurityException exception = null;
        for (int i = 0; i < paths.length; i++) {
            try {
                File file = new File(paths[i], filename);
                if (file.exists() && !file.isDirectory()) {
                    return file;
                }
            } catch (SecurityException e) {
                // Security exceptions can usually be ignored, but if all attempts
                // to find the file fail, report the (last) security exception.
                exception = e;
            }
        }
        // Couldn't find any match
        if (exception != null) {
            throw exception;
        } else {
            return null;
        }
    }

    // Splits a String into pieces according to a delimiter.
    // Uses JDK 1.1 classes for backward compatibility.
    // JDK 1.4 actually has a split(  ) method now.
    private static String[] split(String str, String delim) {
        // Use a Vector to hold the split strings.
        Vector v = new Vector();

        // Use a StringTokenizer to do the splitting.
        StringTokenizer tokenizer = new StringTokenizer(str, delim);
        while (tokenizer.hasMoreTokens()) {
            v.addElement(tokenizer.nextToken());
        }

        String[] ret = new String[v.size()];
        v.copyInto(ret);
        return ret;
    }

    // Returns true if found
    private boolean tryLoader(String name) {
        name = "/" + name;
        URL res = Resource.class.getResource(name);
        if (res == null) {
            return false;
        } else {
            // Try converting from a URL to a File.
            File resFile = urlToFile(res);
            if (resFile != null) {
                file = resFile;
            } else {
                url = res;
            }
            return true;
        }

    }

    private static File urlToFile(URL res) {
        String externalForm = res.toExternalForm();
        if (externalForm.startsWith("file:")) {
            return new File(externalForm.substring(5));
        }
        return null;
    }

    public String toString() {
        return "[Resource: File: " + file + " URL: " + url + "]";
    }
}

⌨️ 快捷键说明

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