Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用java属性文件时应该使用哪个路径?_Java_Properties_Classpath_Relative Path - Fatal编程技术网

调用java属性文件时应该使用哪个路径?

调用java属性文件时应该使用哪个路径?,java,properties,classpath,relative-path,Java,Properties,Classpath,Relative Path,基本上,我的项目模型是这样设置的: 模型文件夹 -----src -----垃圾箱等 -----属性文件夹1 --------文件1.属性 --------File2.properties等 -----属性文件夹2 --------文件1.属性 --------File2.properties等 -----主属性文件1.属性 -----MainPropertiesFile2.properties 我正在尝试将它与我的视图一起使用,这是一个动态的Web项目,在更改后,我得到了要最终加载到Web项目

基本上,我的项目模型是这样设置的:

模型文件夹
-----src
-----垃圾箱等
-----属性文件夹1
--------文件1.属性
--------File2.properties等
-----属性文件夹2
--------文件1.属性
--------File2.properties等
-----主属性文件1.属性
-----MainPropertiesFile2.properties

我正在尝试将它与我的视图一起使用,这是一个动态的Web项目,在更改后,我得到了要最终加载到Web项目中的属性文件

foo.load(new FileInputStream("foo.properties"));  

foo.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(“foo.properties”)

将项目导出到JAR文件,然后将其包含在WEB-INF/lib中。但是,我必须向模型添加另一个方法,当我尝试测试该方法时,模型无法读取我的属性文件。我知道我可以使用具有完整路径的FileInputStream使属性文件在模型和视图中工作,但是还有其他选择吗

我不想每次切换计算机时都不断更改完整路径(我在工作时使用H:\username\…\Java\Workspace,而在家里它只是C:\Java\Workspace)。
我也不想把我的属性文件移到不同的文件夹;最后,我不想在每次测试模型或视图时更改加载属性文件的方式。
有没有办法做到这一点

这让我抓狂,我尝试了以下所有方法:

try 
    {
         foo.load(this.getClass().getResourceAsStream("foo.properties"));
        //foo.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("foo.properties"));
        //foo.getClass().getResourceAsStream("foo.properties");
        //foo.load(new FileInputStream("foo.properties"));

    } catch (IOException ex)
      {
          al.logIntoProgrammerLog(ex);
      }  
所有这些线要么在模型中工作,要么在视图中工作。是否有任何方法可以通过模型中的相对路径调用这些属性文件,然后以某种方式将模型与视图正确连接,以便找到并加载所有文件?
任何帮助都将不胜感激;我是Java新手,所以我可能错过了一些非常简单的东西。多谢各位

编辑:
很抱歉没有说明这一点,该模型是一个Java项目,而视图是一个在本地Tomcat服务器v6.0上运行的动态Web项目

更好的(我希望)解释:

“我的视图”有一个具有以下doPost方法的LoginServlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
   String username = request.getParameter("usernameField");
   String password = request.getParameter("passwordField");
   ActivityLogger al = new ActivityLogger();

   LoginController l_c = new LoginController();

   //loginUser method will call my UserStorage class and 
   //will return true if UserStorage finds the User with those credentials in the db
   //UserStorage is using a prepared sql statement stored in a properties file to find the User
   //That properties file is not being read unless I specify the full path to it.
   //Both Login and UserStorage are in the Model
   if(l_c.loginUser(username, password))
   {
      //take user to welcome page
   }
   else
      //display error
}

再次感谢

如果您在web应用程序中,您应该能够通过使用ServletContext的
getResourceAsStream()
获取路径(在webapp上下文中的相对路径,因此它可以在任何机器上工作)。例如,如果希望从servlet的
doGet()
方法获取路径:

public void doGet(HttpServletRequest request, HttpServletResponse response) {
  InputStream in = getServletContext().getResourceAsStream(<path>);
}
public void doGet(HttpServletRequest请求,HttpServletResponse响应){
InputStream in=getServletContext().getResourceAsStream();
}
  • 其中
    将是.properties文件的相对路径(即/WEB-INF/foo.properties,或该属性文件所在的位置…请查看部署文件夹以确定)

但在重读你的文章时,你的“模型”似乎不是一个网络应用,而你的“视图”是一个网络应用?也许您可以澄清一下这两个应用程序是否是两个不同的应用程序——一个可能是在servlet容器中运行的webapp(即Tomcat、Glassfish等),另一个是独立的应用程序?如果是这种情况,那么这更多的是共享文件问题,而不是“找不到资源”问题。对应用程序的性质稍作澄清将有助于引导正确的响应…

看看这篇文章,了解共享.properties文件的可能解决方案。但我建议你回顾一下这种方法,看看它是否真的是你想要的。更具体地说,如果.properties文件包含SQL查询,那么您确定在视图中需要它吗?听起来您可能想在那里进行一次彻底的分离。

但是我如何从模型本身访问这些文件呢?基本上,我的模型将用户存储在数据库中,并允许他们登录和注销。我的视图是一个简单的登录页面。当用户尝试登录时,视图从模型中调用LoginController。LoginController加载包含SQL查询的.properties文件以在数据库中查找用户。是的,对此表示抱歉。你说得对。我的模型不是一个webapp,我的视图是一个运行在tomcatv6.0上的webapp,更新了问题的更多细节。非常感谢。