Javaプログラムにデータを入力するためにテキストファイルから読み取ろうとしています。しかし、Eclipseはファイルをどこに置いてもソースが見つかりませんというエラーを継続的に表示します。
プロジェクトディレクトリに追加のソースフォルダーを作成しましたが、問題のファイルはそのフォルダーとプロジェクトのbinファイルの両方にありますが、まだ見つかりません。
それをデスクトップにコピーして、Eclipseでソースルックアップパスを参照するように求められたときに、Eclipseをポイントしてみました。
何をしても、ファイルが見つかりません。
適切な場合のコードは次のとおりです。
System.out.println(System.getProperty("user.dir"));
File file = new File("file.txt");
Scanner scanner = new Scanner(file);
さらに、ユーザーディレクトリはプロジェクトディレクトリであり、そこにもコピーがあると書かれています。
どうすればいいのかわかりません。
ありがとう、アレックス
以下の提案を試みて再度更新した後、エラーのホストに迎えられました。
FileNotFoundException(Throwable).<init>(String) line: 195
FileNotFoundException(Exception).<init>(String) line: not available
FileNotFoundException(IOException).<init>(String) line: not available
FileNotFoundException.<init>(String) line: not available
URLClassPath$JarLoader.getJarFile(URL) line: not available
URLClassPath$JarLoader.access$600(URLClassPath$JarLoader, URL) line: not available
URLClassPath$JarLoader$1.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]
URLClassPath$JarLoader.ensureOpen() line: not available
URLClassPath$JarLoader.<init>(URL, URLStreamHandler, HashMap) line: not available
URLClassPath$3.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]
URLClassPath.getLoader(URL) line: not available
URLClassPath.getLoader(int) line: not available
URLClassPath.access$000(URLClassPath, int) line: not available
URLClassPath$2.next() line: not available
URLClassPath$2.hasMoreElements() line: not available
ClassLoader$2.hasMoreElements() line: not available
CompoundEnumeration<E>.next() line: not available
CompoundEnumeration<E>.hasMoreElements() line: not available
ServiceLoader$LazyIterator.hasNext() line: not available
ServiceLoader$1.hasNext() line: not available
LocaleServiceProviderPool$1.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]
LocaleServiceProviderPool.<init>(Class<LocaleServiceProvider>) line: not available
LocaleServiceProviderPool.getPool(Class<LocaleServiceProvider>) line: not available
NumberFormat.getInstance(Locale, int) line: not available
NumberFormat.getNumberInstance(Locale) line: not available
Scanner.useLocale(Locale) line: not available
Scanner.<init>(Readable, Pattern) line: not available
Scanner.<init>(ReadableByteChannel) line: not available
Scanner.<init>(File) line: not available
使用されるコード:
System.out.println(System.getProperty("user.dir"));
File file = new File(System.getProperty("user.dir") + "/file.txt");
Scanner scanner = new Scanner(file);
そこにファイルをコピーした後、プロジェクトフォルダーを更新(右クリック->更新)しましたか?これにより、ファイルシステムがEclipseの内部ファイルシステムと同期されます。
Eclipseプロジェクトを実行すると、CWD(現在の作業ディレクトリ)はプロジェクトのルートディレクトリになります。 binのディレクトリではありません。 srcのディレクトリではなく、ルートディレクトリ。
また、Linuxを使用している場合、ファイルシステムでは通常大文字と小文字が区別されることに注意してください。
絶対パスを使用してみましたか:
File file = new File(System.getProperty("user.dir") + "/file.txt");
実行ディレクトリ(クラスが格納されていると思います)でファイル「fiel.txt」を検索/読み取りしています。
与えられたディレクトリのファイルを読みたいなら、そう言う必要があります:
File file = new File(System.getProperty("user.dir")+"/"+"file.txt");
また、ディレクトリに相対パスを指定することもできます。たとえば、サブディレクトリの場合は「./images/photo.gif)。
セパレータのプロパティもあることに注意してください(私の例では「/」にハードコードされています)
よろしく
私はEclipseを使用していますが、「ファイルが見つからないという例外」が原因でファイルを読み込めない状態に陥りました。この問題を解決するためにしたことは、ファイルをプロジェクトのルートに移動したことです。お役に立てれば。
あなたのコードには何も問題はありません。user.dirディレクトリにfile.txtがある場合、以下はうまくいきます。
import Java.io.File;
import Java.util.Scanner;
public class testme {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
File file = new File("file.txt");
try {
Scanner scanner = new Scanner(file);
} catch (Exception e) {
System.out.println(e);
}
}
}
Eclipseがファイルの場所を信頼しないでください。 Windowsエクスプローラーまたは同等のものを使用して実際のファイルシステムにアクセスし、確認します。
編集内容に基づいて、インポートステートメントも確認する必要があると思います。
ファイルが正しいディレクトリにある場合でも、「ファイルが見つかりません」という例外が依然として存在する場合があります。できることの1つは、左側のクラスがあるEclipse内にテキストファイルをドロップすることです。コピーするかどうかを尋ねるメッセージが表示されたら、[はい]をクリックします。時には役立つ。
探しているファイルはEclipseのランタイムワークスペースに存在しないため、ファイルの絶対パスを取得する必要があります-getProperty()またはgetLocationURI()メソッドを使用してファイルの絶対パスを取得します