何时使用“getResourceAsStream”方法?

时间:2012-04-20 13:25:31

标签: java properties

我很困惑使用上述方法,因为在加载某些属性文件时,人们正在采用不同的方法...

Properties prop 
 = new Properties(new FileInputStream(new File("<path of the properties file>"));

很少有人在使用..

Properties prop 
 = new Properties(getClass().getResourceAsStream("<path of the properties file>"));

什么时候使用?

4 个答案:

答案 0 :(得分:7)

getResourceAsStream搜索给定文件/资源​​的classpath,它还可以从JAR内部提供InputStreams个资源。

因此,如果您的属性存在于物理文件系统的某个文件夹中(例如用户文件夹,...),请使用FileInputStream,如果文件嵌入在类路径中(例如作为JAR内的资源),请使用getResourceAsStream

答案 1 :(得分:2)

filesystem 读取文件时,请使用相对路径或绝对路径使用FileInputStream(File())。

当你的程序作为jar分发并且你需要加载一个jar内的文件时,你需要使用getResourceAsStream(),它将在 classpath 中搜索该文件,并且path是相对于类路径的。

答案 2 :(得分:0)

如果您100%确定文件位置不会在不同环境中发生变化,则可以使用第一种方法。这意味着有一个操作可以确保在所有环境中创建这些目录路径。另一方面,您可以灵活地更新属性文件而无需打开jar。

当您从类路径中读取时,第二种方法非常便携。但它的缺点是为每个属性更新重新捆绑jar文件。

所以,它基本上取决于你的用例。

答案 3 :(得分:-1)

当您从Jar中读取文件时。请使用classloader的getResource或getResoureAsstream。找到以下代码片段从Jar读取文件。上述方法无法从jar中读取文件。

for($i=0; $i<count($opcoes); $i++)
{
	if(!is_numeric($opcoes[$i]))
	{
		if(!mysqli_query($con, "INSERT INTO `atividades`(`id`, `descricao`) VALUES (NULL, '".$opcoes[$i]."')"))
		{
			$msg_caracteristicas[$i] = "A atividade n&atilde;o foi cadastrada, <strong>erro <a href='http://randomurl.com' target='_blank'>#".mysqli_errno($con)."</a></strong> - \"".mysqli_error($con)."\"";	
		}
		else
		{
			echo "<script>alert('deu certo');</script>";	
		}
	}
}