如何在Web应用程序中指定Java Bean中的文件路径?

时间:2013-06-06 14:52:44

标签: java managed-bean

我想在src / DataTable /中的 IndexBean.java 中的WebContent / resources / db /中读取 models.txt 。如何在

中设置filePath
sc = new Scanner(new File(filePath));

我知道我可以通过绝对路径实现这一目标,但想知道如何在相对路径中实现它。

capture

另一个有趣的事情是: 在 IndexBean.java 是Java Bean ,如果我运行以下代码,我将获得eclipse.exe的路径。如果我在 testFileRead.java 中在不是Java Bean 的同一个包中运行相同的代码,我将获得应用程序工作空间的路径。有人可以解释一下吗?谢谢!

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

2 个答案:

答案 0 :(得分:3)

首先,这些内部文件应位于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服务器上进行部署,都会使用相同的编码。因为默认编码与平台有关。


ServletContext servletContext = (ServletContext)
    FacesContext.getCurrentInstance().getExternalContext().getContext();

答案 1 :(得分:0)

我认为@Joop Eggen已经为您提出了最佳解决方案。但是,有时您可以将环境变量设置为文件路径,并且可以在将代码推送到不同环境时进行更改。

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