web-dev-qa-db-ja.com

Eclipseでファイルから読み取る

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);
17
Buzkie

そこにファイルをコピーした後、プロジェクトフォルダーを更新(右クリック->更新)しましたか?これにより、ファイルシステムがEclipseの内部ファイルシステムと同期されます。

Eclipseプロジェクトを実行すると、CWD(現在の作業ディレクトリ)はプロジェクトのルートディレクトリになります。 binのディレクトリではありません。 srcのディレクトリではなく、ルートディレクトリ。

また、Linuxを使用している場合、ファイルシステムでは通常大文字と小文字が区別されることに注意してください。

19

絶対パスを使用してみましたか:

File file = new File(System.getProperty("user.dir") + "/file.txt");
7
kgiannakakis

実行ディレクトリ(クラスが格納されていると思います)でファイル「fiel.txt」を検索/読み取りしています。

与えられたディレクトリのファイルを読みたいなら、そう言う必要があります:

File file = new File(System.getProperty("user.dir")+"/"+"file.txt");

また、ディレクトリに相対パスを指定することもできます。たとえば、サブディレクトリの場合は「./images/photo.gif)。

セパレータのプロパティもあることに注意してください(私の例では「/」にハードコードされています)

よろしく

4
PATRY Guillaume

私はEclipseを使用していますが、「ファイルが見つからないという例外」が原因でファイルを読み込めない状態に陥りました。この問題を解決するためにしたことは、ファイルをプロジェクトのルートに移動したことです。お役に立てれば。

3
Electron

あなたのコードには何も問題はありません。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
paxdiablo

ファイルが正しいディレクトリにある場合でも、「ファイルが見つかりません」という例外が依然として存在する場合があります。できることの1つは、左側のクラスがあるEclipse内にテキストファイルをドロップすることです。コピーするかどうかを尋ねるメッセージが表示されたら、[はい]をクリックします。時には役立つ。

0
cdhw

探しているファイルはEclipseのランタイムワークスペースに存在しないため、ファイルの絶対パスを取得する必要があります-getProperty()またはgetLocationURI()メソッドを使用してファイルの絶対パスを取得します

0
shreyu108