我有一个具有此文件结构的Java项目(在Eclipse中显示):
ProjectName
+- Deployment Descriptor: ProjectName
¦- Java Resources:src
¦- Package1
-MyClass.java
¦- FileFolder
-MyFile.txt
到myClass为止,我可以使用:
阅读MyFile.txttry
{
reader = new BufferedReader(new FileReader(new File("FileFolder/MyFile.txt")));
while((line=reader.readLine())!=null)
{
line=line.trim();
myVector.add(line);
}
reader.close();
}
catch(Exception e)
{
e.printStackTrace();
}
但是,当我将Package1放入动态Web项目和root中的FileFolder文件夹时,不再找到该文件。
有谁知道如何阅读文件?
提前致谢!
答案 0 :(得分:1)
动态Web项目生成WAR文件。
服务器可能会也可能不会将WAR文件扩展回文件系统结构。
您最好使用Class或ClassLoader .getResourceAsStream("/FileFolder/MyFile.txt")
,它可以从JAR / WAR文件中读取文件,并返回InputStream
。
示例:
reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/FileFolder/MyFile.txt")));
修改:如果来自Servlet
,请考虑改为使用gawi's answer。
编辑2:如果这是static
方法,则需要使用MyClass.class
代替this.getClass()
,其中MyClass
是类名。
答案 1 :(得分:0)
您正在使用相对于当前工作目录的路径打开文件。这不太适用于Web应用程序容器,因为当前工作目录不是应用程序的根目录。
此外,您的文件可能不在文件系统中,而是在WAR文件中。
在webapp中打开文件的正确方法是使用ServletContext.getResourceAsStream()方法。