我正在编写一个简单的JSF应用程序,并试图使用Class
、ClassLoader
和URL
获取一个不起作用的资源(database.properties文件(。url为空,我不知道为什么。我做了很多研究,但没有成功。
代码:
Class cls = Class.forName("<packagename>.SimpleDataSource");
ClassLoader cLoader = cls.getClassLoader();
URL url = cLoader.getResource(fileName); // fileName = "database.properties" w/o the double quote
FileInputStream in = new FileInputStream(url.getFile());
感谢您对Sandeep的评论,它很有帮助。我发现我的财产文件放错了地方。然后我把它移到了java资源文件夹下的src文件夹中,现在我的属性文件被加载了。我现在有一个新问题,但如果我不能解决,我会启动一个新线程。
一旦有了URL,就可以使用url.openStream()
从中获取InputStream
,也可以首先简单地使用cLoader.getResourceAsStream(...)
。您当前的方法
FileInputStream in = new FileInputStream(url.getFile());
将在某些平台上工作,但不是所有平台,并且仅当您的应用程序从磁盘上的目录运行时。如果您的类和资源被打包到一个JAR中,它将失败,但如果您使用getResourceAsStream
,它将从一个JAR和一个未打包的目录中工作。