2017-12-21 1 views
1

私はIntelli-J Idea IDEを使用しており、Java EE Webプロジェクトで作業しています。私はwords.txtファイルを読み込もうとしています。コードはコマンドラインで正常に動作していますが、コードをglassfishサーバーにデプロイすると、 "FileNotFoundException"が表示されます。Java EE Webプロジェクトでファイルを読む

ファイルは、ファイルの内容読み取るためのコード

「のsrc /アナライザ/ pWords.txt」に位置しています:StackOverflowのを検索した後

Scanner scan = new Scanner(new File("src/Analyser/pWords.txt")); 

を、私は私がこのファイルを追加する必要があることが判明しましたリソースディレクトリ。残念ながら、私はリソースを作成することができません。私はパッケージmainsrcフォルダ内のリソースを作成すると、パッケージがmain.resourcesなり、私のような別の方法を試してみました:

InputStream inputStream = new FileInputStream("src/Analyser/pWords.txt"); 

しかし、結果はnullまたはerrorです。

私のプロジェクトでsrc/Analyser/ディレクトリからファイルを読み取る方法はありますか?これはJava EE Webプロジェクトです。

UPDATE:プロジェクト構造から

>>WEB-INFフォルダアーティファクトは、私がpWords.txtファイルをアップロードしました。そして最後に、BufferedReaderは空ではなく、デバッグ中はbufferedReaderにデータが含まれていることがわかります。しかし、データを文字列変数にコピーすると、変数はnullのままです。私はそれについてかなり混乱しています。

コード:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    InputStream stream = classLoader.getResourceAsStream("pWords.txt"); 
    BufferedReader bf = new BufferedReader(new InputStreamReader(stream)); 
    String t = ""; 
    try { 
     while((t = bf.readLine()) != null) { // in debugging, (cb) contains the char data as char elements. 
      t += bf.readLine(); // but t = null 
     } 
    } catch(IOException x) { 

    } 
+2

。クラスパスリソースの入力ストリームを開く必要があります。ソースではありません。 /リソースはクラスパスになければなりません。あなたのパッケージのルートに関連して読む。 – duffymo

+0

@duffymoどのようにしてクラスパスにリソースを追加できますか?第二に、私はどちらかのリソースを作成することはできません。 – Nix

+1

作成できませんか?もちろん可能です。標準のMavenディレクトリ構造を使用して、IntelliJ成果物を使用してJava EEパッケージを構築することをお勧めします。 src/main/resourcesの内容はCLASSPATHに自動的に入ります。 – duffymo

答えて

1

を試してみてください!

1.)変数tは2通りの方法で使用しています。一方では結果をt += bf.readLine();で、もう一方ではストリームからの更なる入力を(t = bf.readLine()) != nullで上書きしています。これはwhileループのアボート条件なので、最後にはtが常にnullになる!

2.)while条件とループ内でbf.readLine()を2回呼び出しています。 readLine()のAPI/javadocを読むと、この2つの呼び出しが2つの異なる(!)結果を返すことがわかります。この方法では、ストリーム(bf)に1行のテキストしか含まれていない場合は、bf.readLine()の呼び出しでテキスト行が返され、変数tに追加しようとすると、bf.readLine()のストリームの終わりに達したのでnullを返します。

解決策:あなたは、Java EEのファイルシステムを使用することはできません

String singleLine; 
String wholeText = ""; 
try { 
    while((singleLine = bf.readLine()) != null) { 
     wholeText += singleLine; 
    } 
} catch(IOException x) { 
} 
1

ニックスは、あなたがあなたのコード内の二つの問題/ errosを持っています。この

InputStream in = this.getClass().getClassLoader() 
           .getResourceAsStream("Analyser/pWords.txt”); 
+0

'this'は静的コンテキストからは参照できません。私はこのエラーが発生します。 – Nix

+0

あなたはクラス全体を投稿できますか? – Kumar

+0

これは静的なクラスなので、静的ではないので 'this'は使用できません。私はちょうど方法に問題がある、私は質問を更新してください確認してください。 – Nix

関連する問題