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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

0回答

1447閲覧

zipのurlをInputStreamしようとするとFileNotFoundExceptionが出る

alizona

総合スコア126

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2020/08/22 00:23

###(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)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問