2011-03-16 66 views
2

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

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,它不仅会在我的电脑上工作,我不能使用绝对路径。 有谁知道我可以如何使用类似的方式将数据写入文件?

+0

究竟是什么问题?你不能在你的web.xml中使用绝对路径,因为你想让它可配置?或者你是否得到某种你不明白的异常?您可以将数据写入文件,请记住,servlet运行在需要操作系统文件写入权限才能写入目录的servlet容器进程中。 – ivy

+0

请说明是否要将文件写入服务器或客户端主机? – anubhava

回答

0

如果资源URL是resolveable为绝对本地磁盘文件系统路径,它是可写的,那么你可以使用

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

然而,这又不能保证在所有环境下工作。

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