• 締切済み

ファイルパスが取得出来ない(Properties.getProperty使用)

PropertiesクラスのgetPropertyメソッドを利用して 外部ファイルより値を取得しようとしています。 // ファイルパスの取得 java.util.Properties pr = new Properties(); pr.load(new FileInputStream("sample.properties")); String filePath = pr.getProperty("filePath"); fis.close(); // sample.properties filePath = C:\test\test.txt しかし、エスケープ記号?が問題で下記のようになり うまく取得出来ません。 filePath = C: est est.txt なぜこのような現象が起こるのでしょうか。 また、回避策はありますでしょうか。 よろしくお願いします。

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

みんなの回答

回答No.4

ざっと調べた所で、こんな感じでしょうか? Fileクラス http://takeoba.cool.ne.jp/java/File.htm @IT > Java Solution > Java TIPS > WindowsとLinuxの両方で動作するコードを書く http://www.atmarkit.co.jp/fjava/javatips/115java020.html HOME > Java開発Tips > Beginners ファイル操作の基本を押さえる http://www.atmarkit.co.jp/fjava/javatips/115java020.html 定数「File.separator」を使用すれば、確かに実装が多少異なってくるかもしれませんが、SJC-Pの試験でもほんとよく出題されていますし、こっちの方がいいとは思うんですが。(Propertiesクラスなんかも、この質問スレで初めて知りました。)

参考URL:
http://takeoba.cool.ne.jp/moreJava/property.htm
  • momozange
  • ベストアンサー率67% (21/31)
回答No.3

原因は C:\test\test.txt の文字列を取得した際、「\t」がメタ文字としてエスケープされ「タブ」という解釈をしているからです。 実装を変えずに対応したいのであれば、最初の回答にあるように「\\」とエスケープ文字を重ねるか 「\」の代わりに「/」を使用するのも簡易的でよいかもしれません(ファイルパスとして使用するのであれば)。

回答No.2

確かに、以下のURLではloadメソッドとかstoreメソッドの所にだらだらとエスケープ文字などの説明がありますよね。 java.util クラス Properties http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Properties.html ただ、あなたが必要としているのはこっちの方じゃないかな~、と。 java.io クラス File フィールドの詳細 separator http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/File.html#separator

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231046/
depicts
質問者

補足

回答ありがとうございます。 separatorはファイルパスの区切り文字ですよね? 少し使い方が分からないのですが、もう少し詳しく教えていただけませんか。

  • nicepeace
  • ベストアンサー率58% (7/12)
回答No.1

こんばんわ。 実際に試していませんが、プロパティファイル内を filePath = C:\\test\\test.txtにしてみたらどうですか? またはfilePath = C:/test/test.txtではダメでしょうか?

depicts
質問者

補足

回答ありがとうございます。 ファイルパスは C:\test\test.txt という風にしたいと思っています。 (区切り文字の"\"はひとつだけにしたいと思っています)

関連するQ&A

  • ファイルよりの文字列の取り込み(Properties)

    下記のプログラムでテキストファイルに"0x5C"を含む文字列を 取り込んだ時に文字化けしてしまいます。 テキストファイルに\\を付加する逃げ方は検索して発見しましたが \\を付加を付加せずに解決する方法は有りませんでしょうか? import java.io.FileInputStream; import java.util.Properties; public class Class1 {  public static void main (String[] args) {   try {    FileInputStream oFileInputStream = new FileInputStream("c:\\test.txt");    Properties oProperties = new Properties();    oProperties.load(oFileInputStream);    String sTmp1 = oProperties.getProperty("100001T");    String sBuf1 = new String(sTmp1.getBytes("8859_1"), "MS932");    String sBuf2 = new String(oProperties.getProperty("100001M").getBytes("8859_1"), "MS932");    System.out.println(sBuf1);    System.out.println(sBuf2);   } catch (Exception oException) {    oException.printStackTrace();   }  } } /* 実行結果 可狽ナす。可狽ナす。可狽ナす。可狽ナす。 可能です。 */ /* test.txtの内容 100001T=可能です。可能です。可能です。可能です。 100001M=可能\\です。 100001S=1 100001L=0 */

    • ベストアンサー
    • Java
  • ファイルパスの文字長取得

    VC++をやっているのですが、 「openFileDialog->FileName」で ファイルパスを取得すると 「C\Documents and Sttings\デスクトップ\test.txt」 みたいに取得できます。 ファイルパスの文字長を以下のように取得しました。 「openFileDialog->FileName->length」 (↑間違っていたらすいません) このファイルパスの文字長を取得しようとすると 2バイト文字のところを1文字でカウントしているみたいで 2文字分のカウントをしてくれません。 どのようにすれば2バイト文字を2カウントとして 文字長を取得できるでしょうか?

  • ファイルパスの文字長取得

    VC++をやっているのですが、 「openFileDialog->FileName」で ファイルパスを取得すると 「C\\Documents and Sttings\\デスクトップ\\test.txt」 みたいに取得できます。 ファイルパスの文字長を以下のように取得しました。 「openFileDialog->FileName->length」 (↑間違っていたらすいません) このファイルパスの文字長を取得しようとすると 2バイト文字のところを1文字でカウントしているみたいで 2文字分のカウントをしてくれません。 どのようにすれば2バイト文字を2カウントとして 文字長を取得できるでしょうか?

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

    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
  • 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
  • 文字列中からファイルパスのみを取得する方法

    テキストファイルからデータを1行ずつ読み取り、 その中にファイルパスがあれば他のファイルに書き出すというロジックを考えています。 文字列は 例えば  include ROOT_PATH."/class/test.txt"; という文字列で、この中から  /class/test.txt という文字列だけを取得したいのです。 現在、拡張子から1文字ずつ前の文字列をチェックしていって、「”」が見つかったらその間の文字列を ファイルパスとしようとしています。 これを1発で行ってくれるような関数等ははないでしょうか?   良いお知恵がありましたらご教授お願いします。

  • Return で文字列が返せない、、

    このような関数を作って、mainの関数に渡したいのですが、文法がダメだとコンパイラに怒られます。 private String test(){ try{ FileOutputStream fos=openFileOutput("sample.txt", MODE_PRIVATE); String text="サンプルテキストです"; fos.write(text.getBytes()); fos.close(); }catch(FileNotFoundException e){ }catch(IOException e){ } try{ FileInputStream fis=openFileInput("sample.txt"); byte buffer[]=new byte[100]; fis.read(buffer); String str = new String(buffer).trim(); fis.close(); return str; }catch(FileNotFoundException e){ }catch(IOException e){ } }なぜ返せないのでしょうか。

    • ベストアンサー
    • Java
  • UNICODEへの文字コード変換

    以下のようにして、 日本語で書かれたファイルを読み込んで、 UNICODEに変換したいのですが、 できません。。。 どこが間違っているのでしょうか?(;;) 元の日本語ファイル「こんにちは」 >>できたファイル「\u3053\u3093\u306b\u3061\u306f」 という風にしたいのですが。。 //FileIOSteramの作成 FileInputStream fis = new FileInputStream(iFile); FileOutputStream fos = new FileOutputStream(oFile); //Stream ラップ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); System.out.println(System.getProperty("file.encoding")); //読み込みと書き込み int c; InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); while((c = in.read()) != -1){ out.write(c); }

  • 特殊文字「\」の変換の方法

    VC++2005のMFCにてプログラムを作成しています。 CFileDialogにてテキストファイルを読み込み、 読込んだファイルパスの「\」を「\\」になるように変換したいのですが、 実装の方法が分かりません。 ===================================== 例)C:\test\hoge.txt ⇒ C:\\test\\hoge.txt と変換する。 ===================================== 下記にファイルパスをCstring型で読み込み、 char型に変換するまでのプログラムを記載します。 理想としては、char型配列の中に、 「C:\\test\\hoge.txt」のような変換後のファイルパスを 入れたいのです。 解決方法をご存知の方おられましたら、ご教示お願いできませんでしょうか。 【プログラム】 /* ファイルオープンダイアログを表示 */ CFileDialog ReadDlg( TRUE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "txtファイル(*.txt)", this ); CString filepath; if( ReadDlg.DoModal() == IDOK ) { filepath = ReadDlg.GetPathName(); // ファイルのフルパス名を取得 } CFile cfile; CFileException ex; if( !cfile.Open( filepath, CFile::modeRead , &ex ) ) { AfxMessageBox( "ファイルを開くのに失敗しました" ); // エラーメッセージを表示 return; } char st[255] = ""; strcpy( st, filepath );

  • フォルダ内取得について

    質問です。 「あるフォルダ以下にあるファイルをすべて取得する」で、 Dim files As New ArrayList '"C:\My Documents"以下のファイルをすべて取得 GetAllFiles("C:\My Documents", "*.*", files) 'ListBox1に結果を表示する ListBox1.Items.AddRange(files.ToArray()) でフォルダ内を取得する方法は分かっていますが、 この取得したファイル以外で特定のファイル以外を 削除する事は出来ますでしょうか? 例えば Test1.txt←必要 Test2.txt←不要 Test3.txt←必要 でファイル取得した時に ("Test1.txt")と("Test3.txt")だけ残して 他は削除したいのです。 必ずしも"test2.txt"という名前ではありません。 この行動を文法(ソース)を書きたいのですが、 分かりません。 どなたか教えてください。