- PR -

ファイルの圧縮について

1
投稿者投稿内容
迷い猫
常連さん
会議室デビュー日: 2004/08/13
投稿数: 30
投稿日時: 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
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-08-20 16:22
引用:

迷い猫さんの書き込み (2004-08-20 15:32) より:

/** 最初に呼び出される処理 */

public static void Compression( String inflie,String outfile ) {

try {
File file = new File( inflie );
zf = new File( outfile + ".zip" );
compressFile( file );
}




File file = new File( inflie );
としてるところで、ちゃんと実体のあるファイルクラスのインスタンスが作れてますか?
infile の値がおかしかったりすると、ちゃんとfileのインスタンスが作れません。
(ただし、exceptionも発生しません)
迷い猫
常連さん
会議室デビュー日: 2004/08/13
投稿数: 30
投稿日時: 2004-08-20 17:18
infile の中には「C:\XXX\どうして.doc」と入っています。
ファイルクラスのインスタンスがきちんと作られていなくても、
Zipファイルはつくられるものなんでしょうか?
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-08-20 18:43
SimpleZipクラスはJ2SEだけあれば動くようなので、適当なテストクラスにmain
メソッドを書いてSimpleZipを呼び出し、デバッガ上でステップ実行してみては
いかがですか?

#お前がやれって? …いかん、持病のシャクが…orz

それと、File#exists()、File#isFile()等を呼び出すことでFileオブジェクト
が内部に持っているパスに該当するファイルがファイルシステム上にあるかどう
かをチェックすることができますよ。
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2004-08-20 19:39
コード:
zip.Compression("C:/XXXXX/どうして.doc","C:/JAVA/ZipTest/どうして"); 



ぱっと見てプログラム中のエンマークの扱いなのかなと・・・。
zip.Compression("C:\\XXXXX\\どうして.doc","C:\\JAVA\\ZipTest\\どうして");
迷い猫
常連さん
会議室デビュー日: 2004/08/13
投稿数: 30
投稿日時: 2004-08-23 13:43
Clusterさん・シュンさん・SJ0392さん
回答ありがとうございました。

私のやり方では、InとOutの場所を違うところを指定していました。
処理の中で、Outの場所をうまく認識しておらず、
Zipファイルにちゃんとファイルが入っていなかったようです。
Inと同じ場所を指定したら、うまくいくようになりました。
もう少し、圧縮処理を理解してから、
InとOutを違う場所を指定するようにしたいと思います。

まだ、未熟のためまた質問を投げてしまうと思いますが、
宜しくお願い致します。
ご回答本当にありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)