質問: new File(filepath); ``` ### 試したこと Javaプロジェクトのビルドパス設定で 「Java Build Path」>「Sourceタブ」>「Link Source...」 >「(リンクしたいフォルダ選択)」>「Finish」 を行い、プロジェクトエクスプローラーで矢印がついたフォルダが作成されたことを確認し、そのフォルダにあるテキストファイルを読み込もうとするのですが、file.exists()でfalseが返ってきてしまいます。 ファイルパスで試した組み合わせを以下とすると プロジェクト名「J1」 リンクリソースフォルダ名「folder」 フォルダ中にあるファイル名「text.txt」 以下をファイルパスとして渡すのですが一つも読み込めませんでした。 "text.txt" "./text.txt" "folder/text.txt" "/folder/text.txt" "./folder/text.txt" "J1/folder/text.txt" "/J1/folder/text.txt" プロジェクトを右クリックして作成したテキストファイルは読む事が出来ます。 どのようにすればリンクしたデータにアクセスが出来るのでしょうか? そもそも、なにか使い方が間違っている、そんなことはできないなど お教えいただければと思います。 よろしくお願いします。
回答: プロジェクトにフォルダーをリンクするのはそのフォルダーの中身が、ビルドした結果のクラスファイル階層の中にリソースとして自動的にコピーされることを目的として使うと思います。 試しにeclipseのプロジェクト内のbinフォルダーの中身を開いてみてください。テキストファイルがbinフォルダーにコピーされていると思います。 こうしてコピーされたファイル群はプログラム実行時には「ファイルパス」でアクセスするのではなく、クラスからの相対位置をURLで指定する方法でアクセスするのが一般的です。 例えば、あなたのプロジェクトが次のようになっていたとします ``` text + text1.txt bin + mypackage + Main.class + text1.txt <-ビルド時に自動コピーされる src + mypackage + Main.java ``` binにコピーされたテキストファイルを開くには以下のようにします。 ``` InputStream is = Main.class.getResourceAsStream("../text1.png"); ``` ただし実際にアクセスされるファイルはbinへコピーされたもの(アプリケーションのバイナリーに含まれるリソース)であることに注意してください。これはアプリケーションを最終的にjarにパックするとjarの中に含まれるようになります。よってファイルの中身を読むことはできても更新することには向きません。 プロジェクトへリンクしたフォルダー(例えば上の例ではtextフォルダーがそれです)は実際にはプロジェクトフォルダーの中に存在しません。eclipseがプロジェクトにリンクしたフォルダーとして認識しておりプロジェクトビューへそれらしく表示しているだけなのです。 実際のオリジナルのフォルダーにあるファイルにアクセスしたい場合は、プロジェクトへリンクするのではなく、あくまでオリジナルのファイルのパスを指定してFileを通じてアクセスするようにしてください。