2016-03-19 15 views
0

JavaのFileおよびURLクラスを使用して現在の作業ディレクトリ以外のファイルを読み込もうとしています。私は現在の作業ディレクトリがデフォルトで.によって '表現されている'ことを知っています。私のJavaクラスを想定し現在の作業ディレクトリ以外のファイルの絶対パスを取得する方法[Java]

は、私が/folders/Desktop/file1.txtでファイルfile1.txtを読みたい場合は、私は次の操作を行うことができ、/folders/Desktop/MyClass.java下にある:

URL url = getClass().getResource("./file1.txt"); /* or "./anotherFolder/../file1.txt", or simply "file1.txt"*/ 
File f = new File(url.getPath()); 

とすべてが期待どおりに動作します。

しかし、現在の作業ディレクトリ内になく、サブディレクトリ内にないファイルを読み込むにはどうすればよいですか?たとえば、ファイルのパスが/folders/file1.txtの場合は?私はどこでも検索しましたが、何も見つかりませんでした。私は../file1.txt./../file1.txtなどを試しましたが、何も動作しません。たぶん私は何かを見逃していた、または私は適切な場所で検索していない可能性があります。

+0

新しいFIle( "/ folders/file1.txt")の何が問題になっていますか? – Turo

+0

その命令に間違いはありません、それは私のケースで動作します。問題は、現在の作業ディレクトリのサブディレクトリにないファイルを読みたいときに発生します。特に、Fileクラスのインスタンスを作成しようとするとjava.lang.NullPointerExceptionがスローされます。 – Process0

+0

私は、単に新しいファイル(ファイル名)、リソースを使用しないことを意味します。このファイルは、パスが正しい限りどこでもかまいません。ファイル名がヌルでない場合、どのようにNPEを投げることができますか? – Turo

答えて

0

ファイル名へのパスを指定しないと、javaはアプリケーションが実行されているディレクトリで検索しています。

例:ファイルは、プロジェクトのメインフォルダにある場合

これはtrueが印刷されます...

public static void main(String[] args) { 
     final File foo = new File("asd.txt"); 
     System.out.println(foo.exists()); 
    } 

編集:

そのフォルダ内のファイルでない場合ならば、 "./"または "../"演算子... を持つフォルダ構造で "上に行く"ことができます。または、フォルダFile("/src/asd.txt")の中に深く入る例は、srcフォルダ内のファイルです。あなたは現在の作業ディレクトリの下にないファイルにアクセスする場合。

enter image description here

+0

はい、わかっています。実際、現在の作業ディレクトリとそのサブディレクトリにあるファイルには問題はありません。プロジェクトはありません! – Process0

0

あなたは、プログラム、ファイルシステムを横断しますいずれか、またはあなたは、ユーザ入力によって、絶対パスを取得し、new File(absolutePathAsString)java.io.Fileオブジェクトを構築します。新しいjava.nio.file APIの使用を検討することもできます。

関連する問題