Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在文件中写入-JAVA servlet_Java_File_Servlets_Printwriter - Fatal编程技术网

无法在文件中写入-JAVA servlet

无法在文件中写入-JAVA servlet,java,file,servlets,printwriter,Java,File,Servlets,Printwriter,我正在尝试用Javaservlet写入一个文件。我在一个普通的java项目中有相同的代码,它工作得很好,但在JavaServlet中没有 对于包含该方法的类,请参考下面的代码: public class UserRecords { private String fileName = "Users.txt"; public void addRecord(String firstName, String lastName, String email, String pass){

我正在尝试用Javaservlet写入一个文件。我在一个普通的java项目中有相同的代码,它工作得很好,但在JavaServlet中没有

对于包含该方法的类,请参考下面的代码:

public class UserRecords {

    private String fileName = "Users.txt";

    public void addRecord(String firstName, String lastName, String email, String pass){

        try {
            FileWriter fw = new FileWriter(fileName, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);

            pw.println(firstName + " " + lastName + " " + email + " " + pass);

            fw.flush();
            fw.close();

        } catch (IOException ex) {
            Logger.getLogger(UserRecords.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
public class Register extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String firstName = request.getParameter("firstName");
        String lastName = request.getParameter("lastName");
        String email = request.getParameter("email");
        String pass = request.getParameter("pass");

        UserRecords ur = new UserRecords();

//        ur.addRecord(firstName, lastName, email, pass);
          ur.addRecord("Bucky", "Roberts", "bucky@records.com", "mypass");

        HttpSession session = request.getSession();
        session.setAttribute("firstName", firstName);

        RequestDispatcher rd = request.getRequestDispatcher("/welcome.jsp");
        rd.forward(request, response);


    }

}
调用该方法的Java Servlet:

public class UserRecords {

    private String fileName = "Users.txt";

    public void addRecord(String firstName, String lastName, String email, String pass){

        try {
            FileWriter fw = new FileWriter(fileName, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);

            pw.println(firstName + " " + lastName + " " + email + " " + pass);

            fw.flush();
            fw.close();

        } catch (IOException ex) {
            Logger.getLogger(UserRecords.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
public class Register extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String firstName = request.getParameter("firstName");
        String lastName = request.getParameter("lastName");
        String email = request.getParameter("email");
        String pass = request.getParameter("pass");

        UserRecords ur = new UserRecords();

//        ur.addRecord(firstName, lastName, email, pass);
          ur.addRecord("Bucky", "Roberts", "bucky@records.com", "mypass");

        HttpSession session = request.getSession();
        session.setAttribute("firstName", firstName);

        RequestDispatcher rd = request.getRequestDispatcher("/welcome.jsp");
        rd.forward(request, response);


    }

}
请帮助和指导写入文件Users.txt


提前谢谢

如果您想让它在servlet环境中可靠地工作,您需要了解更多关于您的东西将在其中运行的环境的信息

首先,您的servlet可能被部署到同时在同一台机器上运行的几个不同的servlet容器中。设想一台专用于测试它是否在Tomcat、Glassfish、Websphere以及…、Tomcat 7、Tomcat 8以及Tomcat 9上运行的测试机器。然后,每个人都应该获得自己的users.txt文件,并且每个人都应该与其他人的users.txt文件隔离。除了将文件路径放在${user.home}中,然后希望(比如说三个tomcat实例)不是在同一个用户ID下运行之外,没有什么好办法可以摆脱这种情况

然后,在给定的servlet容器中,您的servlet可能被部署到多个不同的虚拟主机。因此,您需要从您的环境中获取虚拟主机名,并将其包含在完整的文件路径中(JavaEE中有一个这样做的调用,但我不知道是哪一个)

然后,在给定的虚拟主机中,您的servlet可能包含在多个不同的应用程序(/context)中,您需要确保每个实例都与它所包含的其他应用程序(/context)的实例隔离。因此,您需要从环境中获取应用程序(/context)名称,并将其包含在完整的文件路径中

最后,在非EE环境(“在普通java项目中”)中执行这些调用显然最多会产生崩溃,最坏的情况下也会产生“文件到哪里去了”的问题

编辑以获得更多澄清:


我说的“你需要确保……绝缘”更多的是指“你需要仔细考虑,并确定你是想要绝缘还是在那个层次上共享”。如果您确实想要共享,其结果是您必须确保您的数据管理具有所有常见的ACID属性,就像您将/可能使用的任何其他DBMS引擎一样。

在普通java项目中,它工作正常,但在java Servlet中不工作。没有描述该问题,请详细说明该问题。如果创建了文件或创建了空白文件,或者捕获了与遇到的错误相关的任何日志(如果有),您是否检查了路径。是否可以确认是否调用了该方法?或者在调用该方法之前是否存在异常?@Arvind我在一个常规java项目中测试了相同的代码,它创建了文件并打印到其中,但在这里它没有这样做。甚至文件也没有创建。我还尝试在根目录中创建该文件,以测试它是否至少可以打印,但它不会执行任何操作。请尝试使用
文件
类在服务器上跟踪文件绝对路径、预任务(读/写)的更多日志。您能用文件
Users.txt
搜索您的工作空间一次吗?如果根据您的评论没有例外,那么应该在某个地方创建它。通过IDE以及本地目录结构进行搜索。