在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
答案 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加载。