我正在使用Eclipse来创建动态Web项目。我的日食在
/home/pc/eclipse
我的项目位于/home/pc/workspace/MyWebProj
现在我将文件放在上面的项目目录中。当我想从我的代码中读取任何文件时,它总是搜索/ home / pc / eclipse文件夹中的文件而不是/home/pc/workspace/MyWebProj
,因此我暂时硬编码文件路径。
我缺少Eclipse中的任何配置设置吗?
请建议。
谢谢你, 塔拉辛格
答案 0 :(得分:1)
我认为您需要做的是从Web应用程序的javax.servlet.ServletContext
位置读取文件。如果使用getContextPath()
,则应该获取Web应用程序的工作目录而不是Java VM。
您也可以尝试使用同一类中的getResource
和getResourceAsStream
方法加载任何文件。
最好的方法是使用getResourceAsStream方法。这允许您访问webapp中的文件。
要从Web应用程序的根目录获取文件foo.txt并将其打印到响应,您可以执行以下操作。
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException
{
PrintWriter writer = response.getWriter();
// foo.txt is at the root directory of the web app
InputStream in = getServletContext().getResourceAsStream("/foo.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String text;
while ((text = reader.readLine()) != null) {
writer.println(text);
}
}
}
答案 1 :(得分:0)
我不确定这些文件是什么,或者更具体地说,最合适的存储位置是什么,但传统上在这种情况下IO的最佳方法是通过ClassLoading。您可以创建一个位于src/main/resources
的源文件夹,该文件夹将包含在存档(jar,war,ear等)程序集中(即这些文件将包含在jar中)。然后你会load these resources。
如果文件直接位于包中,它也将包含在工件程序集中,并且可以由包的类加载器中的任何类访问,或者通过包路径的默认类加载器访问(包对应于构建存档时的文件夹。)
如果您使用的是maven程序集插件,则会自动包含这些资源文件。如果您使用的是Ant,则可能需要在脚本步骤中包含这些文件。否则我想如果你只是在Eclipse中构建,那么就有一个包含文件的向导。
此外,尝试从/ home / pc / eclipse文件夹中读取文件的可能原因是因为user.dir
或user.home
正在被{ut}化为String filename = System.getProperty("user.dir") + System.getProperty("file.separator") + "file.txt";
:
{{1}}
答案 2 :(得分:0)
不知道它是否正在寻找,但您可以在Eclipse中轻松设置/更改每个“运行配置”的“工作目录”。
虽然这可能有用,但我建议你应该通过一个SystemProperty变量。只需获取文件的父路径:
File myFile = new File(System.getProperty("com.myapp.myfile.property"));
现在,只需设置此关键字,即可通过系统属性重置/移动工作目录和文件名。
希望它有所帮助;)