Java Servlet - 将数据写入文件

标签 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 = 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,它不能只在我的 PC 上运行,所以我不能使用绝对路径。 有谁知道我如何使用类似的方式将数据写入文件?

最佳答案

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

URL url = this.getClass().getResource(userFilePath);
File file = new File(url.toURI().getPath());
OutputStream output = new FileOutputStream(file);
// ...

然而,这反过来又不能保证在所有环境下都能正常工作。

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

关于Java Servlet - 将数据写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327176/

相关文章:

java套接字超时行为

c++ - 将文本文件读入 vector ( double 、 double 、字符串)? C++

java - 如何定义 GOOGLE_APPLICATION_CREDENTIALS?

java - 如何在表示按钮单击的单个jsp页面中显示两个表数据

java - STAN4j 中的 "System Exclusions"是什么?它们来自哪里?

java - 如何将第二个锁与 Collections.synchronizedMap 关联

java - 按最后一个数字升序对文件数组进行排序的正确方法

java - 如何使用java在文本文件中查找和分隔字符串值?

java - 如何在 servlet 容器中使用 apache shiro 仅在 http 请求期间缓存数据?

java - 使用 EJB3/Hibernate 时,Apache Derby 中的表不会自动创建