java 获取当前程序的路径,路径中文乱码问题(一)

  获取当前程序(或类文件)所在的目录可以用以下3个方法:

  1.         使File类提供的方法来获取当前路径用
  2.         使用Class类的getResource("").getPath()获取当前.class文件所在的路径(直接获取存在中文路径会存在乱码问题,下节介绍解决方式
  3.         使用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):

java 获取当前程序的路径,路径中文乱码问题(一)_第1张图片

附:项目的包层次结构如下:
java 获取当前程序的路径,路径中文乱码问题(一)_第2张图片

 

测试代码:

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运行结果:

java 获取当前程序的路径,路径中文乱码问题(一)_第3张图片

jar包运行结果:

java 获取当前程序的路径,路径中文乱码问题(一)_第4张图片

你可能感兴趣的:(java,java基础,java,class路径)