2009-09-26 33 views
50

私は、現在のディレクトリ(.classファイルが実行されているのと同じディレクトリ)からユーザが指定したファイル名を読み取るJavaプログラムを必要としています。言い換えればJava、現在のディレクトリからファイルを読み込みますか?

、ユーザが「myfile.txtの」にファイル名を指定し、そのファイルが現在のディレクトリにすでにある場合:

reader = new BufferedReader(new FileReader("myFile.txt")); 

は動作しません。どうして?

私はWindowsで実行しています。

+1

これは同じである、それはあなたがProg.javaから「SRC /パッケージ1/myfile.txtの」としてそのパスを指定することができます

----src --------package1 ------------myfile.txt ------------Prog.java 

であると言いますLinuxでも –

答えて

37

現在のディレクトリは、必ずしも.classファイルが存在するディレクトリではありません。プロセスの作業ディレクトリです。 (つまり、JVMを起動したときのディレクトリ)

.classファイルと同じディレクトリのファイルをgetResourceAsStream()でロードできます。それはInputStreamReaderでReaderに変換できるInputStreamを提供します。

+12

+1。 EclipseやIdeaのようなIDEを実行している場合、現在のディレクトリはコンパイラの出力ではなくプロジェクトディレクトリになります。 –

+1

@ piiligrimは、あなたの起動設定に依存します –

+0

@DenisTulskiy私は、例の人と同じコーディングでEclipseに取り組んでいます。鉱山はまだ動作していない、なぜそれは? – windsound

58

は、それが現在の作業ディレクトリを返します

System.getProperty("user.dir") 

を試してみてください。

+3

ただし、プロジェクトのルートディレクトリまでのパスのみを返します。どのように我々はJavaのメインメソッドで現在のパッケージのパスを得ることができる –

+0

これは非常に便利です。ありがとう:) – whitehat

4

あなたのファイルがあなたのクラスが存在する場所にあると分かっているなら、そのディレクトリはあなたのクラスパス上にあります。その場合は、この解決策が問題を解決することを確認することができます。

URL path = ClassLoader.getSystemResource("myFile.txt"); 
if(path==null) { 
    //The file was not found, insert error handling here 
} 
File f = new File(path.toURI()); 

reader = new BufferedReader(new FileReader(f)); 
21

上記の回答はどれも私にとっては効果がありません。ここに私のために働くものがあります。これは、あまりにも動作します

URL path = Foo.class.getResource("myFile.txt"); 
File f = new File(path.getFile()); 
reader = new BufferedReader(new FileReader(f)); 
-3

Path file=Paths.get("Your file path"); 
InputStream is=Files.newInputStream(file); 
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 

のは、自分のクラス名は、Foo.javaと同じフォルダにMYFILE.TXTにアクセスし、このコードを使用して、Foo.javaあるとしましょう

4

プロジェクト内のファイルは、srcフォルダを基準にして利用できます。あなたがされるパッケージやフォルダのmyfile.txtの知っていれば、

関連する問題