maven java resources_Maven获取resources的文件路径、读取resources的文件

路径问题一切要看编译后的文件路径

比如,源文件路径是:

maven java resources_Maven获取resources的文件路径、读取resources的文件_第1张图片

而编译后的文件路径为:

maven java resources_Maven获取resources的文件路径、读取resources的文件_第2张图片

也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 my.txt 文件路径,

写法①:

//编译后,项目根路径,写法1

String url1 = A.class.getClassLoader().getResource("").toString();//编译后,项目根路径,写法2

String url2 = A.class.getResource("/").toString();//编译后,文件根路径

String url3 = A.class.getResource("").toString();

输出:

file:/D:/IdeaWorkspace/test-null-project/target/classes/file:/D:/IdeaWorkspace/test-null-project/target/classes/file:/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法②:

//还有一种getResource 后调用 getFile方法,就没有 [file:],而是以 [/D:xxx] 这样的格式

String url4 = A.class.getClassLoader().getResource("").getFile();

String url5= A.class.getResource("/").getFile();

String url6= A.class.getResource("").getFile();

System.out.println(url4);

System.out.println(url5);

System.out.println(url6);

输出:

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法③:

String url7 = A.class.getClassLoader().getResource("").getPath();

String url8= A.class.getResource("/").getPath();

String url9= A.class.getResource("").getPath();

System.out.println(url7);

System.out.println(url8);

System.out.println(url9);

输出:

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

至此,上面已经有多种获取文件路径的方式,既然拿到路径,就可以读取File 文件,进而读取文件了,如这是my.txt 的内容

maven java resources_Maven获取resources的文件路径、读取resources的文件_第3张图片

则读取文件内容的代码可以如下:

//获取路径

String filePath = A.class.getClassLoader().getResource("my.txt").getFile();

File my= newFile(filePath);

InputStreamReader isr= new InputStreamReader(newFileInputStream(my), StandardCharsets.UTF_8);

BufferedReader br= newBufferedReader(isr);

String lineTxt;while ((lineTxt = br.readLine()) != null) {

System.out.println(lineTxt);

}

br.close();

输出:

f9fa39b78237de8f5407eb0ee943fea9.png

扩展:

写法②getFile 跟写法③getPath 是有区别的,getResource 方法后返回的是一个 java.net.URL对象,那手动构造一个java.net.URL

URL url = new URL("https://www.baidu.com/img/baidu_jgylogo3.gif?param=1111¶m2=aaaaa");

System.out.println("getFile ==> " +url.getFile());

System.out.println("getPath ==> " + url.getPath());

输出:

getFile == > /img/baidu_jgylogo3.gif?param=1111¶m2=aaaaa

getPath==> /img/baidu_jgylogo3.gif

可以看出,getFile() 方法可以拿到参数值,而getPath() 就是只取文件名,JDK中文文档相关api如下:

83f777cae1d43c7a270fd63a54eb0c6c.png

maven java resources_Maven获取resources的文件路径、读取resources的文件_第4张图片

你可能感兴趣的:(maven,java,resources)