• ベストアンサー

読込ファイルのパスについて

 ファイルからテキストファイルを読み込んで、フォームから入力されたデータと照合し、ファイルにあればログインするというようなwebアプリを作ろうとしています。 しかし、テキストファイルが読み込まれてないようで、正しいパスワードを入力してもログインできません。読み込むファイルへのパス指定は絶対パスなのでしょうか、呼び出し元からの相対パスを指定するのでしょうか? また、テキストファイルを置くディレクトリは決まっているのでしょうか?(「WEB-INFより上の階層に置く」など) ちなみにサーバ環境はLinux+tomcat3.2.1+apache --------------------------------------------------------------- public class LoginDataBeans { ///////// UserDataクラス ///////// private class UserData{ public String user_id; public String password; } ///////// メンバ変数 ///////// ArrayList userList; private static final String logFilename = "/tomcat/logindata";←ここのパスは「絶対パス」?、それともこのファイルからの「相対パス」? ///////// コンストラクタ ///////// public LoginDataBeans(){ String item; userList = new ArrayList(); try{ BufferedReader in = new BufferedReader(new FileReader(logFilename)); while((item = (String)in.readLine()) != null){ UserData udat = new UserData(); StringTokenizer st = new StringTokenizer(item); udat.user_id = st.nextToken(); udat.password = st.nextToken(); userList.add(udat); } in.close(); } catch(IOException e){ e.printStackTrace(); } }

質問者が選んだベストアンサー

  • ベストアンサー
noname#16216
noname#16216
回答No.2

ファイルのパス名を絶対パスで指定するか、相対パスで指定するかというのはどちらでも問題なく出来るはずです。 絶対パスであれば、ファイルが存在する場合には問題なくアクセスできるはずですが、相対パスで指定する場合には環境に応じてファイルをどこに置くかが変わってきます。 サーバの環境がtomcat+apacheということで、tomcatが単独ではなくapcheにアドオンで動いているようなので、この場合相対パスのルート位置は、apache.confで指定したサーブレットのルート位置になっていませんか? ---- apache.conf ---- Alias serv_dir "/xxx/yyy" ---------------------- なら、相対パスのルートは、/xxx/yyy の位置 個人的には、ファイルにアクセスするようなサーブレットを作成する場合、web.xmlファイルに<init-param>を記述して、そこに絶対パスを記述し、サーブレット側では、getInitparameter()メソッドを使ってルート位置を取得して作業するようにしています。 -- web.xml --    : <init-param> <param-name>DataDir</param-name> <param-value>/servlet/data/</param-value> </init-param>    : -------------- -- Servlet ---- public void init(ServletConfig config) {    :  String DataDir = config.getInitParameter("DataDir");  String DataFile = DataDir + "datafile";    : } --------------- こうしておけば、ディレクトリ構造が変わった場合にも、web.xmlの記述を修正するだけで動作するので。。。 どうでしょうか?

techtak
質問者

お礼

XMLから取り込めるんですね。こりゃあ便利だ! やはり修正作業などに柔軟に対応できるように設計することが 大事なのですね。 どうもありがとうございました。

その他の回答 (1)

  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.1

C:\\temp\\aaa.txt というようなサーバーの中での絶対パスで開けました。 が、相対パスで開けるかどうかはよくわかりません。 相対パスだとすると、サーバーのexeファイルがある場所(アプリケーションサーバーのbinフォルダとか)からの相対パスになると思います。

techtak
質問者

お礼

絶対パスでは出来ました。 いちいち全部打ち込まなくても、ファイル名の前に”./”を 記述しても絶対パスとして扱われるようです。 回答ありがとうございます。

関連するQ&A

専門家に質問してみよう