2016-07-10 13 views
0

Tomcat 8を使用してプロジェクトをビルドしています。ディレクトリ内のすべてのファイルで単語の数をカウントします。私は関数を記述し、関数を実行してカウントを返すRest Api GETリクエストを作成したいと思います。しかし、PostManを使用してAPI呼び出しをテストすると、NullPointerExceptionが発生します。私がローカルでこの関数を実行すると、それは良い仕事です。しかし、Tomcat 8サーバーでは同じ機能は動作しません。java.lang.NullPointerException Tomcat 8で実行され、ファイルを反復処理する場合

Servlet.service() for servlet [api.wordNum] in context with path [/Test] threw exception 
java.lang.NullPointerException 
    at api.WordCountHandler.countWords(WordCountHandler.java:78) 
    at api.wordNum.doGet(wordNum.java:30) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

reported-誤差TIS以下は私のコードです -

public static int countWords() { 
    File dir = new File("src/testfiles/"); 
    int count = 0; 
    for (File file : dir.listFiles()) { 
     try { 
      Scanner s; 
      s = new Scanner(file); 
      while (s.hasNext()) { 
       count++; 
      } 
      s.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    System.out.println(count); 
    return count; 
} 

API呼び出し -

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    int result = WordCountHandler.countWords(); 
    response.getWriter().append(Integer.toString(result)); 
} 

NullPointerExceptionがこのライン - で起こるあります

for (File file : dir.listFiles()) { 

答えて

1

メソッドlistFilesは、この抽象パス名がディレクトリを示さない場合はnullを返します。 src/testfiles/は存在しますか?おそらく、ファイルシステムのルートから完全なパスを含める必要があります。そうでない場合、この相対パスは、コードが含まれるディレクトリの下にあります。

ループの前にラインテストdir.exists()を含め、存在しない場合は適切なエラーをスローする必要があります。

+0

ありがとうございます。パス名を絶対パスに変更した後に問題が修正されました。 – Randal

0

おそらく相対パスの問題です。最初に絶対ファイルパスで試してください。

関連する問題