お世話になっております。鍋谷と申します。

現在、ファイルのダウンロードを行ないそのファイルを解凍するという
JavaAppletを作成したいと考えております。

ファイルのダウンロードは実装できそうなのですが、
解凍について分からない事があります。

java.util.zipというクラスがありますが、このクラスを利用して
「J.D.Kなどをインストールしないで」ファイルの解凍が出来ないものでしょうか?

クライアントPCにJDKがインストールされていない場合でもファイルの解凍を
したいのです。

実際にやりたい動作としましては、ファイルのダウンロード+そのファイルの解凍です。
ですので、java.util.zipクラスを使わなくても可能であればそれで構いません。
また圧縮形式もzipに限らず、lha等特にこだわりません。
自己解凍形式のファイルをダウンロードし、ダウンロード完了後自動的に
自己解凍が始まる…と言うのでも構いません。

対象OSはWindowsでブラウザは特に限定していませんが
ブラウザが限定されてしまう事については問題ありません。

もしくは、「絶対できない」という事でも可能です。

何かご存知の方、ご教授の程よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

とりあえず解凍については下記URL及び参考URLを見てみて下さい。

何か助けになればと思います。
http://java-house.etl.go.jp/ml/archive/j-h-b/021 …

参考URL:http://java-house.etl.go.jp/ml/archive/j-h-b/014 …
    • good
    • 0

できないと思います。


「クライアントPCにJDKがインストールされていない場合でも」ということは
不特定多数の方々に配布という感じですよね?
arataさんのおっしゃるとおりセキュリティ上で制限がありますので、一回クライアント
におかれてしまったファイルはAppletから触れることができません。
SignedAppletにするればできそうですが、特定の人に配布するわけではなさそうなので難しいと思います。

この回答への補足

ありがとうございます。

配布は、「特定多数」です。
なのでSignedAppletを行なえば可能なのですね。

一応、次を読んだところファイルのダウンロードが可能らしいのです。
http://www.intlab.soka.ac.jp/~matsumi/material/j …

これで取得したファイルを解凍…と言う事は出来ないのでしょうか?

SignedAppletについて少し調べてみます。

補足日時:2001/02/01 14:29
    • good
    • 0

できないのではないかと思います。


Appletは、セキュリティ上、クライアントの環境を触ることはできないようになっていますので、ファイルを書き込むことは出来ないと思います。

この回答への補足

ありがとうございます。
セキュリティ認証を行なえばできそうな感じがしますが
認証を通しても無理でしょうか?

補足日時:2001/02/01 14:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJAVAでZIP圧縮を行うプログラムを作成したのですがXPの標準機能で解凍できません。

org.apache.tools.zip.ZipEntry;
org.apache.tools.zip.ZipOutputStream;

を使用しZIP圧縮を行うプログラムを作成し無事に圧縮に成功し
解凍ソフトを使用すると解凍もうまくいくのですが
windowsXPの標準で開こうとすると開くことができません。
また、解凍ソフトによっても解凍できないものもあります。

圧縮時に何か特別なことをおこなわないとならないのでしょうか?
よろしくお願いします。

Aベストアンサー

flushとか正しく後処理していますか?
ソースを載せていただければわかるかも。

QZip(Pass)のファイルの解凍時間の短縮

Zip(Pass)のファイルの解凍時間の短縮

JavaでZip(Pass)のファイルをSDカードから読込む処理を実装してます。
実際にほしいのは1つのEntryだけで現在下記のように実装してますが、
一つの画像(500kb程度)を引き出すのに4秒以上掛かってしまいます。

zf = new ZipFile(new File(filaName), "UTF-8");
zf.setPassword(password.getBytes("UTF-8"));
zf.setCheckCrc(true); //since 2008-12-21
for (Iterator<ZipEntry> i = zf.getEntriesIterator(); i.hasNext();) {
ze = i.next();
if(ze.getName().equals(pageNo)){
is = zf.getInputStream(ze);
bos = new ByteArrayOutputStream();
for (;;) {
int size = is.read();
if (size == -1) break;
bos.write(size);
}
is.close();
b= bos.toByteArray();
bos.close();
break;
}
}
zf.close();

もっと効率の良い実装方法ありますでしょうか?

Iterator<ZipEntry>を使用せずにZipFileのgetEntry(String)で使えると思いましたがZipEntryが戻りませんでした。
ZipPassはhisidamaさんのサイトからjarを使わせて頂いてます。
http://www.ne.jp/asahi/hishidama/home/tech/soft/java/zip.html
全て展開すると時間が掛かるので必要なEntryだけ取り出して使いたいです。

以上、よろしくお願いします。

Zip(Pass)のファイルの解凍時間の短縮

JavaでZip(Pass)のファイルをSDカードから読込む処理を実装してます。
実際にほしいのは1つのEntryだけで現在下記のように実装してますが、
一つの画像(500kb程度)を引き出すのに4秒以上掛かってしまいます。

zf = new ZipFile(new File(filaName), "UTF-8");
zf.setPassword(password.getBytes("UTF-8"));
zf.setCheckCrc(true); //since 2008-12-21
for (Iterator<ZipEntry> i = zf.getEntriesIterator(); i.hasNext();) {
ze = i.next();
if(ze.getName().equals(pageN...続きを読む

Aベストアンサー

 こんにちは。

>Iterator<ZipEntry>を使用せずにZipFileの
>getEntry(String)で使えると思いましたが
>ZipEntryが戻りませんでした

 エントリー名は本当に正確ですか?
 特にファイルの名前区切り文字は間違っていませんか?
 スラッシュだったり、円マークだったりするので、間違っているのではないですか?

>もっと効率の良い実装方法ありますでしょうか?

 出力は、ByteArrayOutputStream を使っているので、問題ないとして、
 入力の方は、InputStream をそのまま使っているのが、最大のボトルネックだと思います。
 BufferedInputStream をかませるか、独自のバッファを使うかして、効率よくした方がいいと思います。

Q自己解凍形式ファイルの作成

こんにちは,k-makotoと申します。JAVAで自己解凍形式のファイルを
作成しようと思っているのですが、可能なのでしょうか?
Zipファイルの作成の仕方はインターネットで調べて分かったのですが、
自己解凍形式の方法がわかりません。

Aベストアンサー

これなんかどうでしょうか。

参考URL:http://www.webtech.co.jp/exepress/

Qjava.util.Calendar クラスの add メソッドについて

APIドキュメントの Calendar クラスの解説のところに、

//------------------------------------------------------------------

Add rule 2。小さいフィールドが不変式であると予想される場合に、フィールド f が変更されてから最小値または最大値が変更されたために、その前の値と等しくならないと、フィールドの値はその予想される値にできるだけ近くなるように調整されます。小さいフィールドは、小さい時間の単位を表します。HOUR は、DAY_OF_MONTH よりも小さいフィールドです。不変式ではないと予想される小さいフィールドは、調整されません。カレンダシステムでは、不変式であると予想されるフィールドが判断されます。

//------------------------------------------------------------------

という記述がありますが、何のことかさっぱりわかりません。
いろいろ試しましたが、add メソッドが直感に反する振舞いをすることは
ありませんでした。

こういうコードを書くと、add メソッドが変な動きをするよ、というのが
あったら教えてください。

APIドキュメントの Calendar クラスの解説のところに、

//------------------------------------------------------------------

Add rule 2。小さいフィールドが不変式であると予想される場合に、フィールド f が変更されてから最小値または最大値が変更されたために、その前の値と等しくならないと、フィールドの値はその予想される値にできるだけ近くなるように調整されます。小さいフィールドは、小さい時間の単位を表します。HOUR は、DAY_OF_MONTH よりも小さいフィールドです。不変式ではないと予...続きを読む

Aベストアンサー

> 不変式ではないと予想される小さいフィールドは、調整されません。
>
> という一文があるのが気になってます。
> 調整されない、というのはどういうことで、
> 具体的にどういうときに起こるものなんでしょうか。
> それとも何か、考え方が根本的に間違ってるんでしょうか。

javadocにあるとおり、addメソッドで月を変更しても、より小さい不変式ではないと予想されるフィールド(DAY_OF_YEARやDAY_OF_WEEK)が再計算されないことを意味します。

ここで問題になるのが、Calendarクラスのgetメソッドです。
(GregorianCalendarはオーバーライドしていないので同じもの)

addメソッドの中では不変式フィールド(YEARやMONTHなど)については再計算していますが、不変式ではないDAY_OF_WEEKなどは再計算されていません。
が、実際はgetメソッドの中でこれらの値を補正するための関数(abstract指定されているので、実際はGregorianCalendarの中の関数)で補正しなおしています。

> いろいろ試しましたが、add メソッドが直感に反する振舞いをすることは
> ありませんでした。

上記のような理由から、getメソッドが呼ばれると自動的に補正されます。


このため、例えば以下のようなソースを記述します。

import java.util.GregorianCalendar;
public class CalendarDemo extends GregorianCalendar {

 public CalendarDemo(int year, int month, int day) {
  super(year, month, day);
 }
 public int myGet(int field) {
  return internalGet(field);
 }
}

このクラスでは、フィールドの値を取得するときに、補正を行わずに取得します。そして、addメソッドで月のフィールドに値を加算し、myGetメソッドでDAY_OF_YEARなどを取得すると、見事に補正されない値が返されているのが分かります。。。

public void met() {
 CalendarDemo cal = new CalendarDemo(2001, 0, 1);
 GregorianCalendar cal2 = new GregorianCalendar(2001, 0, 1);

 cal.add(Calendar.MONTH, 9);
 cal2.add(Calendar.MONTH, 9);

 System.out.println( "DAY_OF_YEAR(Demo) : " + cal.myGet(Calendar.DAY_OF_YEAR) );
 System.out.println( "DAY_OF_YEAR(Greg) : " + cal2.get( Calendar.DAY_OF_YEAR ) );
 System.out.println( "DATE(Demo) : " + cal.myGet(Calendar.DATE) );
 System.out.println( "DATE : " + cal2.get( Calendar.DATE ) );
 System.out.println( "CalendarDemo = " + cal.getTime().toString() );
 System.out.println( "GregorianCalendar = " + cal2.getTime().toString() );
}


Calendarクラスを利用するプログラムでは、getメソッドを使わずにフィールドにアクセスすることは不可能(フィールドがprotected intだから)なので問題になることはないようです。
ただし、サブクラスを作るような場合には、上記の条件の影響を受ける可能性がありますので、注意が必要ということになります。

> 不変式ではないと予想される小さいフィールドは、調整されません。
>
> という一文があるのが気になってます。
> 調整されない、というのはどういうことで、
> 具体的にどういうときに起こるものなんでしょうか。
> それとも何か、考え方が根本的に間違ってるんでしょうか。

javadocにあるとおり、addメソッドで月を変更しても、より小さい不変式ではないと予想されるフィールド(DAY_OF_YEARやDAY_OF_WEEK)が再計算されないことを意味します。

ここで問題になるのが、Calendarクラスのgetメソ...続きを読む

Q定数/UTILクラス等の置き場所について

JavaでWebアプリを作成する際に全体で共通して使用する定数クラスや自作のUTILクラスは一般的にどのパッケージ・ディレクトリ下に置くのが良いでしょうか?
(例.プロジェクトルートフォルダ-「src」フォルダ-「common」パッケージ-定数クラスなど?)

現在Slim3フレームワークを使用しているので同じフレームワークを使用している方の意見であれば
非常に有り難いですが、それ以外の方の意見も是非お聞かせ下さい。

Aベストアンサー

struts ですが、
全体で共通のものはWebアプリとは別の jar にして参照する形
にしてます。
ユーティリティは utils, 定数などはcommon フォルダです。


人気Q&Aランキング

おすすめ情報