zoukankan      html  css  js  c++  java
  • org.springframework.core.io.ClassPathResource类

    测试代码

    package cn.edu.hdu.pichen.springexample;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.List;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.util.StringUtils;
    
    import cn.edu.hdu.pichen.springexample.beans.User;
    
    /**
     * Hello world!
     *
     */
    public class App
    {
        public static void main(String[] args) throws IOException
        {
            // ClassPathResource resource = new
            // ClassPathResource("./../classes/beans.xml");
            // System.out.println(resource.getPath());
            // System.out.println(resource.getDescription());
            // System.out.println(resource.getURL().getPath());
            //
            // InputStream is = resource.getInputStream();
            // BufferedReader br = new BufferedReader(new InputStreamReader(is));
            // String str = br.readLine();
            // while (str != null)
            // {
            // System.out.println(str);
            // str = br.readLine();
            // }
            //
            System.out.println(StringUtils.cleanPath(".\beans.xml")); // \替换为/
            System.out.println(StringUtils.cleanPath("file:core/../core/./io/Resource.class"));
    
    
    
            // System.out.println(StringUtils.cleanPath("./../../beans.xml"));
            // System.out.println(StringUtils.cleanPath("./tmp/tmp2/../beans.xml"));
            //
            //
            // BeanFactory factory = new XmlBeanFactory(resource);
            // User user = factory.getBean("user", User.class);
            // System.out.println("Name:" + user.getName() + "
    Age:" +
            // user.getAge());
        }
    }

    pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.edu.hdu.pichen</groupId>
        <artifactId>springexample</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springexample</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>3.0.7.RELEASE</version>
            </dependency>
    
    
        </dependencies>
    </project>

    涉及的相关类源码

    org.springframework.util.StringUtils工具类的collectionToDelimitedString方法

    /**
         * Convenience method to return a Collection as a delimited (e.g. CSV)
         * String. E.g. useful for <code>toString()</code> implementations.
         * @param coll the Collection to display
         * @param delim the delimiter to use (probably a ",")
         * @param prefix the String to start each element with
         * @param suffix the String to end each element with
         * @return the delimited String
         */
        public static String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix) {
            if (CollectionUtils.isEmpty(coll)) {
                return "";
            }
            StringBuilder sb = new StringBuilder();//局部变量,不需要同步,使用StringBuilder即可
            Iterator<?> it = coll.iterator();
            while (it.hasNext()) {
                sb.append(prefix).append(it.next()).append(suffix);
                if (it.hasNext()) {
                    sb.append(delim);
                }
            }
            return sb.toString();
        }

    该方法代码很简单,不需要多说明,就是简单的字符串拼接,依次遍历入参coll集合,并取出元素进行前缀、后缀、分隔符拼接。

    入参及返回值说明

         * @param 需要处理的元素集合(如果是对象,拼接的是toString方法的字符串)
         * @param 分隔符(如分号;)
         * @param 拼接的元素前缀
         * @param 拼接的元素后缀
         * @return 处理完后的结果

    举个例子:

            List<String> pathElements = new LinkedList<String>();
            pathElements.add("AAA");
            pathElements.add("BBB");
            pathElements.add("CCC");
            System.out.println(StringUtils.collectionToDelimitedString(pathElements, ";", "#", "$"));

    结果打印(分隔符";",前缀"#", 后缀"$"):

    #AAA$;#BBB$;#CCC$

    org.springframework.util.StringUtils工具类的cleanPath方法

    /**
         * Normalize the path by suppressing sequences like "path/.." and
         * inner simple dots.
         * <p>The result is convenient for path comparison. For other uses,
         * notice that Windows separators ("") are replaced by simple slashes.
         * @param path the original path
         * @return the normalized path
         */
        public static String cleanPath(String path) {
            if (path == null) {
                return null;
            }
            String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR);
    
            // Strip prefix from path to analyze, to not treat it as part of the
            // first path element. This is necessary to correctly parse paths like
            // "file:core/../core/io/Resource.class", where the ".." should just
            // strip the first "core" directory while keeping the "file:" prefix.
            int prefixIndex = pathToUse.indexOf(":");
            String prefix = "";
            if (prefixIndex != -1) {
                prefix = pathToUse.substring(0, prefixIndex + 1);
                pathToUse = pathToUse.substring(prefixIndex + 1);
            }
            if (pathToUse.startsWith(FOLDER_SEPARATOR)) {
                prefix = prefix + FOLDER_SEPARATOR;
                pathToUse = pathToUse.substring(1);
            }
    
            String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR);
            List<String> pathElements = new LinkedList<String>();
            int tops = 0;
    
            for (int i = pathArray.length - 1; i >= 0; i--) {
                String element = pathArray[i];
                if (CURRENT_PATH.equals(element)) {
                    // Points to current directory - drop it.
                }
                else if (TOP_PATH.equals(element)) {
                    // Registering top path found.
                    tops++;
                }
                else {
                    if (tops > 0) {
                        // Merging path element with element corresponding to top path.
                        tops--;
                    }
                    else {
                        // Normal path element found.
                        pathElements.add(0, element);
                    }
                }
            }
    
            // Remaining top paths need to be retained.
            for (int i = 0; i < tops; i++) {
                pathElements.add(0, TOP_PATH);
            }
    
            return prefix + collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
        }

    该方法根据输入的原始路径转换成一个规格化的路径,如下示例:

    .\beans.xml -----》beans.xml

    file:core/../core/./io/Resource.class -----》file:core/io/Resource.class

    代码也不复杂简单说明下吧:

  • 相关阅读:
    InputMethodService详解
    OPhone平台IMF简介
    android.view.View详解
    [t]为Android平台开发一个输入法
    SoftKeyboard详解
    SoftKeyboard示例之CandidateView详解
    如何开发一个OPhone平台的输入法应用
    KeyboardView.OnKeyboardActionListener详解
    二次开发
    直线职权::参谋职权::职能职权
  • 原文地址:https://www.cnblogs.com/chenpi/p/6421991.html
Copyright © 2011-2022 走看看