質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3089閲覧

Android)zipEntryからデータ文字列を取り出す方法

navesanta

総合スコア198

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/06/20 00:02

HTTPサーバー上に5行の文字列が入っているテキストファイルdata.txtをZip形式で保存したdata.zipがあります。
非同期でHttpUrlConnectionを使ってこのZipファイルをアプリのローカルフォルダに保存しました。
そしてこの保存したZipファイルをzipEntryにしました。

質問はこのzipEntryの中から5行の文字列データを取り出すにはどのようなメソッドを使ったらいいのでしょうか?

ちなみに下記はできます。

・zipEntryから解凍したファイル名はzipEntry.getNameで取得することはできます。
・Zipデータでない場合はInputStreamとBufferdReader.readLineなどを
使って取得することはできます。(ZipEntryからの取得が分からない)

よろしくお願いします。

環境 os mac
開発環境 Android studio 2.2.3

MainActivity.java

public

1 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_main); 6 7 try { 8 new HttpGetTask().execute( 9 new URL("http://○○○.com/data.zip")); 10 11 } catch (MalformedURLException e) { 12 e.printStackTrace(); 13 } 14 15 zipExpand(); 16 17 18 public void zipExpand() { 19 ZipInputStream zipInputStream = null; 20 ZipEntry zipEntry = null; 21 try { 22 zipInputStream = new ZipInputStream(openFileInput("data.zip")); 23 //zipファイルに含まれるエントリに対して順にアクセスする 24 while ((zipEntry = zipInputStream.getNextEntry())!= null){ 25 ★File newFile = new File(zipEntry.getName()); 26 Log.d("UAA:newFile", String.valueOf(newFile)); 27 28 } 29 } catch (FileNotFoundException e) { 30 e.printStackTrace(); 31 } catch (IOException e) { 32 e.printStackTrace(); 33 } 34 } 35} 36```HttpGetTask.java 37``````ここに言語を入力 38public final class HttpGetTask extends AsyncTask<URL, Void, String> { 39 40 @Override 41 protected String doInBackground(URL... urls) { 42 //取得したテキストを格納する変数 43 final StringBuilder result = new StringBuilder(); 44 //アクセス先URL 45 final URL url = urls[0]; 46 47 HttpURLConnection con = null; 48 try { 49 //ローカル処理 50 //コネクション取得 51 con = (HttpURLConnection)url.openConnection(); 52 //UserAgentを設定する 53 con.setRequestProperty("User-Agent", "pass=XXXXXXX"); 54 con.connect(); 55 Log.d("UAA", String.valueOf(con)); 56 57 //HTTpレスポンスコード 58 final int status = con.getResponseCode(); 59 if (status == HttpURLConnection.HTTP_OK){ 60 //通信に成功したら 61 //ファイルのダウンロード処理を実行する 62 //読み込み用ストリーム 63 FileOutputStream fileOutputStream 64 = MyApplication.getmContext().openFileOutput( 65 "data.zip", Context.MODE_PRIVATE); 66 InputStream inputStream = con.getInputStream(); 67 byte[] buffer = new byte[1024]; 68 //一行ずつテキストを読み込む 69 int len = 0; 70 while ((len = inputStream.read(buffer))>0){ 71 fileOutputStream.write(buffer, 0, len); 72 } 73 //各ストリームを閉じる 74 fileOutputStream.close(); 75 inputStream.close(); 76 } 77 }catch (MalformedURLException e1) { 78 e1.printStackTrace(); 79 }catch (ProtocolException e1){ 80 e1.printStackTrace(); 81 } catch (IOException e1) { 82 e1.printStackTrace(); 83 }finally { 84 if (con != null){ 85 //コネクションを切断 86 con.disconnect(); 87 } 88 } 89 return result.toString(); 90 } 91}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ZipInputStream#readは現在のエントリーのストリームを読み取るので、これを使うと通常のファイル操作と同じです。

ANDROIDでZIPファイルの圧縮・展開をする

投稿2017/06/20 01:39

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問