Java 路径问题

一、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项目的路径问题

将文件放到src下,编译后会放到bin中,也就是classpath中

public class Test {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//这个返回的是URI路径
		System.out.println(Test.class.getResource("")); // 当前类在bin的位置 E:/workspaceMy/Hello/bin/test/
        	System.out.println(Test.class.getResource("/")); // bin的位置 E:/workspaceMy/Hello/bin/
		System.out.println("====");
		//这个返回的是对象
        	System.out.println(Test.class.getClassLoader().getResourceAsStream(""));
		//方式1:这种方式 默认的目录是 E:\workspaceMy\Hello,eclipse默认的执行目录, 
		//     src 与 config.properties 平级
		//InputStream ips = new FileInputStream("config.properties");
		
		//方式2:getResourceAsStream 不可以以/开头要写出bin下的完整路径
		InputStream ips = Test.class.getClassLoader().getResourceAsStream("test/resources/config.properties"); 
		
		Properties props = new Properties();  
        	props.load(ips);  
        	ips.close(); //释放掉关联的物理资源,如果不关则对象回收之后,该资源还开着  
          
       	 	String name = props.getProperty("name");  
        	System.out.println(name);

	}
}


三、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");



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值