获取当前程序(或类文件)所在的目录可以用以下3个方法:
- 使File类提供的方法来获取当前路径用
- 使用Class类的getResource("").getPath()获取当前.class文件所在的路径(直接获取存在中文路径会存在乱码问题,下节介绍解决方式)
- 使用System.getProperty("user.dir")获取当前程序的根目录
使File类提供的方法来获取当前路径用,eclipse中获取的是项目的路径;jar包获取的是jar所在路径;不存在中文乱码问题
File directory1 = new File(""); //实例化一个File对象。参数不同时,获取的最终结果也不同 System.out.println("第三种方式:【"+directory1.getCanonicalPath()+"】"); //获取标准路径。该方法需要放置在try/catch块中,或声明抛出异常 System.out.println("第三种方式:【"+directory1.getAbsolutePath()+"】"); //获取绝对路径。 File directory2 = new File("123.txt"); //实例化一个File对象。参数不同时,获取的最终结果也不同 System.out.println("第三种方式:【"+directory2.getCanonicalPath()+"】"); //获取标准路径。该方法需要放置在try/catch块中,或声明抛出异常 System.out.println("第三种方式:【"+directory2.getAbsolutePath()+"】"); //获取绝对路径。打印结果:
eclipse:
第三种方式:【E:\软件安装包\郭周钢安装包\pathtest】
第三种方式:【E:\软件安装包\郭周钢安装包\pathtest】
第三种方式:【E:\软件安装包\郭周钢安装包\pathtest\123.txt】
第三种方式:【E:\软件安装包\郭周钢安装包\pathtest\123.txt】jar包:
第三种方式:【E:\软件安装包\郭周钢安装包】
第三种方式:【E:\软件安装包\郭周钢安装包】
第三种方式:【E:\软件安装包\郭周钢安装包\123.txt】
第三种方式:【E:\软件安装包\郭周钢安装包\123.txt】
使用Class类的getResource("").getPath(),eclipse中获取的是class文件所在路径;jar包获取的是class文件所在路径,存在中文乱码。elclipse中class在项目目录bin下边;jar包实在jar! 下的bin目录
String path1=test.class.getResource("").getPath();
System.out.println("第一种方式:【"+path1+"】");
System.out.println("第一种方式:【"+test.class.getResource("123.txt").getPath()+"】");打印结果:
eclipse:
第一种方式:【/E:/%e8%bd%af%e4%bb%b6%e5%ae%89%e8%a3%85%e5%8c%85/%e9%83%ad%e5%91%a8%e9%92%a2%e5%ae%89%e8%a3%85%e5%8c%85/pathtest/bin/pathtest/】
第一种方式:【/E:/%e8%bd%af%e4%bb%b6%e5%ae%89%e8%a3%85%e5%8c%85/%e9%83%ad%e5%91%a8%e9%92%a2%e5%ae%89%e8%a3%85%e5%8c%85/pathtest/bin/pathtest/123.txt】
jar包:
第一种方式:【file:/E:/%e8%bd%af%e4%bb%b6%e5%ae%89%e8%a3%85%e5%8c%85/%e9%83%ad
%91%a8%e9%92%a2%e5%ae%89%e8%a3%85%e5%8c%85/pathtest.jar!/pathtest/】
第一种方式:【file:/E:/%e8%bd%af%e4%bb%b6%e5%ae%89%e8%a3%85%e5%8c%85/%e9%83%ad
%91%a8%e9%92%a2%e5%ae%89%e8%a3%85%e5%8c%85/pathtest.jar!/pathtest/123.txt】
使用System.getProperty("user.dir"),eclipse中获取的是项目的路径;jar包获取的是jar所在路径;不存在中文乱码问题
String path3= System.getProperty("user.dir");
System.out.println("第二种方式:【"+path3+"】");打印结果:
eclipse:
第二种方式:【E:\软件安装包\郭周钢安装包\pathtest】
jar包:
第二种方式:【E:\软件安装包\郭周钢安装包】
以下是以两种方式运行程序(使用Eclipse运行与使用jar包运行)时这些方法的使用情况(Eclipse中测试项目的根目录
为E:\软件安装包\郭周钢安装包\pathtest,jar包所在的路径为:E:\软件安装包\郭周钢安装包\pathtest.jar):
附:项目的包层次结构如下:
测试代码:
package pathtest;
import java.io.File;
import java.io.IOException;
public class test {
public static void main(String[] args) throws IOException {
String path1=test.class.getResource("").getPath();
System.out.println("第一种方式:【"+path1+"】");
System.out.println("第一种方式:【"+test.class.getResource("123.txt").getPath()+"】");
System.out.println("------------------------------------------------------------------------------");
String path3= System.getProperty("user.dir");
System.out.println("第二种方式:【"+path3+"】");
System.out.println("------------------------------------------------------------------------------");
File directory1 = new File(""); //实例化一个File对象。参数不同时,获取的最终结果也不同
System.out.println("第三种方式:【"+directory1.getCanonicalPath()+"】"); //获取标准路径。该方法需要放置在try/catch块中,或声明抛出异常
System.out.println("第三种方式:【"+directory1.getAbsolutePath()+"】"); //获取绝对路径。
File directory2 = new File("123.txt"); //实例化一个File对象。参数不同时,获取的最终结果也不同
System.out.println("第三种方式:【"+directory2.getCanonicalPath()+"】"); //获取标准路径。该方法需要放置在try/catch块中,或声明抛出异常
System.out.println("第三种方式:【"+directory2.getAbsolutePath()+"】"); //获取绝对路径。
}
}
eclipse运行结果:

jar包运行结果:


本文详细介绍了在Java中获取当前程序或类文件所在目录的三种方法,包括使用File类的方法、Class类的getResource方法以及System.getProperty方法,并对比了在Eclipse和jar包环境下各自的表现。


292

被折叠的 条评论
为什么被折叠?



