0

Eclipse IDEには、ファイルを読み取るスタンドアロンのJavaアプリケーションがあります。ファイルはすべてプロジェクトの下のフォルダーにあります。
別のWebアプリケーションを作成してサーブレットを作成し、上記のアプリケーションのjarファイルをWEB_INF / libに追加して、その中のすべてのクラスを使用できるようにしました。サーブレットは非常に単純ですが、Javaアプリケーションは使用したファイルを読み取ることができません。以前に。java.io.FileNotFoundExceptionが発生します(システムは指定されたパスを見つけることができません)。
jarファイルを確認したところ、読み取るファイルが含まれているフォルダーが含まれています。TOMCATのクラスパスにフォルダーを追加してみました。しかし、それでも私はそのエラーを取り除くことができません。誰かが私に何が悪いのか教えてもらえますか?

エラーが発生する場所

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)
4

1 に答える 1

2

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

サーブレットにいて、フォルダーがクラスパスの一部であると仮定すると、/resources次のように取得するだけです。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream xyzInput = classLoader.getResourceAsStream("test/xyz");
InputStream txtInput = classLoader.getResourceAsStream("test/test.txt");
// ...
于 2012-04-27T04:32:29.677 に答える