0

こんにちは、

プログラムでjarファイルの内容を抽出しようとしていますが、サーブレットを使用せずにローカルマシンでjarファイルの内容を抽出できるコードスニペットを見つけました 。

コードが機能することがわかったので、ローカルのサーブレット環境、特に Tomcat 7.0.22 で使用しようとしています。これまでのところ、以下のコードがありますが、jar の内容を出力できませんでした。出力ストリームを正しく処理していないと思われるため、ローカル Tomcat サーバーのローカル ディレクトリに何も保存されません。

誰かが私を正しい方向に向けたり、読み取った内容をファイルに出力するようにコードを修正する方法についてアドバイスを提供したりできますか?

import java.io.*;
import java.util.*;
import javax.servlet.*;


@SuppressWarnings("serial")
public class JarExtractor extends HttpServlet {
  @SuppressWarnings("rawtypes")
  protected void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {
    try {

        String path = getServletContext().getRealPath("test.jar");
        JarFile jar = new JarFile(path);
        Enumeration jarEnum = jar.entries();

        while (jarEnum.hasMoreElements()) {
            JarEntry file = (JarEntry) jarEnum.nextElement();
            File f = new File(file.getName());
            if (file.isDirectory()) {       // if its a directory, create it
                f.mkdir();
                continue;
            }
            InputStream in = jar.getInputStream(file); // get the input stream
            OutputStream output = new FileOutputStream(f);
            while (in.available() > 0) {  // write contents of 'is' to 'fos'
                output.write(in.read());
            }
            output.close();
            in.close();
        }
    }
    catch(Exception ex) 
    {
        //------
    }   
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
  try 
      {
      doPost(request,response);
  } 
      catch (ServletException e) 
      {
    // 
  } 
      catch (IOException e) 
      {
    //
  }
}

}

どなたでもご利用いただけますので、どうぞよろしくお願いいたします。

週末をお楽しみください!

4

1 に答える 1

0

出力ファイルも実際のパス(または他の既知の場所)に基づいている必要があります。そうでない場合は、サーブレットコンテキストの外部で、jarコンポーネントの名前だけに基づいた場所に書き込んでいる可能性があります。

于 2011-10-09T19:13:29.703 に答える