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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

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

Android Studio

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

Q&A

解決済

2回答

20692閲覧

[android] sdcardに保存したファイルを読み込みたい

keyoris

総合スコア9

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/01/08 14:06

パソコンからandroidのsdcardへ保存したCSVファイルをアプリで読み込みたいのですが,以下のようなエラーが出てしまいます.

[android studio:Logcatでのエラー] W/System.err: java.io.FileNotFoundException: /storage/emulated/0/data.csv: open failed: EACCES (Permission denied)

私がやりたいことは,
(1)CSVファイルを読み込む
(2)読み込んだファイルからテキストをLogcatで表示させる

初歩的なミスかもしれないのですが,どなたか回答をお願いします.

実行したコードが以下の通りです.

java

1import android.content.Context; 2import android.os.Bundle; 3import android.os.Environment; 4import android.support.wearable.activity.WearableActivity; 5import android.support.wearable.view.BoxInsetLayout; 6import android.widget.TextView; 7 8import java.io.BufferedReader; 9import java.io.File; 10import java.io.FileInputStream; 11import java.io.IOException; 12import java.io.InputStreamReader; 13 14public class MainActivity extends WearableActivity { 15 16 private BoxInsetLayout mContainerView; 17 private TextView mTextView; 18 private TextView mClockView; 19 private Context context; 20 21 private String name = Environment.getExternalStorageDirectory().getPath(); 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 setAmbientEnabled(); 28 29 mContainerView = (BoxInsetLayout) findViewById(R.id.container); 30 mTextView = (TextView) findViewById(R.id.text); 31 mClockView = (TextView) findViewById(R.id.clock); 32 33 34 TextView text = (TextView)findViewById(R.id.textview_id); 35 FileInputStream file = null; 36 BufferedReader in = null; 37 try { 38 file = new FileInputStream(new File(name + "/data.csv")); 39 <<<<↓ここでエラーが起きる↓>>>> 40 in = new BufferedReader(new InputStreamReader(file, "UTF-8")); 41 System.out.println(String.valueOf(in)); 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 } 46}
[androidmanifest.xml] <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hoge"> <uses-feature android:name="android.hardware.type.watch" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@android:style/Theme.DeviceDefault"> <uses-library android:name="com.google.android.wearable" android:required="false" /> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.DeviceDefault.Light"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

guest

回答2

1

ベストアンサー

パーミッションがないと言われているようです。
android6.0からRuntime Permissionというのが導入されてマニフェストxmlで使用する権限の宣言をしていても、ユーザーの許可がなければ権限が必要な処理(ストレージの読み書き等)が出来なくなっています。
もし、デバックしている端末がandroid6.0以上なら設定アプリの中にあるアプリと言う項目をクリック→アプリ一覧が出て来るので開発しているアプリを選択→許可をクリック→ストレージのチェックをONにすれば動くかと思います。

投稿2017/01/08 15:36

退会済みユーザー

退会済みユーザー

総合スコア0

keyoris👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

/storage/emulated/0/data.csv: open failed: EACCES (Permission denied)

WRITE_EXTERNAL_STORAGEはいわゆるdangerous permissionなので
ユーザーに確認を取るためのステップが必要です。
説明がちょっと面倒なのでこちらを見てください
https://akira-watson.com/android/external-storage-file.html
https://akira-watson.com/android/runtime-permission.html

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

WRITE_EXTERNAL_STORAGEを設定すればReadは同じグループなので必要ありませんが
あってもエラーにはなりません

投稿2017/01/08 15:57

aja

総合スコア3715

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.69%

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

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

質問する

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

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

Android Studio

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