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

来源:互联网 发布:张锦洪画家淘宝网 编辑:程序博客网 时间:2024/06/16 22:40
近来在项目中遇到一个关于获取项目目录下配置文件的问题?在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.txtURL url = Test.class.getResource("/config/test.txt");System.out.println("test.txt path:" + url);// 获取test.txturl = 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 pathurl = 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/GetDirectorytest.txt path:file:/home/lyh/workspace/GetDirectory/bin/config/test.txttest.txt path:file:/home/lyh/workspace/GetDirectory/bin/test.txtclass path:/home/lyh/workspace/GetDirectory/bincodesource path:file:/home/lyh/workspace/GetDirectory/bin/canonicalpath:/home/lyh/workspace/GetDirectoryabsolutepath:/home/lyh/workspace/GetDirectory
  • 在控制台中运行命令lyh@lyh-pc:~$ java -jar GetDirectory.jar的结果为:
current diretory:/home/lyhtest.txt path:jar:file:/home/lyh/GetDirectory.jar!/config/test.txttest.txt path:jar:file:/home/lyh/GetDirectory.jar!/test.txtclass path:GetDirectory.jarcodesource path:file:/home/lyh/GetDirectory.jarcanonicalpath:/home/lyhabsolutepath:/home/lyh

结果分析

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

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

总结可以得出当用Test.class.getResource()找文件时,就是在class目录(即System.getProperty("java.class.path")的结果)中找文件。

0 0
原创粉丝点击