###(1)実際に存在するzipのurlを設定してもFileNotFoundExceptionが出る
- 他のzipのurlを指定した場合は、しっかりzipにアクセスし、textに変換し内部ストレージに保存するところまでできている
###(2)Androidのgoogleで、有料サイトのzipファイルのURLにアクセスしようとすると、このように情報の入力を求められる
-
一度ログインすればもう一度求められることはなくなります。
-
すでにログインした状態で私のAndroidStudioのアプリを実行しても下記のようにFileNotFoundExceptionが出ます。
(3)やりたいこと
毎朝9時にURLを呼び出す(できています)- zipのURLを指定して、InputStreamとZipInputStreamをする(FileNotFoundExceptionが出る)
- ~~zipを内部ストレージにテキストとして保存する
~~(もうできています)
###(4)追加の別の問題点
- zipのURLをgoogleで検索したときに、ログイン情報を一度入力すればzipをAndroidに保存できるが、保存されたものが文字化けされている
###考えられる原因1
- Windowsで作られたzipの中身のtextはANSIで書かれている?
###考えられる原因2
- windowsで作られたzipをAndroidで解凍することはMac同様できない?
###解決しなかった場合にやること
- WindowsPCでzipを解凍してWindowsPCで作ったAndroidStudioのプロジェクトのAssetsに保存する
- それを実行してtextをfirebaseに保存するようにする(今回はfirebaseを使ったプロジェクトを考えています)
###コード
java
1@Override 2 protected Void doInBackground(URL... urls) { 3 final URL url = urls[0]; 4 5 6 // 文字コード 7 Charset charset = Charset.forName("MS932"); 8 File path = this.mainActivity.getExternalFilesDir(null); // 9 10 URLConnection connection = null; 11 12 try { 13 connection = url.openConnection(); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 18 19 String redirect = connection.getHeaderField("Location"); 20 21 if (redirect != null) { 22 try { 23 connection = new URL(redirect).openConnection(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 29 30 InputStream a = null; 31 try { 32 a = connection.getInputStream(); //←ここでエラー(java.io.FileNotFoundException: http://www.xxxx.com/member/datazip/Paci/2020/PACI200822.zip) 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 37 //zipのurlから取得する方法 38 ZipInputStream zis = new ZipInputStream(a); 39 40 41 ZipEntry zipentry = null; 42 // zipの中のファイルがあるだけ繰り返す 43 // 展開後のファイルサイズ、ファイル名に注意 44 int j = 0; 45 while (true) { 46 try { 47 if (!((zipentry = zis.getNextEntry()) != null)) break; 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } 51 52 try (FileOutputStream fos = new FileOutputStream(path + "/" + zipentry.getName()); // 出力 https://techbooster.org/android/application/1629/ 53 BufferedOutputStream bos = new BufferedOutputStream(fos); 54 ) { 55 byte[] data = new byte[1024]; // 1KB 調整可 56 int count = 0; 57 int i = 0; 58 while ((count = zis.read(data)) != -1) { 59 bos.write(data, 0, count); 60 //toastMake(j + "-" + i + "(" + zipentry.getName() + "):" + count, 0, -200); 61 62 i++; 63 } 64 j++; 65 i = 0; 66 } catch (FileNotFoundException e) { 67 e.printStackTrace(); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 } 71 } 72 return null; 73 } 74
###エラー
java
1W/System.err: java.io.FileNotFoundException: http://www.xxxx.com/member/datazip/Paci/2020/PACI200822.zip 2W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) 3 at com.example.pdf.AsyncHttpRequest.doInBackground(AsyncHttpRequest.java:63) 4 at com.example.pdf.AsyncHttpRequest.doInBackground(AsyncHttpRequest.java:19) 5 at android.os.AsyncTask$3.call(AsyncTask.java:378) 6 at java.util.concurrent.FutureTask.run(FutureTask.java:266) 7 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) 8 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 9 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 10 at java.lang.Thread.run(Thread.java:919)
あなたの回答
tips
プレビュー