如何在web应用程序中指定JavaBean中的文件路径?

如何在web应用程序中指定JavaBean中的文件路径?,java,managed-bean,Java,Managed Bean,我想从src/DataTable/中的IndexBean.java中的WebContent/resources/db/中读取models.txt。如何在中设置文件路径 sc = new Scanner(new File(filePath)); 我知道我可以通过绝对路径实现这一点,但我想知道如何在相对路径中实现这一点 另一件有趣的事是: 在IndexBean.java中,如果我运行以下代码,我将获得eclipse.exe的路径。而如果我在testFileRead.java中运行的代码与不是Ja

我想从src/DataTable/中的IndexBean.java中的WebContent/resources/db/中读取models.txt。如何在中设置文件路径

sc = new Scanner(new File(filePath));
我知道我可以通过绝对路径实现这一点,但我想知道如何在相对路径中实现这一点

另一件有趣的事是: 在IndexBean.java中,如果我运行以下代码,我将获得eclipse.exe的路径。而如果我在testFileRead.java中运行的代码与不是JavaBean的包中运行的代码相同,我将获得应用程序工作区的路径。有人能解释一下吗?谢谢

File dir1 = new File("..");
try {
    System.out.println("Current dir : " + dir1.getCanonicalPath());
} catch (IOException e1) {
    e1.printStackTrace();
}

首先,此类内部文件应位于不可访问的位置,即
WebContent/WEB-INF

您可以获得一个文件系统文件:

File file = request.getServletContext().getRealPath("/resources/db/models.txt");
如果将文件存储为真实资源(在类路径中),则可以使用:

InputStream in = getClass().getResourceAsStream("/db/models.txt");
请指定字符编码:

sc = new Scanner(new File(filePath), "UTF-8");
因此,无论是在Windows下开发还是在Linux服务器上部署,都使用相同的编码。因为默认编码依赖于平台



首先,此类内部文件应位于不可访问的位置,即
WebContent/WEB-INF

您可以获得一个文件系统文件:

File file = request.getServletContext().getRealPath("/resources/db/models.txt");
如果将文件存储为真实资源(在类路径中),则可以使用:

InputStream in = getClass().getResourceAsStream("/db/models.txt");
请指定字符编码:

sc = new Scanner(new File(filePath), "UTF-8");
因此,无论是在Windows下开发还是在Linux服务器上部署,都使用相同的编码。因为默认编码依赖于平台



我认为@Joop Eggen为您提出了最好的解决方案。然而,有时您可以将环境变量设置为文件路径,并在将代码推送到不同的环境中时对其进行更改

 String dir = System.getProperty("user.dir");

我认为@Joop Eggen为您提出了最好的解决方案。然而,有时您可以将环境变量设置为文件路径,并在将代码推送到不同的环境中时对其进行更改

 String dir = System.getProperty("user.dir");

这个问题与Eclipse、JSF和JavaBeans无关。同样,如果您使用的是托管bean,请这样称呼它们,而不是java bean。这个问题与Eclipse、JSF和JavaBeans无关。同样,如果您使用的是托管bean,那么就这样调用它们,而不是java bean。对于动态数据,尤其是您写入的文件,这是非常明智的。然后,您可以在不使用该文件的情况下部署.war。或者大量上传文件。特别是对于动态数据,即您写入的文件。然后,您可以在不使用该文件的情况下部署.war。或者大量文件上传。那么我应该把资源文件夹移到WEB-INF下吗?为什么?谢谢我想我应该将请求声明为HttpServletRequest,它应该是字符串filePath(而不是File File)=request.getServletContext().getRealPath(“/resources/db/models.txt”);?正确的。ServletRequest可能被强制转换为HttpServletRequest。添加了如何从JSF检索ServletContext。所以我应该移动WEB-INF下的resources文件夹?为什么?谢谢我想我应该将请求声明为HttpServletRequest,它应该是字符串filePath(而不是File File)=request.getServletContext().getRealPath(“/resources/db/models.txt”);?正确的。ServletRequest可以强制转换为HttpServletRequest。添加了如何从JSF检索ServletContext。