2017-12-02 24 views
0

私のnetbeansプロジェクトフォルダにあるtxtファイルを開こうとしていますが、指定されたファイルが見つかりません。指定されたファイルが見つかりませんjava

File file = new File("Knowledge Base.txt"); 
+0

ファイル名にスペースを使用しないでください! – Sergej

+0

@Sergejなぜですか?ファイル名にスペースを使用するのは問題ありません。 – BackSlash

+0

私は単にファイルfile = new File( "。");を実行しました。for(String fileNames:file.list())System.out.println(fileNames);私のファイルがそこに表示されます。 – user8928579

答えて

1

IDEで実行している場合、現在のディレクトリは、必ず.classファイルを配置するディレクトリとは限りません。

System.getProperty("user.dir") 

を使用して、現在のディレクトリを検索し、あなたのディレクトリにそれを得るために、パスに必要な変更を行います。

+0

固定...ありがとう – user8928579

+0

素晴らしい! それから、あなたがそれをどのように修正したか、または受け入れたものとして別の答えを書くためにしばらく時間を取ってください。 –

0

与えられたパスは絶対パスを前提としていないため、プレフィックスを付けないとルートディレクトリにあるとみなされます。これを修正するには、次のようにします:

String path = new File(".").getAbsolutePath(); 
path=path.substring(0, path.length() - 1); 
path+="Knowledge Base.txt" 
File file = new File(path); 

最初の行は、アプリケーションファイルの絶対パスを取得します。 2番目の文字は最後の文字を減算し、ディレクトリには/の文字が残ります。 3行目はファイルを文字列に追加し、4行目は文字列からファイルオブジェクトを作成します。このメソッドは、ファイルがクラスと同じフォルダにあることを前提としています。

プログラムがlibsフォルダとともに.jarとしてパッケージ化されている場合は、代わりにこれを行うことができます。私たちはしなかった場合は、スペースは「%20」になってしまうので

String path = Test.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
String decodedPath = URLDecoder.decode(path, "UTF-8"); 
decodedPath+="/Temp"; 
File file = new File(decodedPath); 

今回我々は、UTF-8でそれを復号化し、.jarファイルへのパスを取得しています。 "Test"をクラスの名前に置き換え、 "/ Temp"をファイルへの.jar内のパスに置き換える必要があります。残りは非.jarメソッドと同じですが、 "。"を削除する必要はありません。文字列の最後から。 AnswerFabを使用して、.jarファイルのファイルパスをデコードします。

関連する問題