- - PR -
ファイルの圧縮について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-20 15:32
こんにちわ。
今回はファイルの圧縮についてお聞きしたいことがあります。 指定したファイルを圧縮したいのですが、うまく出来ません。 私の作成した処理でやると、ZIPファイルは出来るのですが、 ZIPファイルの中身は空のままになってしまいます。 原因がわからないため、ココに質問させて頂きました。 ==== Actionコード ============= package study.struts.action; import javax.servlet.http.*; import org.apache.commons.logging.*; import org.apache.struts.action.*; import study.struts.action.SimpleZip; /** * Class LogonAction */ public class ZipAction extends Action { // --------------------------------------------------------- Instance Variables private static Log log = LogFactory.getLog(ZipAction.class); // --------------------------------------------------------- Methods public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SimpleZip zip = new SimpleZip(); zip.Compression("C:/XXXXX/どうして.doc","C:/JAVA/ZipTest/どうして"); return mapping.findForward("success"); } } ==== Zipコード ============= package study.struts.action; import java.io.*; import java.util.zip.*; /** 単独のファイルを zip形式にファイルを圧縮する SimpleZip */ public class SimpleZip { /** ファイルの読み込みの終わりを表す定数 */ protected static final int EOF = -1; /** Zip形式のファイル(ZipFileのクラスではない) */ protected static File zf; /** 最初に呼び出される処理 */ public static void Compression( String inflie,String outfile ) { try { File file = new File( inflie ); zf = new File( outfile + ".zip" ); compressFile( file ); } catch( FileNotFoundException e ){ System.out.println( "file not found" ); } catch( ZipException e ){ System.out.println( "Zip error..." ); } catch( IOException e ){ System.out.println( "IO error..." ); } } /** 与えられたファイルを圧縮する */ public static void compressFile( File file ) throws FileNotFoundException,ZipException,IOException { try { FileInputStream fis = new FileInputStream( file ); BufferedInputStream bis = new BufferedInputStream( fis ); FileOutputStream fos = new FileOutputStream( zf ); ZipOutputStream zos = new ZipOutputStream( fos ); ZipEntry target = new ZipEntry( file.getPath() ); zos.putNextEntry( target ); /* バッファリングは自動的に行われるので、ここで指定している バッファサイズは、特別に意味は持たない */ byte buf[] = new byte[1024]; int count; while( ( count = bis.read( buf, 0, 1024 ) ) != EOF ) { zos.write( buf, 0, count ); } bis.close(); // fis より先にクローズすること fis.close(); zos.closeEntry(); zos.close(); // fos より先にクローズすること fos.close(); } catch( FileNotFoundException e ){ throw e; } catch( ZipException e ){ throw e; } catch( IOException e ){ throw e; } } } 申し訳ありませんが、ご教授のほど宜しくお願い致します。 開発環境 WindowsXP Struts1.1 Tomcat5.0 J2SDK1.4.2_02 Ant1.5.3-1 | ||||
|
投稿日時: 2004-08-20 16:22
File file = new File( inflie ); としてるところで、ちゃんと実体のあるファイルクラスのインスタンスが作れてますか? infile の値がおかしかったりすると、ちゃんとfileのインスタンスが作れません。 (ただし、exceptionも発生しません) | ||||
|
投稿日時: 2004-08-20 17:18
infile の中には「C:\XXX\どうして.doc」と入っています。
ファイルクラスのインスタンスがきちんと作られていなくても、 Zipファイルはつくられるものなんでしょうか? | ||||
|
投稿日時: 2004-08-20 18:43
SimpleZipクラスはJ2SEだけあれば動くようなので、適当なテストクラスにmain
メソッドを書いてSimpleZipを呼び出し、デバッガ上でステップ実行してみては いかがですか? #お前がやれって? …いかん、持病のシャクが…orz それと、File#exists()、File#isFile()等を呼び出すことでFileオブジェクト が内部に持っているパスに該当するファイルがファイルシステム上にあるかどう かをチェックすることができますよ。 | ||||
|
投稿日時: 2004-08-20 19:39
ぱっと見てプログラム中のエンマークの扱いなのかなと・・・。 zip.Compression("C:\\XXXXX\\どうして.doc","C:\\JAVA\\ZipTest\\どうして"); | ||||
|
投稿日時: 2004-08-23 13:43
Clusterさん・シュンさん・SJ0392さん
回答ありがとうございました。 私のやり方では、InとOutの場所を違うところを指定していました。 処理の中で、Outの場所をうまく認識しておらず、 Zipファイルにちゃんとファイルが入っていなかったようです。 Inと同じ場所を指定したら、うまくいくようになりました。 もう少し、圧縮処理を理解してから、 InとOutを違う場所を指定するようにしたいと思います。 まだ、未熟のためまた質問を投げてしまうと思いますが、 宜しくお願い致します。 ご回答本当にありがとうございました。 | ||||
1
