Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  java  >  正文 java.io.File中的绝对路径和相对路径.

java.io.File中的绝对路径和相对路径.

发布时间:2017-12-07   编辑:www.jquerycn.cn
jquery中文网为您提供java.io.File中的绝对路径和相对路径.等资源,欢迎您收藏本站,我们将为您提供最新的java.io.File中的绝对路径和相对路径.资源
File类是用来构造文件或文件夹的类,在其构造函数中要求传入一个String类型的参数,用于指示文件所在的路径.以前一直使用绝对路径作为参数,其实这里也可以使用相对路径.使用绝对路径不用说,很容易就能定位到文件,那么使用了相对路径jvm如何定位文件的呢?
按照jdk Doc上的说法”绝对路径名是完整的路径名,不需要任何其他信息就可以定位自身表示的文件。相反,相对路径名必须使用来自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 "user.dir" 指定,通常是 Java 虚拟机的调用目录.”
相对路径顾名思义,相对于某个路径,那么究竟相对于什么路径我们必须弄明白.按照上面jdk文档上讲的这个路径是”当前用户目录”也就是”java虚拟机的调用目录”.更明白的说这个路径其实是我们在哪里调用jvm的路径(而非jvm所在的目录,是在指定目录中去调用jvm).
举个例子:
假设有一java源文件Example.java在d盘根目录下,该文件不含package信息.我们进入命令行窗口,然后使用”d:”命令切换到d盘根目录下,然后用”javac Example.java”来编译此文件,编译无错后,会在d盘根目录下自动生成”Example.class”文件.我们在调用”java Example”来运行该程序.此时我们已经启动了一个jvm,这个jvm是在d盘根目录下被启动的,所以此jvm所加载的程序中File类的相对路径也就是相对这个路径的,即d盘根目录:D:". 同时,当前用户目录”也是D:.在System.getProperty(“user.dir”);系统变量”user.dir”存放的也是这个值.
我们可以多做几次试验,把”Example.class”移动到不同路径下,同时在那些路径下,执行”java Example”命令启动jvm,我们会发现这个”当前用户目录”是不断变化的,它的路径始终和我们在哪启动jvm的路径是一致的.
<pre>1 package hello;
2 public class Test {
3 public static void main(String[] args) {
4 System.out.println("当前用户目录是:" System.getProperty("user.dir"));
5 }
6 }</pre>
复制代码
这里我放置在D盘中编译,运行
在D盘中有如下目录:
可以看见如果加入了package可得目标类所在的包的当前目录(D:/),而不是目标类所在的目录(D:/hello),注意这里的区别.
如果将整个包(D:/hello)移动至其他盘中,如E:,重新编译可得如下结果:
搞清了这些,我们可以使用相对路径来创建文件,例如:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy5307')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy5307>
File file = new File(“a.txt”);
File.createNewFile();
假设jvm是在”D:”下启动的,那么a.txt就会生成在D:a.txt;
此外,这个参数还可以使用一些常用的路径表示方法,例如”.”或”.”代表当前目录,这个目录也就是jvm启动路径.所以如下代码能得到当前目录完整路径:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy6145')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy6145>
File f = new File(“.”);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);//D:
最后要说说在eclicatch (Exception e) {
e.printStackTrace();
}
}
}
我试着把test.txt拷贝在src下与FileDemo.java放在同一个目录下结果还是显示false。后来我也试着把test.txt拷贝在bin生成的.class文件下,结果还是不行。
于是我想到了一个方法:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy9959')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy9959>File file = new File("a.txt");
file.createNewFile();
 
我创建这样一个文本文件,看到底它创建在哪里。结果跑到源文件下,发现原来这个文件是创建了与.classpath同一目录下,现在终于知道这个相对路径的问题"
 
Tomcat中的情况:
如果在tomcat中运行web应用,此时,如果我们在某个类中使用如下代码:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy5509')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy5509>
File f = new File(“.”);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);
那么输出的将是tomcat下的bin目录.我的机器就是” D:workserverjakarta-tomcat-5.0.28bin.”,由此可以看出tomcat服务器是在bin目录下启动jvm的.其实是在bin目录下的” catalina.bat”文件中启动jvm的.

您可能感兴趣的文章:
file.getPath() getAbsolutePath() getCanonicalPath()区别
jsp中获取绝对路径和相对路径方法
java中获得当前文件路径多种方法
google怎么看待“绝对URL”和“相对URL”?
asp.net将绝对路径转换为虚拟路径的代码举例
java.io.File中的绝对路径和相对路径.
PHP 获取文件路径(__FILE__的妙用)
绝对 & 相对URL对搜索排名的影响
绝对地址与相对地址对网站排名的影响
Node.js Path 模块

[关闭]