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

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

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

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

4回答

783閲覧

Gmailにファイルを添付で’FileNotFoundException’になる。

Jetfeel

総合スコア6

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

0クリップ

投稿2019/07/31 01:33

前提・実現したいこと

はじめて質問させていただきます、素人同然の初心者ですのでこの場で質問してよいのかも分からないのですが、よろしくお願いいたします。
CSVファイルを作成してGmailに添付したいのですが、’FileNotFoundException’となってしまいます。

以下のコードの実行結果はbtnSend2をタップすると画面に'FileNotFound'と表示されます。

参考にしたページ
https://qiita.com/ueno-yuhei/items/e9147b2b5930fc7c4975

該当のソースコード

android

1 2 ImageButton btnMail = findViewById(R.id.btnSend2); 3 btnMail.setOnClickListener(new View.OnClickListener() { 4 5 @Override 6 public void onClick(View v) { 7 8 String tmpCsvPath = Environment.getExternalStorageDirectory().getPath() + "/tmp.csv"; 9 try { 10 // csvファイル作成 11 12 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( 13 new FileOutputStream(tmpCsvPath, false), "Shift_JIS")); 14 bw.write("№," + den.getText().toString()); 15 bw.newLine(); 16 bw.write("日付," + da.getText().toString()); 17 bw.newLine(); 18 19 // 中 略 20 21 bw.flush(); 22 bw.close(); 23 24 Intent intent = new Intent(); 25 intent.setAction(Intent.ACTION_SEND); 26 intent.putExtra(Intent.EXTRA_SUBJECT, ""); 27 intent.putExtra(Intent.EXTRA_TEXT, ""); 28 // Gmailにファイルの添付 29 Uri attachments = Uri.parse("file://" + tmpCsvPath); 30 intent.putExtra(Intent.EXTRA_STREAM, attachments); 31 intent.setType("application/*"); 32 intent.setPackage("com.google.android.gm"); 33 try { 34 startActivity(intent); 35 } catch (android.content.ActivityNotFoundException ex) { 36 ex.printStackTrace(); 37 Toast.makeText(CountActivity.this.getApplicationContext(), "client not found", Toast.LENGTH_LONG).show(); 38 } 39 } catch (UnsupportedEncodingException e) { 40 e.printStackTrace(); 41 Toast.makeText(CountActivity.this, "UnsupportedEncoding", Toast.LENGTH_LONG).show(); 42 } catch (FileNotFoundException e) { 43 e.printStackTrace(); 44 Toast.makeText(CountActivity.this, "FileNotFound", Toast.LENGTH_LONG).show(); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 Toast.makeText(CountActivity.this, "IOException", Toast.LENGTH_LONG).show(); 48 } 49 } 50 });

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jimbe

2019/07/31 12:00

元記事の「追記」部分も行われましたでしょうか.
Jetfeel

2019/07/31 12:36 編集

念のためAndroidManifest.xmlにも追記の部分を書き入れています。 エラーの表示が/storage/emulated/0/tmp.csvとあるので、外部SDカードと関係があるのかは不明です。
guest

回答4

0

↓androidのバージョンによっては以下のように(面倒に)なっています.

Androidでストレージへのファイルの書き込みが出来ない(アクセス拒否)

投稿2019/07/31 12:53

jimbe

総合スコア12646

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

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

Jetfeel

2019/08/01 09:13

紹介されたページをもとに何が悪いのかが少しわかりました。 解決方法を見つける大きなきっかけとなりました。 ありがとうございます。
guest

0

・まず、どの行で例外が出ているのかを特定する
・例外の出ている行で開いているファイルが存在しているのか確認
・そしてその修正を行う

という手順でデバッグしていきましょう

投稿2019/07/31 02:34

y_waiwai

総合スコア87774

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

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

Jetfeel

2019/07/31 09:27

早速回答いただきありがとうございます。 例外が出ている行は BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream( tmpCsvPath, false), "Shift_JIS")); のようです。 4:RUNの内容に W/System.err: java.io.FileNotFoundException: /storage/emulated/0/tmp.csv (Permission denied) とあるのですが、このパスにtmp.csvというファイルを新規に作れないということなんでしょうか?
guest

0

自己解決

https://qiita.com/wakwak/items/90a71271a73131f82304
https://sankame.github.io/blog/2018-07-23-android_use_fileprovider/
https://qiita.com/Shiozawa/items/06ea0dd423c63c20c2f8
このページをもとにManifestとJavaを変更しました。

Android.Manifest.xmlに追加
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
</provider>

Activity.javaに追加
int permission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
そして
「file://」を「content://」に変更しました。
これで、とりあえず動作するようになりました。
しかし、添付ファイルを追加することに失敗しているのでこれから原因を究明します。

投稿2019/08/01 09:09

Jetfeel

総合スコア6

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

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

0

こちらのリンク

FileOutputStreamクラスに限らず、ファイル関連のクラスで存在しないパス/ファイル名を指定すると、FileNotFoundExceptionの例外が発生してしまいます。

と記載あります。多分存在しないファイルに書き込もうとして起きているエラーです。

投稿2019/08/01 03:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問