0

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

sc = new Scanner(new File(filePath));

我知道我可以通过绝对路径来实现这一点,但想知道如何在相对路径中做到这一点。

捕获

另一个有趣的事情是:在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();
}
4

2 回答 2

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();
于 2013-06-06T15:01:26.783 回答
0

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

 String dir = System.getProperty("user.dir");
于 2013-06-06T15:05:14.450 回答