java获取文件:getResource()和getResourceAsStream以及路径问题

java获取文件分两种情况:编译前获取和编译后获取。

编译前通常用File类,如 File file = new File("D:/test.txt")

编译后从.class文件为着手点,有File file = new File(XX.class.getResource("test.txt").getFile())和InputStream inputStream=XX.class.getResourceAsStream("test.txt")

具体方法:

工程目录如下:

|--project

   |--src

       |--java

           |--Test.java

           |--file1.txt       

  |--resource

   |--file

           |--file2.txt

           |--file3.txt

 

获取编译前file1文件

方法一:File file = new File("E:/JAVA/IntelliJIDEA/workspace/project/src/java/file1.txt");
方法二:File file = new File("/src/java/file1.txt");

获取编译后file2与file3文件

file2.txt:

File file2 = new File(Test.class.getResource("file/file2.txt").getFile());

File file2 = new File(Test.class.getClassLoader().getResource("file/file2.txt").getFile());

file3.txt:

File file3 = new File(Test.class.getClassLoader().getResource("file3.txt"n).getFile());

 注:

1.Test.class.getResource(String path) :path不以”/“开头时默认是从此类所在的包下去资源,以"/"开头则是从ClassPath跟下获取。其只是通过path构造一个绝对路径,最总还是由ClassLoader获取资源。

2.Test.class.getClassLoader.getResource(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。 

3. ”/“代表了工程的根目录,如工程名为 project 。”/“代表了project;前面没有”/“代表当前类的目录。

4.getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,再new InputStream(file)一样的结果。

上一篇:WebAssembly 可以用来保护小程序代码吗?


下一篇:java文件相对绝对路径和工程路径