2

在 JSP 项目中,我正在从目录中读取文件。如果我给出完整路径,那么我可以轻松读取文件

BufferedReader br = new BufferedReader(new FileReader("C:\\ProjectFolderName\\files\\BB.key"));

但我不想写完整路径,而是只想给出包含文件的文件夹名称,如下所示。

BufferedReader br = new BufferedReader(new FileReader("\\files\\BB.key"));

这个怎么做?

String currentDirectory = new File("").getAbsolutePath();
System.out.println(currentDirectory);
BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));

我试过上面仍然无法从文件中读取

打印行给出以下输出

信息:C:\Program Files\NetBeans 7.3

4

4 回答 4

4

利用

File file = request.getServletContext().getRealPath("/files/BB.key");

这会将 URL 路径相对(因此为“/”)从 Web 内容目录转换为文件系统文件。

对于可移植的 Web 应用程序,并且知道文件是 Windows Latin-1,明确说明编码,否则将给出主机的默认操作系统编码。

BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(file), "Windows-1252"));

如果文件存储为资源,在 /WEB-INF/classes/ 您也可以使用

BufferedReader br = new BufferedReader(new InputStreamReader(
        getClass().getResourceAsStream("/files/BB.key"), "Windows-1252"));

在这种情况下,该文件将位于 /WEB-INF/classes/files/BB.key 下。

于 2013-05-25T00:17:34.530 回答
3

最好将文件作为类路径资源而不是文件系统资源来读取。这可以帮助您避免硬编码或参数化环境特定文件夹。按照这篇文章从“当前项目”的类路径位置读取文件

于 2013-05-24T23:48:34.633 回答
2

添加这个:

private static String currentDirectory = new File("").getAbsolutePath();

并将您的 BufferedReader 更改为:

BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));

currentDirectory 将包含项目目录所在的任何路径(运行程序的位置)。

于 2013-05-24T23:52:57.950 回答
0

如果您通过相对路径(new FileReader("files/BB.key"))引用文件,则在执行程序时它将针对当前工作目录进行解析。

你到底想达到什么目的?

如果您想用您的程序打包一个文件,然后以编程方式访问它,请将其放在类路径中并使用 Class.getResource... 方法之一将其作为资源加载。

于 2013-05-24T23:50:02.580 回答