【遇见】---- Java 获取项目下文件路径方式总结

一、背景

  1. 使用开发工具:Eclipse
  2. 开发项目:Java Web 项目
  3. 问题重现:在几天前忙于一个急于上线的项目就没来得及分析总结,现在空下来了就好好整理一下,事情是这样的,那天我在 src 下新建了一个类型为 Source Folderresource资源文件夹(项目中还没有此类文件夹),然后再通过一个工具类获取 resource 下的文件,当时是使用代码 XXX.class.getClassLoader().getResource(filePath) 获取文件,在本机上测试没有问题,接下来上传代码到 SVN,项目经理测试功能,发现使用上述代码获取不到文件,然后仔细看了一下从 SVN 上更新下来的代码,发现 resource 文件夹标志和我本地的不一样。我本机的是在这里插入图片描述,从 SVN 下更新下来的是在这里插入图片描述,后面试着将 SVN 下更新下来的该文件夹进行重命名为 Source Folder 类型的文件夹就能获取到了。
      问题背景就描述到这里,接下来就有一个疑问:为什么将该资源文件夹上传 SVN 后就不是资源文件夹(Source Folder)了,而变成了文件夹(Folder) ?

二、原因分析

  带着上述问题,经过反复测试仔细研究发现,在 Eclipse 中新建一个 Source Folder 时,在项目中 .classpath 文件会增加一行信息,例如上面我创建了一个资源文件夹 resource 时就会在 .classpath 文件中增加一行代码 ,这行代码表示 resource 是一个资源文件夹。那么问题为什么将该资源文件夹上传 SVN 后就不是资源文件夹(Source Folder)了,而变成了文件夹(Folder) 这就迎刃而解了,是因为我在上传 SVN 时没有将更改后的 .classpath 文件上传 SVN ,这就造成了项目经理在更新项目后,项目不知道 resource 是资源文件夹,就给当成了文件夹处理。

三、总结

  后来想了想,在Java 项目中通过上述的方式获取文件可靠吗?在 Java Web 项目中有哪些获取文件的方式?
  带着这两个问题从网上找到了答案,然后自己又经过一番测试发现通过上述代码获取文件是可靠的(我那个文件是配置文件,不会改动)。

  首先是我新建一个 Java Web 项目,准备测试环境,目录结构如下:
【遇见】---- Java 获取项目下文件路径方式总结_第1张图片
编写测试类获取文件路径:

package com.util;

/**
* @Description 测试获取文件路径
* @author 欧阳
* @since 2019年1月28日 下午4:25:36
* @version V1.0
*/

public class Test {

	public static void main(String[] args) {
		//获取src/ClassPath下的文件 111.txt 的绝对路径
		System.out.println(Test.class.getClassLoader().getResource("111.txt").getPath());
		
		//获取 src/ClassPath的绝对路径
		System.out.println(Test.class.getClassLoader().getResource(".").getPath());
		//获取 src/ClassPath的绝对路径
		System.out.println(Test.class.getClassLoader().getResource("").getPath());
		//获取 src/ClassPath的绝对路径
		System.out.println(Thread.currentThread().getContextClassLoader().getResource(".").getPath());
		//获取 src/ClassPath的绝对路径
		System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());
				
		//获取项目的绝对路径
		System.out.println(System.getProperty("user.dir"));

		//获取当前类文件的绝对目录,不包括自己的上级目录
		System.out.println(Test.class.getResource(".").getPath());
		//获取当前类文件的绝对目录,不包括自己的上级目录
		System.out.println(Test.class.getResource("").getPath());
		
		//获取webRoot下文件(主要是通过上下文获取和通过request)
//		System.out.println(request.getSession().getServletContext().getRealPath("/resource"));
	}

}

获取 src / ClassPath 下文件路径有三种:

  1. Test.class.getClassLoader().getResource("111.txt").getPath();
  2. Test.class.getResource("").getPath();
  3. Thread.currentThread().getContextClassLoader().getResource(".").getPath();

获取 Webroot 下文件路径主要是通过上下文和request进行获取,这块就就演示了,有很明显的方法。

你可能感兴趣的:(➤,编程语言,#,Java,基础)