美文网首页
class.getResource()的用法

class.getResource()的用法

作者: LpSir | 来源:发表于2016-10-18 23:56 被阅读0次

前几天改了一个小bug,java文件导出jar包后相对路径失效的问题,用java获取文件,听似简单,但对于像我这种java基础较为薄弱的人来说,还是掌握颇浅。下面来介绍一下Class中getResource()方法的简单使用。

用java获取文件,相信大家最经常使用的,就是java的File类,如果想取得C:/XX.txt文件,就会这样 File file = new File("C:/XX.txt");不过这样有什么问题呢,相信大家也都知道,会造成路径硬编码。不过在现实应用来说,java最终生成的应用都会部署到Windows外的操作系统中,对于某些系统来说,如果使用这样的硬编码,会直接造成失败,所以,我们应该尽量避免硬编码,即避免使用绝对路径。

Class类中为我们提供了getResource()getResourceAsStream方法,但是包括我在内的很多人都不懂它的用法,在此给没用过此类的人解释一点点。

比如我们有一下目录
|--project |--src |--Test.java |--file1.txt |--file2.txt |--bin |--Test.class |--file3.txt |--file4.txt
在上面的目录中,有src目录,这是一个java源文件目录,有一个bin目录,存放的是java编译后的(.class)二进制文件的存放目录,那么我们该如何来获取file1.txt ,file2.txt ,file3.txt ,file4.txt四个文件呢?

首先讲file3.txt ,file4.txt

file3.txt
方法一:
new File(Test.class.getResource("file3.txt").getFile());
方法二:
new File(Test.class.getResource("/javaapplication/file3.txt").getFile());
方法三:
File(Test.class.getClassLoader().getResource("javaapplication/file3.txt").getFile());

file4.txt:
方法一:
new File(Test.class.getResource("/file4.txt").getFile());
方法二:
new File(Test.class.getClassLoader().getResource("file4.txt").getFile());

然而file1.txt ,file2.txt不能使用class.getResource()这种方法获得,它们的获取方法只能使用它们的绝对路径c:/project/src/file2.txt

总结一下,就是你想获取文件,应该以最终生成的class文件为着手点,不要以.java文件路径为着手点,因为java是编译型语言。getResource()方法可以定位准确定位class文件所在的根目录。

相关文章

网友评论

      本文标题:class.getResource()的用法

      本文链接:https://www.haomeiwen.com/subject/logtuttx.html