Java 如何将列表从servlet写入.txt

Java 如何将列表从servlet写入.txt,java,servlets,Java,Servlets,我创建了一个servlet,它滚动10个随机值,排序并打印这个值。此值正在添加到LinkedList。如何在应用程序关闭时将数据从LinkedList保存到file.txt。我尝试在servlet中创建文件并编写一些东西,但我的代码没有创建文件 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO

我创建了一个servlet,它滚动10个随机值,排序并打印这个值。此值正在添加到LinkedList。如何在应用程序关闭时将数据从LinkedList保存到file.txt。我尝试在servlet中创建文件并编写一些东西,但我的代码没有创建文件

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        /* TODO output your page here. You may use following sample code. */
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet NewServlet</title>");            
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet NewServlet at " + request.getContextPath() + "</h1>");
        List<Integer> lista=(List<Integer>) this.getServletContext().getAttribute("lista");
        out.println("<ul>");
        for(Integer l:lista){
            out.println("<li>"+l+"</li>");
        }
        out.println("</ul>");
        out.println("<form action=\"NewServlet1\">");
        out.println("<input type=\"text\" name=\"liczba\">");
        out.println("<input type=\"submit\" value=\"ADD\">");
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
    } finally {            
        out.close();
    }

        PrintWriter zapis = null;
        zapis = new PrintWriter("test.txt");
        zapis.println("type type type ");
        zapis.close();


}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
/*TODO在此处输出您的页面。您可以使用以下示例代码*/
out.println(“”);
out.println(“”);
out.println(“Servlet NewServlet”);
out.println(“”);
out.println(“”);
println(“Servlet NewServlet at”+request.getContextPath()+”);
List lista=(List)this.getServletContext().getAttribute(“lista”);
out.println(“
    ”); for(整数l:lista){ out.println(“
  • ”+l+“
  • ”); } out.println(“
”); out.println(“”); out.println(“”); out.println(“”); out.println(“”); out.println(“”); out.println(“”); }最后{ out.close(); } PrintWriter zapis=null; zapis=新的PrintWriter(“test.txt”); zapis.println(“类型”); zapis.close(); }

公共类NewServletListener实现ServletContextListener{
静态最终公共字符串defFileName=“file.txt”;
字符串文件名;
@凌驾
public void contextInitialized(ServletContextEvent sce){
List lista=新链接列表();
Random rand=新的Random();
int rozmiar=Integer.parseInt(sce.getServletContext().getInitParameter(“rozmiar”);

对于(int i=0;iOk),我假设您在web应用程序中的某个位置计算一个
列表
,该列表存储为servlet上下文属性,名称为
“lista”
。您希望在应用程序停止时将其保存到文本文件中,每行一个字符串

您必须使用
ContextLoaderListener
。假设您使用servlet 3.0+容器,您可以使用注释注册它(如果没有,您必须在部署描述符
web.xml
中注册它。您只需在
onDestroy
方法中编写文件:

@WebListener
public class SaveListener implements ServletContextListener {
    static final public String defFileName = "file.txt";
    String fileName;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // allow to find the name of the file in init parameters
        fileName = sce.getServletContext().getInitParameter("SAVE_FILE");
        if (fileName == null) {
            fileName = defFileName;
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        List<String> lista = (List<String>) sce.getServletContext()
                .getAttribute("lista");
        File file = new File(fileName);
        try (PrintWriter printWriter = new PrintWriter(file)) {
            for (String string : lista) {
                printWriter.println(string);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
@WebListener
公共类SaveListener实现ServletContextListener{
静态最终公共字符串defFileName=“file.txt”;
字符串文件名;
@凌驾
public void contextInitialized(ServletContextEvent sce){
//允许在init参数中查找文件名
fileName=sce.getServletContext().getInitParameter(“保存文件”);
如果(文件名==null){
fileName=defFileName;
}
}
@凌驾
公共无效上下文已销毁(ServletContextEvent sce){
List lista=(List)sce.getServletContext()
.getAttribute(“lista”);
文件=新文件(文件名);
try(PrintWriter PrintWriter=新的PrintWriter(文件)){
for(字符串:lista){
printWriter.println(字符串);
}
}catch(filenotfounde异常){
抛出新的运行时异常(e);
}
}
}

您所说的servlet(滚动10个随机值)排序并打印此值与您显示的代码之间存在细微差异:从
ServletContext
属性中获取列表并显示它。您想在每次请求后保存,还是在应用程序停止时保存(假设您想保存
lista
)?当应用程序停止时
@WebListener
public class SaveListener implements ServletContextListener {
    static final public String defFileName = "file.txt";
    String fileName;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // allow to find the name of the file in init parameters
        fileName = sce.getServletContext().getInitParameter("SAVE_FILE");
        if (fileName == null) {
            fileName = defFileName;
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        List<String> lista = (List<String>) sce.getServletContext()
                .getAttribute("lista");
        File file = new File(fileName);
        try (PrintWriter printWriter = new PrintWriter(file)) {
            for (String string : lista) {
                printWriter.println(string);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}