Java.io 获取相对路径文件

Java.io 获取相对路径文件代码

package org.firstgame.test;

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

public class PathTest {

/**
   在 E:\gamedev下执行
   java org.firstgame.test.PathTest
*/
public static void main(String[] args) throws IOException {
   //得到执行时的classpath路径 /E:/workspace/FirstGame/bin/
   URL url = Thread.currentThread().getContextClassLoader().getResource("");
   String path = "" ;
   if(url != null) {
    path = url.getPath();
   System.out.println("1:" + path);
   }
 
   //得到执行时的classpath路径 /E:/workspace/FirstGame/bin/
   url = PathTest.class.getClassLoader().getResource("");
   if(url !=null){
    path = url.getPath();
      System.out.println("2:" + path);
   }
 
   //得到执行时的classpath路径 /E:/workspace/FirstGame/bin/
   url = ClassLoader.getSystemResource("");
   if(url != null) {
    path = url.getPath();
       System.out.println("3:" + path);
   }

//执行时的应用根目录 E:\workspace\FirstGame
   File f = new File("");
   path = f.getCanonicalPath();//标准路径,跟absolutePath只差一个文件名
   System.out.println("4:" + path); 
 
   //得到执行时.class所在的目录 /E:/workspace/FirstGame/bin/
   url = PathTest.class.getResource("");
   if(url !=null) {
    path = url.getPath();
    System.out.println("5:" + path);
   }
 
   url = Thread.currentThread().getContextClassLoader().getResource("org/firstgame/test/PathTest.class");
 
   if(url != null) {
    path = url.getPath();
   System.out.println("6:" + path);
   }
    url = PathTest.class.getClassLoader().getResource(".project");
    if(url !=null){
     path = url.getPath();
       System.out.println("7:" + path);
    }

url = PathTest.class.getResource("/org/firstgame/test/PathTest.class");
    if(url !=null) {
     path = url.getPath();
     System.out.println("8:" + path);
    }
}

}


但是如果该类封装在Jar包中,则路径只使用空字符串""做路径会返回NULL(使用getResource时)
同样单独使用 "/", "." 都会有问题。

另外,对于PathTest.class,定位资源时最好加"/"前缀,而使用PathTest.class.getClassLoader()方式时,则不能加"/"前缀。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpfxz.html