您的位置:首页 > 编程语言 > Java开发

Java学习笔记之获取当前目录或文件

2014-11-13 09:59 726 查看
近来在项目中遇到一个关于获取项目目录下配置文件的问题?在eclipse中可以正确获取配置文件,但是当项目打包成jar包后就出现"找不到文件"的异常。特此研究了一下java中获取当前目录和获取项目中文件的方法。


实验代码如下

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class Test {

public static void main(String[] args) {
// 获取当前程序执行的目录
String path = System.getProperty("user.dir");
System.out.println("current diretory:" + path);

// 获取/config/test.txt
URL url = Test.class.getResource("/config/test.txt");
System.out.println("test.txt path:" + url);

// 获取test.txt
url = Test.class.getResource("/test.txt");
System.out.println("test.txt path:" + url);

// 获取class目录
path = System.getProperty("java.class.path");
System.out.println("class path:" + path);

// 获取codesource path
url = Test.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println("codesource path:" + url);

// 获取当前程序目录
File file = new File("");
try {
System.out.println(file.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(file.getAbsolutePath());
}

}


项目目录




运行结果

在eclise中的运行的结果为:

current diretory:/home/lyh/workspace/GetDirectory
test.txt path:file:/home/lyh/workspace/GetDirectory/bin/config/test.txt
test.txt path:file:/home/lyh/workspace/GetDirectory/bin/test.txt
class path:/home/lyh/workspace/GetDirectory/bin
codesource path:file:/home/lyh/workspace/GetDirectory/bin/
canonicalpath:/home/lyh/workspace/GetDirectory
absolutepath:/home/lyh/workspace/GetDirectory


在控制台中运行命令
lyh@lyh-pc:~$ java -jar GetDirectory.jar
的结果为:

current diretory:/home/lyh
test.txt path:jar:file:/home/lyh/GetDirectory.jar!/config/test.txt
test.txt path:jar:file:/home/lyh/GetDirectory.jar!/test.txt
class path:GetDirectory.jar
codesource path:file:/home/lyh/GetDirectory.jar
canonicalpath:/home/lyh
absolutepath:/home/lyh


结果分析

从中可以看出各中获取目录或文件的方法在eclipse中和命令行中结果的区别:

System.getProperties("user.dir")
在eclipse中结果就是项目的根目录,然而在终端执行时结果就是当前执行命令的目录(与
pwd
命令结果一样)。
Test.class.getResource()
方法在eclipse中会在项目的
/bin
文件夹下找文件,而在终端中则在jar包中的根目录找文件。

总结可以得出当用
Test.class.getResource()
找文件时,就是在class目录(即
System.getProperty("java.class.path")
的结果)中找文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐