多种情况下jar包获取文件的路径,读取文件

多种情况下jar包获取文件的路径

      • 代码
      • 一、idea运行情况
      • 二、jar包运行情况
      • 三、总结

代码

代码中,分别使用

  • AppMain.class.getResource
  • AppMain.class.getClassLoader().getResource
  • new File
  • System.getProperty
    来获取路径

其中resources文件夹还有一个a.json文件,模拟我们需要读取的资源

package com.zgd.demo.test.filepath;

import java.io.File;
import java.net.URL;
import java.nio.file.Path;

/**
 * AppMain
 *
 * @author zgd
 * @date 2020/2/18 15:03
 */
public class AppMain {
     


  public static void main(String[] args) {
     
    //获取当前文件所在的路径
    URL localPath = AppMain.class.getResource("");
    System.out.println("AppMain.class.getResource(\"\").getPath() = " + (localPath == null ? "NullPointerException" : localPath.getPath()));

    //获取当前文件所在的路径
    URL localPath2 = AppMain.class.getResource("a.json");
    System.out.println("AppMain.class.getResource(\"a.json\").getPath() = "  + (localPath2 == null ? "NullPointerException" : localPath2.getPath()));

    //获取项目根目录
    URL rootPath = AppMain.class.getResource("/");
    System.out.println("AppMain.class.getResource(\"/\").getPath() = "  + (rootPath == null ? "NullPointerException" : rootPath.getPath()));

    URL rootPath2 = AppMain.class.getResource("/a.json");
    System.out.println("AppMain.class.getResource(\"/a.json\").getPath() = "  + (rootPath2 == null ? "NullPointerException" : rootPath2.getPath()));


    URL cl = AppMain.class.getClassLoader().getResource("");

    URL cl2 = AppMain.class.getClassLoader().getResource("a.json");

    URL cl3 = AppMain.class.getClassLoader().getResource("/");

    System.out.println("AppMain.class.getClassLoader().getResource(\"\").getPath() = " + (cl == null ? "NullPointerException" : cl.getPath()));
    System.out.println("AppMain.class.getClassLoader().getResource(\"a.json\").getPath() = " + (cl2 == null ? "NullPointerException" : cl2.getPath()));
    System.out.println("AppMain.class.getClassLoader().getResource(\"/\").getPath() = " + (cl3 == null ? "NullPointerException" : cl3.getPath()));



    String f = new File("").getPath();
    System.out.println("new File(\"\").getPath() = " + f);

    //当前工程的绝对路径
    String absolutePath1 = new File("").getAbsolutePath();
    System.out.println("new File(\"\").getAbsolutePath() = " + absolutePath1);

    String absolutePath2 = new File("a.json").getAbsolutePath();
    System.out.println("new File(\"a.json\").getAbsolutePath() = " + absolutePath2);


    String absolutePath3 = new File("/").getAbsolutePath();
    System.out.println("new File(\"/\").getAbsolutePath() = " + absolutePath3);

    String absolutePath4 = new File("/a.json").getAbsolutePath();
    System.out.println("new File(\"/a.json\").getAbsolutePath() = " + absolutePath4);

    //获取工程目录
    File abc = new File("a.json");
    System.out.println("new File(\"a.json\").getPath() = " + abc.getPath());

    //获取绝对路径
    String absolutePath = abc.getAbsolutePath();
    System.out.println("new File(\"a.json\").getAbsolutePath() = " + absolutePath);


    //获取相对路径
    String path = abc.getPath();
    System.out.println("new File(\"a.json\").getPath() = " + path);

    System.out.println("new File(\"a.json\").exists() = " + abc.exists());

    // 获取工程路径
    String sp1 = System.getProperty("user.dir");
    System.out.println("System.getProperty(\"user.dir\") = " + sp1);
  }
  
}

一、idea运行情况

我的项目idea运行在: F:/work/test-filepath
我的包名是com.zgd.demo.test.filepath

AppMain.class.getResource("").getPath() = /F:/work/test-filepath/target/classes/com/zgd/demo/test/filepath/
AppMain.class.getResource(“a.json”).getPath() = NullPointerException
AppMain.class.getResource("/").getPath() = /F:/work/test-filepath/target/classes/
AppMain.class.getResource("/a.json").getPath() = /F:/work/test-filepath/target/classes/a.json
AppMain.class.getClassLoader().getResource("").getPath() = /F:/work/test-filepath/target/classes/
AppMain.class.getClassLoader().getResource(“a.json”).getPath() = /F:/work/test-filepath/target/classes/a.json
AppMain.class.getClassLoader().getResource("/").getPath() = NullPointerException
new File("").getPath() =
new File("").getAbsolutePath() = F:\work\test-filepath
new File(“a.json”).getAbsolutePath() = F:\work\test-filepath\a.json
new File("/").getAbsolutePath() = F:
new File("/a.json").getAbsolutePath() = F:\a.json
new File(“a.json”).getPath() = a.json
new File(“a.json”).getAbsolutePath() = F:\work\test-filepath\a.json
new File(“a.json”).getPath() = a.json
new File(“a.json”).exists() = false
System.getProperty(“user.dir”) = F:\work\test-filepath

可以看出,

  • AppMain.class.getResource 当前class文件的target位置
  • AppMain.class.getClassLoader().getResource 项目target位置
  • new File 项目位置
  • System.getProperty 项目位置

二、jar包运行情况

打成jar包
这次jar包在桌面:
F:\Users_F\zzzgd\Destop
结果:
多种情况下jar包获取文件的路径,读取文件_第1张图片

三、总结

  • AppMain.class.getResource 当前class文件的target位置
  • AppMain.class.getClassLoader().getResource 项目target位置
  • new File 项目位置
  • System.getProperty 项目位置

可以看出,如果你是要获取resources文件夹下的文件,使用第二种方式
如果要获取某个文件,在项目根目录和src平齐的,可以使用三四方式

你可能感兴趣的:(实践出真知,jar包,路径,类加载器,java)