一、classpath问题
cmd下编译运行java,使用 e:/tmp 作为路径 文件名可以和类名不同,但如果是public定义的类,则必须和文件名相同,但通常是一致的。 情况1 单类不带包路径 源代码 Test.java public class Test { public static void main(String[] args) { System.out.println("hello"); } } 编译 javac Test.java 运行 java Test 情况2 单类带包路径的 源代码 Hello.java package zhangsan.lisi; public class Hello { public static void main(String[] args) { System.out.println("hello"); } } 方法一: 编译 javac Hello.java 构建包层次 编译完成后将.class文件放到zhangsan/lisi文件夹下 方法二: 使用javac -d . Hello.java 将会按照Hello.java中的package路径来生成。 也可同时编译多个文件javac -d . A.java B.java 运行在zhangsan同层 java zhangsan.lisi.Hello 此时设置classpath:set classpath=e:/tmp,设置了classpath后,在其他盘符的任意位置,可执行java zhangsan.lisi.Hello。 情况3 两个类引用情况,两个类在同一个位置 主类在 E:\test\com\ny\Hello2.class 另一个类 E:\test\com\ny1\Hello3.class 源代码 Hello2.java package com.ny; import com.ny1.Hello3; public class Hello2 { public static void main(String[] args) { new Hello3().say(); } } 源代码 Hello3.java package com.ny1; public class Hello3 { public void say(){ System.out.println("nice"); } } 说明:Hello2.java 引用了 Hello3.java的函数,要先编译Hello3,然后Hello2才能引用到。 同时编译也可以 javac -d . Hello2.java Hello3.java 情况4 两个类的引用 另一个类在其他位置 主类在 E:\test\com\ny\Hello2.class 另一个类 E:\com\ny1\Hello3.class 在环境变量classpath中配置内容“.;e:\”,“.”标示当前路径,“e:\”标示Hello3所在的路径 可用命令方式修改:写法一:set classpath= (设置为空) 写法二:set classpath = .;e:\; classpath说明:编译器现在当前路径下找,如果找不到类就到classpath环境变量下的路径去找,找不到报错。
二、eclipse中java项目的路径问题
绝对路径:c:/a.txt、/var/xx/aa.txt 相对路径:比如在c:盘下,a.txt的完整路径为 c:/a.txt,相对路径就是 a.txt .表示当前文件夹, ..表示上级文件夹 例子:查看路径,不实用eclipse工具,使用命令行来编译执行,路径为e:\tmp package zhangsan.lisi; import java.io.File; public class PathTest { public static void main(String[] args) throws Exception { System.out.println(new File("a.txt").getAbsolutePath()); } } 编译:javac -d . PathTest.java 执行:java zhangsan.lisi.PathTest 结果为:e:\tmp\a.txt 将e:\tmp加入classpath,set classpath=e:\tmp,在f:盘下执行 java zhangsan.lisi.PathTest 结果为 f:\a.txt 根据上面的分析,可看到a.txt的默认路径为 执行java命令所在的路径。 在eclipse项目中建立 PathTest类进行路径测试,其路径为 E:\workspaceMy\Test\a.txt,a.txt所在的路径为 workspace\项目名,起始也就是java命令执行的路径。
在eclipse项目中,会将编译好的工程加到classpath中,也就是可以在classpath中拿到资源文件。 例子:获取classpath下的属性文件 package test; import java.io.InputStream; import java.util.Properties; public class Test2 { public static void main(String[] args) throws Exception{ Properties properties = new Properties(); Class clazz = Test2.class; //InputStream in = clazz.getResourceAsStream("my.properties"); //从classpath下来查找,知道找到位置,因为位置不确定 InputStream in = clazz.getResourceAsStream("/my.properties"); // /表示classpath的根路径,my.properties为在根路径下的文件,也就是bin的位置 properties.load(in); in.close(); System.out.println(properties); } } //结果能够独到 my.properties属性文件
每一个myeclipse工程下都有.classpath 与 .project文件 .classpath 说明引用jar的相关信息,将相应的类加到了classpath中 .project 说明工程的相关信息
三、eclipse中javaWeb项目的路径问题
/使用的区分 给服务器使用的: / 表示在当前web应用的根目录(webRoot下) 给浏览器使用的: / 表示在webapps的根目录下 1.转发 request.getRequestDispatcher("/target.html").forward(request, response); 2.请求重定向 response.sendRedirect("/day11/target.html"); 3.html页面的超连接href response.getWriter().write("<html><body><a href='/day11/target.html'>超链接</a></body></html>"); 4.html页面中的form提交地址 --这里需要加上项目名字 response.getWriter().write("<html><body><form action='/day11/target.html'><input type='submit'/></form></body></html>"); 在java项目中,. 代表java命令运行目录,在web项目中, . 代表在tomcat/bin目录。 应用如下方式获取路径 1. getRealPath读取,返回资源文件的绝对路径 String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); 2. getResourceAsStream() 得到资源文件,返回的是输入流 InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); 在Web项目中,不能再使用如下方式获取路径了 File file = new File("./src/a.txt");
时间: 2024-12-17 19:08:55