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

jdgnovmf  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(406)

我想从src/datatable/中的indexbean.java读取webcontent/resources/db/中的models.txt。如何设置文件路径

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

我知道我可以通过绝对路径来实现,但我想知道如何通过相对路径来实现。

另一件有趣的事情是:在indexbean.java(它是一个Javabean)中,如果我运行以下代码,我将得到eclipse.exe的路径。如果我在testfileread.java中的同一个包(不是JavaBean)中运行相同的代码,我将获得应用程序工作区的路径。有人能解释一下吗?谢谢!

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

pb3skfrl1#

我认为@joop eggen已经为你提出了最好的解决方案。但是,有时可以将环境变量设置为文件路径,并在不同的环境中推动代码时更改它。

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

hjzp0vay2#

首先,这类内部文件应该位于不可访问的位置,即 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();

相关问题