Java 路径问题

来源:互联网 发布:php udp端口连接 编辑:程序博客网 时间:2024/05/16 10:52

一、classpath问题

        cmd下编译运行java,使用 e:/tmp 作为路径文件名可以和类名不同,但如果是public定义的类,则必须和文件名相同,但通常是一致的。情况1 单类不带包路径源代码 Test.javapublic class Test {public static void main(String[] args) {System.out.println("hello");}}编译 javac Test.java运行 java Test情况2 单类带包路径的源代码 Hello.javapackage 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.javapackage com.ny;import com.ny1.Hello3;public class Hello2 {public static void main(String[] args) {new Hello3().say();}}源代码 Hello3.javapackage 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:\tmppackage 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"); // 表示同Test2这个类平级的目录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页面的超连接hrefresponse.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");在java项目中,"./src/abc.properties" 这种写法通常用在测试例子中,.就是表示java命令的运行目录,在这个项目的目录下有如下目录:.settings、bin、src、.classpath、.project,所以可以通过src目录找到,但是在实际的运行项目,通常使用bin下的class文件,所以还是要使用 本文章中《二》中的读取方式。package test;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class Test2 {    public static void main(String[] args) throws IOException {        Properties properties = new Properties();          Class clazz = Test2.class;                    InputStream in = new FileInputStream("./src/abc.properties");                properties.load(in);           in.close();          System.out.println(properties);      }}


0 0
原创粉丝点击