質問編集履歴

9

画像の削除

2020/08/20 14:13

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -255,5 +255,3 @@
255
255
  }
256
256
 
257
257
  ```
258
-
259
- ![イメージ説明](d82070c3b74358d552775ecd16e717ef.png)

8

エラーの画像の更新

2020/08/20 14:13

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -256,4 +256,4 @@
256
256
 
257
257
  ```
258
258
 
259
- ![イメージ説明](3517e94e6c5f3b257652d259027e572c.png)
259
+ ![イメージ説明](d82070c3b74358d552775ecd16e717ef.png)

7

説明の変更

2020/08/20 09:18

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,16 @@
1
- urlからzipファイル取得して、(内部ディレクトリにtext型にして保存したいで。)
1
+ ①zipファイルのurlからzipをダウンロード
2
-
3
- ( )の部分は完了しています。
2
+
4
-
5
-
6
-
7
- htmlからどようzipを取得するのかがわかりません
3
+ ②それを解析してtextにしてパッケージ下のローカル保存する。
8
-
4
+
5
+
6
+
9
- macを使用しています。
7
+ ②はすでにできています。
10
-
8
+
11
- また取得した後は下記コードでzip解析し、text型に変更し、package下内部ストレジに保存するようにします。
9
+ ①ができずに2つつなぎ合わせみたものエラが出てます。
12
-
10
+
11
+
12
+
13
- htmlからzipを取得する方法や、私のコードに間違えがある場合はアドバイスをいただきたいです。
13
+ アドバイスをいただきたいです。
14
14
 
15
15
  どうぞよろしくお願いします。
16
16
 

6

余計なコメントを削除

2020/08/20 09:00

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -60,16 +60,6 @@
60
60
 
61
61
 
62
62
 
63
- //使用しているサイト
64
-
65
- //https://itsakura.com/java-unzip
66
-
67
- //https://teratail.com/questions/284586#reply-404486
68
-
69
- //https://techbooster.org/android/application/1629/ 書き込み、読み込み設定
70
-
71
- //https://teratail.com/questions/284586 テラテイルでコードを教えてもらった
72
-
73
63
 
74
64
 
75
65
  public class MainActivity extends AppCompatActivity {

5

エラーの内容を提示

2020/08/20 08:23

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -264,6 +264,6 @@
264
264
 
265
265
  }
266
266
 
267
-
268
-
269
267
  ```
268
+
269
+ ![イメージ説明](3517e94e6c5f3b257652d259027e572c.png)

4

コードを変更しました。

2020/08/20 08:19

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,65 @@
18
18
 
19
19
  ```java
20
20
 
21
+
22
+
23
+ import androidx.annotation.RequiresApi;
24
+
25
+ import androidx.appcompat.app.AppCompatActivity;
26
+
27
+ import java.io.BufferedOutputStream;
28
+
29
+ import java.io.File;
30
+
31
+ import java.io.FileOutputStream;
32
+
33
+ import java.io.IOException;
34
+
35
+ import java.io.InputStream;
36
+
37
+ import java.net.MalformedURLException;
38
+
39
+ import java.net.URL;
40
+
41
+ import java.net.URLConnection;
42
+
43
+ import java.nio.charset.Charset;
44
+
45
+ import java.util.zip.ZipInputStream;
46
+
47
+ import java.util.zip.ZipEntry;
48
+
49
+ import android.os.Build;
50
+
51
+ import android.os.Bundle;
52
+
53
+ import android.view.Gravity;
54
+
55
+ import android.view.View;
56
+
57
+ import android.widget.Button;
58
+
59
+ import android.widget.Toast;
60
+
61
+
62
+
63
+ //使用しているサイト
64
+
65
+ //https://itsakura.com/java-unzip
66
+
67
+ //https://teratail.com/questions/284586#reply-404486
68
+
69
+ //https://techbooster.org/android/application/1629/ 書き込み、読み込み設定
70
+
71
+ //https://teratail.com/questions/284586 テラテイルでコードを教えてもらった
72
+
73
+
74
+
75
+ public class MainActivity extends AppCompatActivity {
76
+
77
+
78
+
21
- @Override
79
+ @Override
22
80
 
23
81
  protected void onCreate(Bundle savedInstanceState) {
24
82
 
@@ -28,23 +86,33 @@
28
86
 
29
87
 
30
88
 
89
+
90
+
91
+ // Activity上に配置したButtonを押すと実行するようにしてみた
92
+
31
93
  Button button = findViewById(R.id.button);
32
94
 
33
95
  button.setOnClickListener(new View.OnClickListener() {
34
96
 
35
97
 
36
98
 
99
+ //internetから直で、textにする
100
+
37
101
  @RequiresApi(api = Build.VERSION_CODES.N)
38
102
 
39
103
  @Override
40
104
 
41
105
  public void onClick(View view) {
42
106
 
107
+ // 文字コード
108
+
43
109
  Charset charset = Charset.forName("MS932");
44
110
 
45
- File path = getExternalFilesDir(null);
111
+ File path = getExternalFilesDir(null); // ☆☆☆追加☆☆☆
46
-
112
+
113
+
114
+
47
- String url1 = "http://www.nomadworks.co.jp/htmlsample/download.html";
115
+ String url1 = "http://corpus.byu.edu/wikitext-samples/text.zip";
48
116
 
49
117
  URL url = null;
50
118
 
@@ -104,16 +172,36 @@
104
172
 
105
173
  try (
106
174
 
107
-
175
+ //zipのurlから取得する方法
108
176
 
109
177
  ZipInputStream zis = new ZipInputStream(a);
110
178
 
179
+
180
+
181
+ //Assetsファイルから取得する方法
182
+
183
+ //InputStream is = getResources().getAssets().open("Archive.zip");
184
+
185
+
186
+
187
+ //内部ストレージから取得する方法
188
+
189
+ //InputStream is=new FileInputStream(path + "/" + "Archive.zip");
190
+
191
+ //BufferedInputStream bis = new BufferedInputStream(is);
192
+
193
+ //ZipInputStream zis = new ZipInputStream(bis, charset);
194
+
111
195
  ) {
112
196
 
113
197
 
114
198
 
115
199
  ZipEntry zipentry;
116
200
 
201
+ // zipの中のファイルがあるだけ繰り返す
202
+
203
+ // 展開後のファイルサイズ、ファイル名に注意
204
+
117
205
  int j=0;
118
206
 
119
207
  while ((zipentry = zis.getNextEntry()) != null) {
@@ -130,11 +218,21 @@
130
218
 
131
219
  int count = 0;
132
220
 
221
+ int i=0;
222
+
133
223
  while ((count = zis.read(data)) != -1) {
134
224
 
135
- bos.write(data, 0, count);
225
+ bos.write(data, 0, count);
226
+
136
-
227
+ toastMake(j+"-"+i+"("+zipentry.getName()+"):"+count, 0, -200);
228
+
229
+ i++;
230
+
137
- }
231
+ }
232
+
233
+ j++;
234
+
235
+ i=0;
138
236
 
139
237
  }
140
238
 
@@ -152,6 +250,20 @@
152
250
 
153
251
  }
154
252
 
253
+
254
+
255
+ private void toastMake(String message, int x, int y){
256
+
257
+ Toast toast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
258
+
259
+ // 位置調整
260
+
261
+ toast.setGravity(Gravity.CENTER, x, y);
262
+
263
+ toast.show();
264
+
265
+ }
266
+
267
+
268
+
155
269
  ```
156
-
157
- ```

3

より詳細を追加

2020/08/20 08:17

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
- urlからzipファイルを内部ディレクトリに保存したいです。
1
+ urlからzipファイルを取得して、(内部ディレクトリにtext型にして保存したいです。)
2
+
3
+ ( )の部分は完了しています。
2
4
 
3
5
 
4
6
 
@@ -6,9 +8,11 @@
6
8
 
7
9
  macを使用しています。
8
10
 
9
- また、取得した後は下記のコードでzipを解析し、text型に変更して、package下の内部ストレージに保存したいと考えています。
11
+ また、取得した後は下記のコードでzipを解析し、text型に変更して、package下の内部ストレージに保存するようにしています。
10
12
 
13
+ htmlからzipを取得する方法や、私のコードに間違えがある場合はアドバイスをいただきたいです。
14
+
11
- 何かアドバイスをただけないでょうか?
15
+ どうぞよろしくお願いします。
12
16
 
13
17
 
14
18
 

2

コードの変更

2020/08/20 06:22

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,12 @@
1
1
  urlからzipファイルを内部ディレクトリに保存したいです。
2
2
 
3
+
4
+
5
+ htmlからどのようにzipを取得するのかがわかりません。
6
+
7
+ macを使用しています。
8
+
3
- ZipEntry生成てからどのように変して、内部ローカルディクトリーに保存すればいいでしょうか?
9
+ また、取得した後は下記のコードでzipを解析、text型に変して、package下の内部ストレーに保存したと考えてます。
4
10
 
5
11
  何かアドバイスをいただけないでしょうか?
6
12
 
@@ -8,48 +14,140 @@
8
14
 
9
15
  ```java
10
16
 
17
+ @Override
11
18
 
19
+ protected void onCreate(Bundle savedInstanceState) {
12
20
 
13
- public void timer() throws IOException {
21
+ super.onCreate(savedInstanceState);
22
+
23
+ setContentView(R.layout.activity_main);
14
24
 
15
25
 
16
26
 
27
+ Button button = findViewById(R.id.button);
28
+
17
- String url1 = "http://corpus.byu.edu/wikitext-samples/text.zip";
29
+ button.setOnClickListener(new View.OnClickListener() {
18
30
 
19
31
 
20
32
 
33
+ @RequiresApi(api = Build.VERSION_CODES.N)
21
34
 
35
+ @Override
22
36
 
23
- URL url = new URL(url1);
37
+ public void onClick(View view) {
24
38
 
25
- URLConnection connection = url.openConnection();
39
+ Charset charset = Charset.forName("MS932");
26
40
 
27
- String redirect = connection.getHeaderField("Location");
41
+ File path = getExternalFilesDir(null);
28
42
 
29
- if (redirect != null) {
43
+ String url1 = "http://www.nomadworks.co.jp/htmlsample/download.html";
30
44
 
31
- connection = new URL(redirect).openConnection();
45
+ URL url = null;
32
46
 
47
+ try {
48
+
49
+ url = new URL(url1);
50
+
51
+ } catch (MalformedURLException e) {
52
+
53
+ e.printStackTrace();
54
+
33
- }
55
+ }
56
+
57
+ URLConnection connection = null;
58
+
59
+ try {
60
+
61
+ connection = url.openConnection();
62
+
63
+ } catch (IOException e) {
64
+
65
+ e.printStackTrace();
66
+
67
+ }
68
+
69
+ String redirect = connection.getHeaderField("Location");
34
70
 
35
71
 
36
72
 
37
- InputStream a = connection.getInputStream();
73
+ if (redirect != null) {
38
74
 
75
+ try {
76
+
77
+ connection = new URL(redirect).openConnection();
78
+
79
+ } catch (IOException e) {
80
+
39
- System.out.println(a);
81
+ e.printStackTrace();
82
+
83
+ }
84
+
85
+ }
86
+
87
+ InputStream a = null;
88
+
89
+ try {
90
+
91
+ a = connection.getInputStream();
92
+
93
+ } catch (IOException e) {
94
+
95
+ e.printStackTrace();
96
+
97
+ }
40
98
 
41
99
 
42
100
 
43
- ZipInputStream in = new ZipInputStream(a);
44
-
45
- System.out.println(in);
101
+ try (
46
102
 
47
103
 
48
104
 
49
- ZipEntry zE = in.getNextEntry();
105
+ ZipInputStream zis = new ZipInputStream(a);
50
106
 
107
+ ) {
108
+
109
+
110
+
111
+ ZipEntry zipentry;
112
+
113
+ int j=0;
114
+
115
+ while ((zipentry = zis.getNextEntry()) != null) {
116
+
117
+
118
+
119
+ try (FileOutputStream fos = new FileOutputStream(path + "/" + zipentry.getName()); // 出力 https://techbooster.org/android/application/1629/  
120
+
121
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
122
+
123
+ ) {
124
+
125
+ byte[] data = new byte[1024]; // 1KB 調整可
126
+
127
+ int count = 0;
128
+
129
+ while ((count = zis.read(data)) != -1) {
130
+
51
- System.out.println(zE);
131
+ bos.write(data, 0, count);
132
+
133
+ }
134
+
135
+ }
136
+
137
+ }
138
+
139
+ } catch (IOException e) {
140
+
141
+ e.printStackTrace();
142
+
143
+ }
144
+
145
+ }
146
+
147
+ });
52
148
 
53
149
  }
54
150
 
55
151
  ```
152
+
153
+ ```

1

コードの変更

2020/08/20 06:17

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,6 @@
1
1
  urlからzipファイルを内部ディレクトリに保存したいです。
2
2
 
3
- httpで接続してアクセスするのだと思ったのですが、その後どのようにすれば
3
+ ZipEntryを生成してからどのように変換して、内部ローカルディレクトリーに保存すればいいでしょう
4
-
5
- わかりません。
6
-
7
- zipファイルなので、InputStreamとOutputStreamは使えませんでした。
8
4
 
9
5
  何かアドバイスをいただけないでしょうか?
10
6
 
@@ -12,54 +8,48 @@
12
8
 
13
9
  ```java
14
10
 
15
- public AsyncHttpRequest(Activity activity) {
16
11
 
17
- this.mainActivity = activity;
18
12
 
19
- }
13
+ public void timer() throws IOException {
20
14
 
21
15
 
22
16
 
23
- @Override
24
-
25
- protected String doInBackground(URL... urls) {
17
+ String url1 = "http://corpus.byu.edu/wikitext-samples/text.zip";
26
-
27
- final URL url = urls[0];
28
18
 
29
19
 
30
20
 
31
21
 
32
22
 
33
- HttpURLConnection con = null;
23
+ URL url = new URL(url1);
34
24
 
25
+ URLConnection connection = url.openConnection();
26
+
35
- String f_answer = "";
27
+ String redirect = connection.getHeaderField("Location");
28
+
29
+ if (redirect != null) {
30
+
31
+ connection = new URL(redirect).openConnection();
32
+
33
+ }
36
34
 
37
35
 
38
36
 
39
- try {
37
+ InputStream a = connection.getInputStream();
40
38
 
41
- //httpコネクトの設定
42
-
43
- con = (HttpURLConnection) url.openConnection();
44
-
45
- con.setRequestMethod("GET");
46
-
47
- con.setInstanceFollowRedirects(false);
48
-
49
- con.connect();
39
+ System.out.println(a);
50
40
 
51
41
 
52
42
 
53
- final int statusCode = con.getResponseCode();
43
+ ZipInputStream in = new ZipInputStream(a);
54
44
 
55
- if (statusCode != HttpURLConnection.HTTP_OK) {
56
-
57
- System.err.println("正常に接続できていません。statusCode:" + statusCode);
58
-
59
- return null;
45
+ System.out.println(in);
60
-
61
- }
62
46
 
63
47
 
64
48
 
49
+ ZipEntry zE = in.getNextEntry();
50
+
51
+ System.out.println(zE);
52
+
53
+ }
54
+
65
55
  ```