teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

本文一部修正

2020/08/14 15:30

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -1,4 +1,4 @@
1
- 先にコメントを書きましたが、assetsフォルダーを出力先とすることはできません。その代わりに、openFileOutput()を用いてアプリケーション用の領域にファイルを書き出す方法に変更するように修正してみました。このメソッドを用いると、`/data/data/<パッケージ名>/files/`の下にファイルが書き出されます。
1
+ 先にコメントを書きましたが、assetsフォルダーを出力先とすることはできません。その代わりに、~~openFileOutput()を用いてアプリケーション用の領域に~~getExternalFilesDir()を用いて内部ストレージのパッケージ専用ォルダーにファイルを書き出す方法に変更するように修正してみました。このメソッドを用いると、~~`/data/data/<パッケージ名>/files/`~~`<内部ストレージ>/Android/<パッケージ名>/files/`の下にファイルが書き出されます。
2
2
 
3
3
 
4
4
  ```java

1

コード修正

2020/08/14 15:29

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -16,12 +16,14 @@
16
16
  BufferedInputStream bis = new BufferedInputStream(is);
17
17
  ZipInputStream zis = new ZipInputStream(bis, charset);
18
18
  ) {
19
+ File path = getExternalFilesDir(null); // ☆☆☆追加☆☆☆
20
+
19
21
  ZipEntry zipentry;
20
22
  // zipの中のファイルがあるだけ繰り返す
21
23
  // 展開後のファイルサイズ、ファイル名に注意
22
24
  while ((zipentry = zis.getNextEntry()) != null) {
23
- try (OutputStream os = openFileOutput(zipentry.getName(), MODE_PRIVATE); // 出力先
25
+ try (FileOutputStream fos = new FileOutputStream(path + "/" + zipentry.getName()); // ☆☆☆修正☆☆☆
24
- BufferedOutputStream bos = new BufferedOutputStream(os);
26
+ BufferedOutputStream bos = new BufferedOutputStream(fos); // os→fosに修正
25
27
  ) {
26
28
  byte[] data = new byte[1024]; // 1KB 調整可
27
29
  int count = 0;