path
Windows操作系统根据path环境变量查找命令,若要使用JDK的工具命令,例如java、javac,必须将JDK工具命令所在目录配置在path变量中。
JDK安装路径下的bin目录,存放了JDK的各种工具命令。
%JAVA_HOME%\bin;
%JAVA_HOME%指JDK安装目录
classpath
classpath用于指定java运行时,jvm寻找class、jar文件的存储目录。只跟java运行有关,跟编译无关。
- JDK1.5之后不用设置CLASSPATH环境变量,JRE会自动搜索当前路径下的类文件 ,而且使用java的编译和运行工具时,系统可以自动加载dt.jar和tool.jar文件中的java类,因此不再需要设置该环境变量
- 当然1.5之后也可以设置CLASSPATH变量,一旦设置了该变量,JRE会按照指定的路径搜索java类,这意味着该环境变量中不包含(.),JRE不会从当前路径下搜索java类
.;%JAVA_HOME%\lib;
.指当前目录
多路径用分号隔开,Linux系统用:隔开
DOS命令运行java程序
编译java程序
命令:javac -d destdir srcFile
- srcFile指java源文件所在的位置
- -d destdir 是javac命令的选项,用以指定编译生成的字节码文件的存放路径
- 只需指定目标文件存放路径,无需指定字节码文件的文件名,因为javac编译后生成的字节码文件有默然的文件名:以源文件所定义类的类名作为主文件名,以.class作为后缀名
- 如果一个源文件定义了多个类,将编译生成多个字节码文件
- -d 选项可省略,生成的字节码文件放在当前路径下
先进入HelloWord.java文件所在目录
运行class文件
命令:java java类名
- java命令后的参数是java类名,而不是字节码文件的文件名,也不是java源文件名
先进入HelloWord.class文件所在目录
- java -classpath dir1;dir2;dir3;…; java类名
如果运行java程序时z定了-classpath选项的值,JRE将严格按照-classpath指定的路径搜索java类,CLASSPATH环境变量指定的搜索路径不再有效,除非在-classpath选项的值中引用该变量。
例如:
java -classpath %CLASSPATH%;.;./lib/* HelloWord
- %CLASSPATH%:先从CLASSPATH环境变量配置的路径下查找
- “.”:从当前目录查找
- “./lib/*”:当前目录中没有时,再从当前目录下的lib文件下的所有jar文件中查找,直到找到
eclipse等开发环境中,往往不去读操作系统配置的CLASSPATH,而是根据bulid config自动生成classpath
注意事项
- class文件的查找方式:根据classpath配置的先后顺序依次查找,找到则停止。因此若后续路径中存在同名class文件,那么调整classpath路径配置顺序会导致程序运行结果的变化。
- classpath的第一个路径非常重要!为该java程序运行的根路径。
- classpath配置的目录中,如果存放jar文件,该文件里的class文件不会被读取,只读取以目录结构存放的class文件
getResource()
xxx.class.getResource(“”).getPath() | 获取xxx类所在路径,不包括xxx类的名称 |
---|---|
xxx.class.getResource(“/”).getpath() | 获取java运行的根路径:classpath中配置的第一个目录 |
xxx.class.getClassLoader().getResource(“”).getPath() | 获取java运行的根路径,因为ClassLoader处于根路径 |
xxx.class.getClassLoader().getResource(“/”) | 错误写法!!!获取到null |
System.getProperty(“user.dir”) | java运行目录,可能与java根路径不同 |
获取文件的具体情况
src包下
xxx.class.getResource("/").getPath() + "source.xml";// 先获取根路径
xxx.class.getClassLoader().getResource("source.xml").getPath();// 先获取ClassLoader路径
src并列包下
System.getProperty("user.dir") + File.separator + "my file" + File.separator + "source.xml"// 先获取项目所在路径
类所在包下
xxx.class.getResource("").getPath()+"source.xml";// 先获取类所在目录
WebRoot目录
String path = xxx.class.getResource("/").getPath()
if(path.indexOf("WEB-INF") > 0){
path = path.substring(0,path.indexOf("WEB-INF"));
}
path = path+"css"+File.separator+"home.css";