[解決済み] java.io.FileNotFoundException: 指定されたファイルが見つかりません。
質問
私は"という名前のファイルを持っています。
word.txt
となります。
と同じディレクトリにあり、私の
java
ファイルを作成します。
しかし、次のコードでアクセスしようとすると、このような ファイルが見つかりません というエラーが発生します。
Exception in thread "main" java.io.FileNotFoundException: word.txt
(The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at Hangman1.main(Hangman1.java:6)
以下は私のコードです。
import java.io.File;
import java.util.*;
public class Hangman1 {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(new File("word.txt"));
String in = "";
in = input.nextLine();
}
}
解決方法は?
word.txtをプロジェクトルートフォルダの子として、srcのピアに直接置く。
Project_Root
src
word.txt
免責事項 この特殊なケースでなぜうまくいくのか、なぜ他の人にはうまくいかないのかを説明したいと思います。
なぜうまくいくのか
を使用する場合
File
または他の
FileXxx
の変種を使う場合、ファイルシステム上で
"作業ディレクトリ"。
. 作業ディレクトリは、このように記述することができます。
コマンドラインから実行する場合
C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1
作業ディレクトリは
C:\EclipseWorkspace\ProjectRoot\bin
. IDEでは(少なくとも私が扱ったすべてのIDEでは)、作業ディレクトリは
ProjectRoot
. そのため、ファイルが
ProjectRoot
の場合、作業ディレクトリのルートにあるため、相対パスとしてファイル名だけを使用することは有効です。
同様に、これがあなたのプロジェクトの構造であったとしたら
ProjectRoot\src\word.txt
の場合、パス
"src/word.txt"
が有効になります。
機能しない可能性がある理由
一つは、作業ディレクトリが常に変更される可能性があることです。例えば、上の例のようにコマンドラインからコードを実行すると、作業ディレクトリは
bin
. なので、この場合は
bin\word.txt
次に、このプロジェクトをjarにエクスポートする場合、このファイルがjarに含まれるように設定されていると、パスが有効でなくなるため、これも失敗します。
ということは、そのファイルを
埋め込みリソース
(または、単に "リソース" - 相互に使用する用語です). もしそうなら、そのファイルをクラスパスに構築し、URL経由でアクセスすることになります。この場合、まず最初にしなければならないことは、そのファイルが
ビルド
をクラスパスに追加します。プロジェクトルートにファイルがある状態で、そのファイルをインクルードするようにビルドを設定する必要があります。
しかし
に置いた場合、そのファイルは
src
またはそれ以下のディレクトリにある場合、デフォルトのビルドでは、クラスパスにそれを置く必要があります。
クラスパス・リソースには、いくつかの方法でアクセスすることができます。例えば
Class
クラスがあり、これは
getResourceXxx
メソッドがあり、そこからクラスパスのリソースを取得することができます。
例えば、プロジェクト構造を
ProjectRoot\src\resources\word.txt
を使用することができます。
InputStream is = Hangman1.class.getResourceAsStream("/resources/word.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
getResourceAsStream
は
InputStream
しかし、その裏側ではURLを取得しています。別の方法として
URL
が必要な場合は
getResource()
は URL を返します。
Mavenユーザーの場合、ディレクトリ構造が以下のような場合
src/main/resources
の中身は
resources
フォルダは、クラスパスのルートに置かれます。ですから、もしそこにファイルがあるのなら、あなたはただ
getResourceAsStream("/thefile.txt")
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Javaの".class expected "について
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javaの".class期待値"
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)