①zipファイルのurlから、zipをダウンロードする
②それを解析してtextにしてパッケージの下のローカルに保存する。
②はすでにできています。
①ができずに、その2つをつなぎ合わせてみたもののエラーが出てます。
アドバイスをいただきたいです。
どうぞよろしくお願いします。
java
1 2import androidx.annotation.RequiresApi; 3import androidx.appcompat.app.AppCompatActivity; 4import java.io.BufferedOutputStream; 5import java.io.File; 6import java.io.FileOutputStream; 7import java.io.IOException; 8import java.io.InputStream; 9import java.net.MalformedURLException; 10import java.net.URL; 11import java.net.URLConnection; 12import java.nio.charset.Charset; 13import java.util.zip.ZipInputStream; 14import java.util.zip.ZipEntry; 15import android.os.Build; 16import android.os.Bundle; 17import android.view.Gravity; 18import android.view.View; 19import android.widget.Button; 20import android.widget.Toast; 21 22 23public class MainActivity extends AppCompatActivity { 24 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.activity_main); 29 30 31 // Activity上に配置したButtonを押すと実行するようにしてみた 32 Button button = findViewById(R.id.button); 33 button.setOnClickListener(new View.OnClickListener() { 34 35 //internetから直で、textにする 36 @RequiresApi(api = Build.VERSION_CODES.N) 37 @Override 38 public void onClick(View view) { 39 // 文字コード 40 Charset charset = Charset.forName("MS932"); 41 File path = getExternalFilesDir(null); // ☆☆☆追加☆☆☆ 42 43 String url1 = "http://corpus.byu.edu/wikitext-samples/text.zip"; 44 URL url = null; 45 try { 46 url = new URL(url1); 47 } catch (MalformedURLException e) { 48 e.printStackTrace(); 49 } 50 URLConnection connection = null; 51 try { 52 connection = url.openConnection(); 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 String redirect = connection.getHeaderField("Location"); 57 58 if (redirect != null) { 59 try { 60 connection = new URL(redirect).openConnection(); 61 } catch (IOException e) { 62 e.printStackTrace(); 63 } 64 } 65 InputStream a = null; 66 try { 67 a = connection.getInputStream(); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 } 71 72 try ( 73 //zipのurlから取得する方法 74 ZipInputStream zis = new ZipInputStream(a); 75 76 //Assetsファイルから取得する方法 77 //InputStream is = getResources().getAssets().open("Archive.zip"); 78 79 //内部ストレージから取得する方法 80 //InputStream is=new FileInputStream(path + "/" + "Archive.zip"); 81 //BufferedInputStream bis = new BufferedInputStream(is); 82 //ZipInputStream zis = new ZipInputStream(bis, charset); 83 ) { 84 85 ZipEntry zipentry; 86 // zipの中のファイルがあるだけ繰り返す 87 // 展開後のファイルサイズ、ファイル名に注意 88 int j=0; 89 while ((zipentry = zis.getNextEntry()) != null) { 90 91 try (FileOutputStream fos = new FileOutputStream(path + "/" + zipentry.getName()); // 出力 https://techbooster.org/android/application/1629/ 92 BufferedOutputStream bos = new BufferedOutputStream(fos); 93 ) { 94 byte[] data = new byte[1024]; // 1KB 調整可 95 int count = 0; 96 int i=0; 97 while ((count = zis.read(data)) != -1) { 98 bos.write(data, 0, count); 99 toastMake(j+"-"+i+"("+zipentry.getName()+"):"+count, 0, -200); 100 i++; 101 } 102 j++; 103 i=0; 104 } 105 } 106 } catch (IOException e) { 107 e.printStackTrace(); 108 } 109 } 110 }); 111 } 112 113 private void toastMake(String message, int x, int y){ 114 Toast toast = Toast.makeText(this, message, Toast.LENGTH_SHORT); 115 // 位置調整 116 toast.setGravity(Gravity.CENTER, x, y); 117 toast.show(); 118 }
回答1件
あなたの回答
tips
プレビュー