2012-04-26 8 views
0

eclipse IDEには、ファイルを読み込むスタンドアロンのJavaアプリケーションがあります。ファイルはすべてプロジェクトの下のフォルダにあります。
私は別のWebアプリケーションを作成し、サーブレットを作成し、上記のアプリケーションのjarファイルをWEB_INF/libに追加して、すべてのクラスを使用できるようにしました。サーブレットはかなりシンプルですが、Javaアプリケーションは私はjava.io.FileNotFoundExceptionを取得しました(システムは指定されたパスを見つけることができません)。
jarファイルをチェックしましたが、読み込むファイルが入っているフォルダがあります。私はTOMCATのクラスパスにフォルダを追加しようとしました。それでも私はそのエラーを取り除くことはできません。誰かが間違っていることを教えてもらえますか?サーブレットからjarクラスでクラスを実行するとFileNotFoundExceptionが発生する

私はエラーに

public class KnowledgeSummaryServlet extends HttpServlet { 

Answerer a = new Answerer(); 

を取得する場所は、クラスの回答がこの

public class Answerer { 
Lookup lvg = new Lookup("resources/test/xyz", "resources/test/test.txt"); 

のようなものである私は、サーブレット

java.io.FileNotFoundException: resources\test\xyz (The system cannot    
find the path specified) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at java.util.Scanner.<init>(Scanner.java:656) 
at com.Lookup.localInitialize(Lookup.java:49) 
at com.Lookup.<init>(Lookup.java:44) 
at com.Answerer.<init>(Answerer.java:27) 
at com.web.KnowledgeSummaryServlet.<init>(KnowledgeSummaryServlet.java:20) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
at java.lang.Class.newInstance0(Class.java:372) 
at java.lang.Class.newInstance(Class.java:325) 
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048) 
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:799) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 
+0

からリソースを読みながらそれはあなたが 'FileNotFoundException'を得ることは非常に奇妙です:あなたは、サーブレットにいることを考えると、次のようにちょうどそれらを取得し、/resourcesフォルダがクラスパスの一部であると仮定し

クラスパスこれは、クラスパス手段ではなくローカルディスクファイルシステム手段によってクラスパスリソースにアクセスしようとしていることを示唆しています。これは意味をなさないでしょう。質問を編集して試行のコードを表示し、スタックトレース全体を貼り付けることができますか? – BalusC

+0

私はちょうど質問 – icedek

答えて

2

あなたを実行したら、これはエラートレースでありますFileInputStreamを使用してクラスパスリソースをローカルディスクファイルシステムリソースとして取得しないでください。これは意味がありません。 ClassLoaderを使用して、クラスパスリソースをクラスパスリソースとして取得します。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream xyzInput = classLoader.getResourceAsStream("test/xyz"); 
InputStream txtInput = classLoader.getResourceAsStream("test/test.txt"); 
// ... 
+0

を編集しました。ありがとう、それは働いていました。しかし、将来的には、クラスパスにフォルダを追加せずに作業を開始する方法がありますか?フォルダをJavaアプリケーションのjarファイルから取り出しますか? – icedek

+0

クラスパスには、すべてのJARも含まれます。 – BalusC

関連する問題