Javac中有FSInfo与CacheFSInfo两个类,CacheFSInfo继承了FSInfo类,这两个类的主要功能就是通过map缓存Jar文件,核心代码如下:

private Map<File,Entry> cache = new ConcurrentHashMap<File,Entry>();

private static class Entry {
        File canonicalFile;
        boolean exists;
        boolean isFile;
        boolean isDirectory;
        List<File> jarClassPath;
}

首先要了解一些File的API,如下:

public class TestFilePath {

	public static void main(String[] args) {
		// D:\newWorkspace\tmpdir
		System.out.println(System.getProperty("user.dir"));

		try {

			System.out.println("-----默认相对路径:取得路径不同------");
			File file1 = new File("..\\src\\test1.txt");
			// ..\src\test1.txt
			System.out.println(file1.getPath());
			// D:\newWorkspace\tmpdir\..\src\test1.txt
			System.out.println(file1.getAbsolutePath());
			// D:\newWorkspace\src\test1.txt
			System.out.println(file1.getCanonicalPath());

			System.out.println("-----默认相对路径:取得路径不同------");
			File file = new File(".\\test1.txt");
			// .\test1.txt
			System.out.println(file.getPath());
			// D:\newWorkspace\tmpdir\.\test1.txt
			System.out.println(file.getAbsolutePath());
			// D:\newWorkspace\tmpdir\test1.txt
			System.out.println(file.getCanonicalPath());

			System.out.println("-----默认绝对路径:取得路径相同------");
			File file2 = new File("D:\\workspace\\test\\test1.txt");
			// D:\workspace\test\test1.txt
			System.out.println(file2.getPath());
			// D:\workspace\test\test1.txt
			System.out.println(file2.getAbsolutePath());
			// D:\workspace\test\test1.txt
			System.out.println(file2.getCanonicalPath());

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}  

得出结论:

1、getPath()会得到file构造函数参数的值
2、getAbsolutePath()当参数为相对路径时会得到文件的绝对路径+相对路径,当参数为绝对路径时直接得到绝对路径
3、getCanonicalPath()当参数为相对路径时,解析符号,得到文件的绝对路径,当参数为绝对路径时得到文件的绝对路径

下面了解一下Jar包相关的信息。

 

FS及CacheFS类解读的更多相关文章

  1. JAVA String、StringBuffer、StringBuilder类解读

    JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...

  2. Bundle类解读

    1.Bundle bundle = Platform.getBundle("org.eclipse.ui.views"); Platform是eclipse平台运行时的核心类,它是 ...

  3. JavacProcessingEnvironment类解读

    JavacProcessingEnvironment类的继承体系如下: 其中含有很多内部类,最重要的是迭代注解处理器相关的类,如下:

  4. package-info类解读

    类不能带有public.private访问权限.package-info.java再怎么特殊,也是一个类文件,也会被编译成package-info.class,但是在package-info.java ...

  5. javac的Resolve类解读

    方法1:isInitializer() /** An environment is an "initializer" if it is a constructor or * an ...

  6. Java类文件结构及javac的ClassReader类解读

    首先来看一下ClassFile,类注释如下: A JVM class file. Generic Java classfiles have one additional attribute for c ...

  7. C#封装CRUD到SqlHelper类解读

    1.简单说明一下,一般情况下,数据库连接字符串是在App.config文件中进行配置,然后再在代码中进行引用.因此,我们在这里先看一下App.config文件. 首先看需要添加的内容: 参数说明: n ...

  8. JDK常用类解读--StringBuffer、StringBuilder

    上一篇博客讲到String对象一旦被创建该内容就不能被修改了如: String s = "hello world"; s.substring(6); s.replace(" ...

  9. JDK常用类解读--String

    一.字符串的不变性: 文章使用的源码是jdk1.8的.(下同) 1.首先可以看到`String`是`final`类,说明该类不可继承,保证不会被子类改变语义 2.String的值实际上就是一个字符数组 ...

随机推荐

  1. 转载VC6.0 子窗口和父窗口

    这个是我周一在一家公司做的上机题中的一道,当场没做出来.我当时只跟考官说了设计思路,是带回来查了几本资料书之后才完成的.因为有半个学期没用VC开发了……,最近一直都在实践ASP.NET相关的…… 建立 ...

  2. Concurrent Request:Inactive phase,No Manager status

    Symptom 随便submit一个request,发现几乎所有的Concurrent Manager都为No Manager状态,Phase为Inactive. Solution 一个Concurr ...

  3. Windows 以及 Xcode下编译调试 libcurl 源码

    curl 这个工具大家都很熟悉. 前几天因为要跟踪curl的实现细节, 不得不设法搭建curl的调试工程. 我们分别在windows visual studio 和 mac 上的 xcode 下搭建调 ...

  4. IDEA配置hibernate

    当做完struts2的demo之后,发现这些和myeclipse下面几乎没有差别. 唯一觉得不好的就有一点,model的映射文件 .hbm.xml这个无法通过model来生成,所以是手写,有点麻烦.这 ...

  5. TSQL--逻辑查询处理

    1. 查询处理可分成逻辑处理和物理处理,逻辑处理上各阶段有特定的顺序,但为优化查询,在保证结果集正确的条件下,物理处理顺序并不按照逻辑处理顺序执行,如果在INNER JOIN时,WHERE语句中的过滤 ...

  6. mysql 数据库或者表空间使用查询

    直接上语句 查所有数据库占用空间大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data ...

  7. windows 10 自适应布局

    https://msdn.microsoft.com/library/windows/apps/dn894631.aspx Use visual state triggers to build UI ...

  8. Verify the Developer App certificate for your account is trusted on your device.

    1.报错内容 Could not launch "CH5203" Verify the Developer App certificate for your account is ...

  9. 使用git提交代码流程

    一.拉取最新代码 一般在本地进行开发时,都是切换到自己的dev分支进行开发,当开发完成需要进行代码提交,在进行代码提交前需要先进行拉取远程仓库代码,进行更新,但是此时会提示需要将本地代码进行commi ...

  10. 《快学Scala》第八章 继承