从项目目录中的文件夹中读取文件

时间:2013-05-24 23:44:27

标签: java jsp bufferedreader filepath

在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 个答案:

答案 0 :(得分:4)

使用

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

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

对于便携式Web应用程序,并且知道该文件位于Windows Latin-1中,请明确说明编码,否则将给出主机的默认OS编码。

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下。

答案 1 :(得分:3)

最好将文件读取为类路径资源而不是文件系统资源。这有助于您避免硬编码或参数化特定于环境的文件夹。请关注此帖Reading file from classpath location for "current project"

答案 2 :(得分:1)

添加:

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

并将您的BufferedReader更改为:

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

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

答案 3 :(得分:0)

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

你到底想要达到什么目的?

如果要使用程序打包文件,然后以编程方式访问该文件,请将其放在类路径上,并使用其中一个Class.getResource ...方法将其作为ressource加载。