パスが通らない...絶対パス以外での相対パスの指定方法を教えてください

このQ&Aのポイント
  • 以下のようなプロジェクトがあるとします。tomcatproject/WEB-INF/conf/appli.properties ファイルの絶対パス以外での相対パスでの指定方法を教えてください。
  • TestServletのinitメソッドでPropertiesファイルのload時にFileNotFoundExceptionが発生してしまいます。絶対パス以外での相対パスの指定方法を教えてください。
  • Propertiesファイルのload時にFileNotFoundExceptionが発生し、絶対パス以外ではパスが通りません。どのようにすれば相対パスでパスを指定することができるのでしょうか?
回答を見る
  • ベストアンサー

パスがとおらない・・・

以下のようなプロジェクトがあるとします。 tomcatproject | |-WEB-INF   |   |-conf(appli.properties)   |   |-src    |    |-test(TestServlet.java) TestServletの内容は以下の通りです。(一部省略) ---------------------------------------------------- private static Properties p = new Properties(); public void init(){  try {   p.load(new FileInputStream("/tomcatproject/WEB-INF/conf/appli.properties"));  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } } ---------------------------------------------------- PropertiesのloadにいったときにFileNotFoundExceptionが 発生してしまうのですが、いろいろ試した結果絶対パス以外は 通らないんです・・・。(C:\eclipse\workspace\........) どうやれば相対パスで通りますか? ご教授頂ければ幸いです。 よろしくお願い致します。

  • Java
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
回答No.1

WEBシステムのカレントディレクトリは request.getRealPath(""); でとれます。 あともし今の環境がWindowsなら区切り文字は"\\"ですがこの環境はWindowsじゃないんですか? 多分プロジェクトフォルダがカレントディレクトリなので (Windowsの場合) p.load(new FileInputStream("\\WEB-INF\\conf\\appli.properties")); でとれるんじゃないかと思います。 (もしマルチOSにしたいなら 「\\」のところをSystem.getProperty("file.separator")でおきかえましょう。) 確かめてないので間違ってたらごめんなさい。

saya129
質問者

お礼

ServletConfigからパスを取得することが できました!! public void init(ServletConfig config){ String path = config.getServletContext().getRealPath(""); どうもありがとうございます(^^

saya129
質問者

補足

試してみましたがダメでした・・・。 今回の処理はinitメソッドで行うので requestは取れません。。 >request.getRealPath(""); 私も最初はこれで取れると思っていましたが なぜか取れないんです。 >"\\WEB-INF\\conf\\appli.properties" ちなみに環境はWindowsですが、 \\じゃなくても/でいけますよ(^^

関連するQ&A

  • Tomcatプロジェクトの.propertiesファイルの置き場

    当方、Tomcat5.0,Eclipseでサーブレットを開発しております。 初歩的な質問で申し訳ありませんが、プロパティファイルの置き場所が 分からず難儀しております。 どなたかご教示願います。 prop.load(new FileInputStream("C:/work/workspace/worktools/mail.properties")); 上記の様にフルパスを指定すると認識するのですが、 prop.load(new FileInputStream("mail.properties")); この様にパスを省略するとFileNotFoundExceptionが発生してしまいます。WEB-INF直下にファイルを置いてるのですが、間違いなのでしょうか?

    • ベストアンサー
    • Java
  • プロパティーのセット

    適当に「A.conf」等のファイルを作成し、 key=value を書いておきました。 FileInputStream propFile = new FileInputStream("socks.conf"); Properties p = new Properties(System.getProperties()); p.load(propFile); System.setProperties(p); のような使い方と、  System.getProperties().put(key,value); のような使い方の違いがわかりません。 また、セットした値を初期状態に戻す方法も教えていただけないでしょうか?  System.getProperties().remove(key); をするとkey自体が消去されてしまいます。 宜しくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルが読み込めない

    みなさんはじめまして、下記ソースなんですが「FileInputStream fi = new FileInputStream(inputFile);」の手前までは処理が流れるの ですが、その後の処理が流れなくて困っています。 ターゲットとなる「test.txt」ファイルはHTML・JAVAソースファイル クラスファイルと同じフォルダに存在します。 特に保存先等を指定していないので、必然的に同じフォルダ内を見てフ ァイルを読み込みに行くんですけど、読み込まず、そのまま処理が流れ てしまいます。 どこかやり方がいけないところがあるんでしょうか? public String FileInput(){ byte data[] = new byte[16]; String number = ""; try { File inputFile = new File("test.txt"); FileInputStream fi = new FileInputStream(inputFile); /* データを読み込み */ if(fi.read(data)== 16){       /* 0バイト目から9バイト目までを読み込み */ if(new String(data,0,9).equals("010105502")){         /* 0バイト目から16バイト目までをnumberに代入 */ number = new String(data,0,16); } } fi.close(); } catch(FileNotFoundException e){ e.printStackTrace(); } catch(IOException e){} return(number); }

    • ベストアンサー
    • Java
  • ImageIO.write()の保存先について

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); Part part = request.getPart("file"); BufferedImage img ; try { img = ImageIO.read(part.getInputStream()); ///////↓↓うまくいきません。(java.io.FileNotFoundException)) //ImageIO.write(img, "jpg", new FileOutputStream("/WEB-INF/data/test.jpg")); //ImageIO.write(img, "jpg", new FileOutputStream("../../WebContent/WEB-INF/data/test2.jpg")); ///////↓↓絶対パスを直接指定しても保存される(Eclipseの作業フォルダから見える) // ImageIO.write(img, "jpg", new FileOutputStream("C:/Users/Yuji/workspace/jsp_servlet2/WebContent/WEB-INF/data/test.jpg")); ///////↓↓「getServletContext().getRealPath」を使うと以下のディレクトリに保存される ////(C:\Users\Admin\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\jsp_servlet2\WEB-INF\data\test.jpg) // ImageIO.write(img, "jpg", new FileOutputStream(getServletContext().getRealPath("/WEB-INF/data/test.jpg"))); } catch (IOException e) { e.printStackTrace(); } }//end doPost HTMLからfileのデータを受け取りテストとして特定のフォルダ(ここでは/WEB-INF/dataの中)に保存したいのですが上手くいきません。 上記のソースにもコメントとして書いていますが 直接絶対パスを指定するとEclipseの作業ファルダから見える所に(意図した所)保存されますが この場合だとWeb上のアップした時に困ります・・・。 また、「getServletContext().getRealPath」を使うと同じ「/WEB-INF/data/」の中でも想定しているものとは全く違うディレクトリに保存されました。 出来ればサーブレット?から相対パスを指定してEclipseのプロジェクト内のファルダに保存したいと考えているのですがうまくいきません。 上記のソースを記述しているサーブレトから /WEB-INF/data/ への相対パスも含め色々指定してみましたが出来ませんでした。 (../../WebContent/WEB-INF/data/test.jpgや/WebContent/WEB-INF/data/test.jpgや/WEB-INF/data/test.jpg等) ちなみにプロジェクトフォルダからサーブレットへのパスは以下の通りです。 「/jsp_servlet2/src/websitePrototype1/FileUpServlet」 どうすれば解決するのでしょうか?

    • ベストアンサー
    • Java
  • Servlet内でのPath

    Servlet内でのPath指定でちょっと悩んでいます。 XMLを読ませて処理させようとして Source inSource = new StreamSource(new File("./XmlDump.xml")); とかやっているんですが、いざアクセスすると java.io.FileNotFoundException: /usr/local/jakarta-tomcat-3.3.1/bin/./XmlDump.xsl などとエラーを吐いてしまいます。 Servlet実行時のPathはどこになるのでしょうか・・・? いままで、実行中のclassが置いてあるディレクトリ(この例では $TOMCAT_HOME/webapps/xxx/WEB-INF/class)がルートだと思っていたのですが・・・。

    • ベストアンサー
    • Java
  • 読込ファイルのパスについて

     ファイルからテキストファイルを読み込んで、フォームから入力されたデータと照合し、ファイルにあればログインするというような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(); } }

    • ベストアンサー
    • Java
  • Javaのプロパティファイルの文字化け対策

    いつもお世話になっております。 一連の質問で大分クリアになって来たのですが、まだ課題が残っています。 xxx.propertiesファイルを作成したとします。 プロパティに日本語を設定しました。 Java上でgetProperties()をすると文字化けしてしまいます。 初歩的な質問で申し訳ありませんが、具体的な対策をご教示願います。 public String getMailSubject() throws MailSendErrorException { String subject = null; try { Properties prop = new Properties(); // プロパティファイルからキーと値のリストを読み込む prop.load(new FileInputStream(this.properties)); subject = prop.getProperty("mail.subject"); } catch (Exception e) { e.printStackTrace(); throw new MailSendErrorException(); } return subject; } 上記のソースでmail.subjectに設定してある日本語文字列を取得したいのですが色々試しましたが上手く行きません。

    • ベストアンサー
    • Java
  • ストリームの問題について【至急】

    import java.io.*; public class FileStreamDemo { public static void main(String[] args){ try{ byte[] buffer=new byte[1024]; FileInputStream fileInputStream= new FileInputStream(new File(args[0])); FileOutputStream fileOutputStream= new FileOutputStream(new File(args[1])); System.out.println("コピーファイル: "+fileInputStream.available()+"バイト"); while(true){ if(fileInputStream.available()<1024){ int remain=-1; while((remain=fileInputStream.read())!=-1){ fileOutputStream.write(remain); } break; } else{ fileInputStream.read(buffer); fileOutputStream.write(buffer); } } fileInputStream.close(); fileOutputStream.close(); System.out.println("コピー完了"); } catch(ArrayIndexOutOfBoundsException e){ System.out.println( "using:java FileStreamDemo src des"); e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } } JAVAの入門者です。 JAVAの教科書に書いてあるように、上のプログラムを書きましたけど… コンパイルすると、エラーメッセージが出て来ます。 エラー中身は下記のとおりです。 【using:java FileStreamDemo src des java.lang.ArrayIndexOutOfBoundsException: 0 at FileStreamDemo.main(FileStreamDemo.java:8) 】 どうすればいいのか悩んでいます。 誰か、助けていただけないのでしょうか?どこか間違ってるか、教えてください。 よろしく、お願いします。

  • カタカナの「ソ」以降の文字が文字化けします

    propertiesファイルから文字列を読み込む処理を行っているのですが、文字列にカタカナの「ソ」がはいると、「ソ」自体とそれ以降の1文字が文字化けしてしまいます。 これには何か対処方法があるのでしょうか? こんな感じの処理を行っています。 【propertiesファイルの内容】 path=C:\\MyWork\\ソース\\download 【読み込み処理】 FileInputStream fis = new FileInputStream(propfile); Properties prop = new Properties(); prop.load(fis); String sjs_path = getString(prop.getProperty("path"); String uni_path = new String(sjs_path.getBytes("iso-8859-1"), "Shift_JIS"); アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • ファイルのパスの取得について

    いつも参考にさせて頂いています。 掲示板をファイル操作にて作成しようと思っています。 初歩的な質問かもしれませんが宜しくお願いします。 フォルダ構成が下記の場合、「confフォルダのtest.txt」を読み込む際のパスはどのように取得もしくは指定すれば良いでしょうか? プロジェクトフォルダ  |  |----JavaSource ←.javaファイルを格納  |----WebContent      |----css      |----js      |----WEB-INF          |----conf ←このフォルダ内のtest.txt          |----jsp          |----lib ファイルの読み込みはBufferedReaderクラスを使うと効率よく読み込めるとネットで記述があったのでそれを使おうと思ってます。 BufferedReader br = new BuffferedReader(new FileReader("test.txt") ); みたいな感じで読み取れると思ってますが合ってますでしょうか? ("test.txt"の箇所に取得した(絶対又は相対)パスが入ると思ってます。) 以上宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう