我很困惑使用上述方法,因为在加载某些属性文件时,人们正在采用不同的方法...
Properties prop
= new Properties(new FileInputStream(new File("<path of the properties file>"));
很少有人在使用..
Properties prop
= new Properties(getClass().getResourceAsStream("<path of the properties file>"));
什么时候使用?
答案 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ã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>";
}
}
}