我想在src / DataTable /中的 IndexBean.java 中的WebContent / resources / db /中读取 models.txt 。如何在
中设置filePathsc = 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();
}
答案 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");