2011-03-16 31 views
2

データ付きのファイルを使用するサーブレットがあります。このファイルへの相対パスはweb.xmlに含まれています。 私は、ファイルからデータを読み込み、コードの一部、次のようしている:これはサーブレットであるためJavaサーブレット - ファイルにデータを書き込む

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; 
    } 
} 

をし、それは私のPC上で動作しません、私は絶対パスを使用することはできません。 誰も私がファイルにデータを書き込む方法を知っていますか?

+0

正確な質問は何ですか? web.xmlで絶対パスを使用することはできません。それとも、あなたが理解できない何らかの例外がありますか?データをファイルに書き込むことができます。サーブレットは、ディレクトリに書き込むためのOSファイル書き込み権限が必要なサーブレットコンテナプロセスで実行されることに注意してください。 – ivy

+0

ファイルをサーバーまたはクライアントのホストに書き込むかどうかを明確にしてください。 – anubhava

答えて

0

リソースURLは絶対的なローカル・ディスク・ファイル・システム・パスに解決可能であり、それは書き込み可能である場合は、これは、しかし、今度はすべての環境で動作することが保証されていない

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

を使用することができます。

実際には、固定された絶対的なローカルディスクファイルシステムのパスが必要です。しかし、通常の方法では、構造化されたデータ(ユーザー名/パスワード)をファイルではなくデータベースに格納します。