Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
JavaServlet-将数据写入文件_Java_File_Servlets - Fatal编程技术网

JavaServlet-将数据写入文件

JavaServlet-将数据写入文件,java,file,servlets,Java,File,Servlets,我有一个servlet,它使用带有数据的文件。此文件的相对路径包含在web.xml中。 我有以下代码部分,从文件中读取数据: public class LoginServlet extends HttpServlet { private Map<String, UserData> users; public void init() throws ServletException { super.init(); String userFilePath = getServ

我有一个servlet,它使用带有数据的文件。此文件的相对路径包含在web.xml中。 我有以下代码部分,从文件中读取数据:

public class LoginServlet extends HttpServlet {
private Map<String, UserData> users;
public void init() throws ServletException {
    super.init();
    String userFilePath = getServletContext().getInitParameter("user.access.file");
    InputStream userFile = this.getClass().getResourceAsStream(userFilePath);
    try {
        users = readUsersFile(userFile);
    } catch (IOException e) {
        e.printStackTrace();
        throw new ServletException(e);
    }
            ....
            ....
    }

private Map<String, UserData> readUsersFile(InputStream is) throws IOException{
    BufferedReader fileReader = new BufferedReader(new InputStreamReader(is));
    Map<String, UserData> result = new HashMap<String, UserData>();
            ....
            ....
            ....
            return result;
     }
}
因为这是一个servlet,它不仅在我的电脑上工作,所以我不能使用绝对路径。
有人知道我如何使用类似的方法将数据写入文件吗?

如果资源URL可解析为绝对本地磁盘文件系统路径且可写入,则可以使用

URL url = this.getClass().getResource(userFilePath);
File file = new File(url.toURI().getPath());
OutputStream output = new FileOutputStream(file);
// ...
然而,这并不能保证在所有环境下都能工作


最好的选择是拥有一个固定且绝对的本地磁盘文件系统路径。但是,通常的做法是将结构化数据用户名/密码存储在数据库中,而不是文件中。

如果资源URL可解析为绝对本地磁盘文件系统路径且可写入,则可以使用

URL url = this.getClass().getResource(userFilePath);
File file = new File(url.toURI().getPath());
OutputStream output = new FileOutputStream(file);
// ...
然而,这并不能保证在所有环境下都能工作


最好的选择是拥有一个固定且绝对的本地磁盘文件系统路径。但是,通常的做法是将结构化数据用户名/密码存储在数据库中,而不是存储在文件中。

问题到底是什么?您不能在web.xml中使用绝对路径,因为您想使其可配置?或者你是不是遇到了一些你不明白的异常情况?您可以将数据写入文件,但请记住,servlet运行在servlet容器进程中,该进程需要OS文件写入权限才能写入目录。请澄清您是要将文件写入服务器还是客户端主机?问题到底是什么?您不能在web.xml中使用绝对路径,因为您想使其可配置?或者你是不是遇到了一些你不明白的异常情况?您可以将数据写入文件,但请记住,servlet运行在需要OS文件写入权限才能写入目录的servlet容器进程中。请澄清您是要将文件写入服务器还是客户端主机?