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

绝对路径: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

Java 路径问题的相关文章

java获得平台相关的行分隔符和java路径分隔符的方法

System.getProperties(): 行分隔符在windows 下是 \r\n,在Linux下面是 \n, 在Mac下是 \r路径分隔符在windows下是 \ ,在LInux下是 / System.getProperty("file.separator") java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.

java路径中的空格问题(转)

java路径中的空格问题 1. URLTest.class.getResource("/").getPath(); URLTest.class.getResource("/").getFile(); URLTest.class.getClassLoader().getResource("").getPath(); Thread.currentThread().getContextClassLoader().getResource("&q

Java路径问题终于解决方式—可定位全部资源的相对路径寻址

1.在Java项目中,应该通过绝对路径訪问文件.下面为訪问的经常用法: 第一种方法:类名.class.getResource("/").getPath()+文件名称 另外一种方法:Thread.currentThread().getContextClassLoader().getResource("").getPath()+文件名称[主要使用] 如果文件夹结构例如以下 如今src文件夹下的类文件须要訪问config文件夹下的配置文件. 2.使用第一种方法 new F

Java路径问题最终解决方案—可定位所有资源的相对路径寻址

1.在Java项目中,应该通过绝对路径访问文件,以下为访问的常用方法: 第一种方法:类名.class.getResource("/").getPath()+文件名 第二种方法:Thread.currentThread().getContextClassLoader().getResource("").getPath()+文件名[主要使用] 假设目录结构如下 现在src目录下的类文件需要访问config目录下的配置文件. 2.使用第一种方法 new FileInput

Java路径问题解决方案汇集

Java路径中的空格问题1. URLTest.class.getResource("/").getPath(); URLTest.class.getResource("/").getFile(); URLTest.class.getClassLoader().getResource("").getPath(); Thread.currentThread().getContextClassLoader().getResource("&qu

Java 路径

http://swiftlet.net/archives/713 Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝对路径.所以在Java中文件路径问题无非归结为一点:找基点,也就是在某种环境下(web.j2ee或jar包等)通过合适的方式找到一个稳定的基点,然后通过这个基点找到你要的文件或资源.Java中的基点有哪些呢?大致总结一下有以下几种:(1)classpath如果你要找的资源在classpath下,那么通过classpath这个基点是比较合适的,而取得这个

java路径问题

使用了java这么久一直对java获取路径存在困惑,将一些常用的获取路径方式记录如下: val property = System.getProperty("user.dir"))以上是获取你的项目路径 Thread.currentThread().contextClassLoader.getResourceAsStream(fileName)获取classpath下的文件

Java路径操作具体解释

1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个 URL绝对路径. 相对路径:相对与某个基准文件夹的路径.包括Web的相对路径(HTML中的相对文件夹),比如:在 Servlet中."/"代表Web应用的根文件夹.和物理路径的相对表示.比如:". /" 代表当前文件

Java路径操作详解

1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个 URL绝对路径. 相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在 Servlet中,"/"代表Web应用的根目录.和物理路径的相对表示.例如:". /" 代表当前目录, &q