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

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

ただいまの
回答率

89.97%

Androidの自作アプリでテキストファイルを読むにはどうしたら良いのでしょうか。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,771

na-ka

score 10

前提・実現したいこと

アンドロイド開発の初心者で自作アプリに挑戦しています。
自作アプリから既存のテキストファイルを読みたいのですが、何処にファイルを置けば自作アプリから読めるのでしょうか。
アンドロイド入門サイトを調べて、アプリ内でのファイルへの書き込みと、その書き込んだファイルからの読みだしはできます。実機でもできましたが実機のファイルマネージャでそのファイルを検索しても見つかりません。
「一度実機を再起動させる」という記事もあったので試しましたが駄目です。
そもそも「Kikat以降はSDカードの書き込みはできない」という記事もあり、私が無理なことをしようとしているのでしょうか。
以下に私が試したものを記しますのでご教示頂きますようよろしくお願いします。

該当のソースコード

[AndroidManifesy.xml]
.....
</application>
<!--以下のパーミッションを追加しました-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

[MainDBActivity.java]
package com.android.nakajima.mydbapplication;

import 略

@SuppressWarnings("deprecation")
public class MainDBActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_db);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

File file = null;
String readPath = "";
TextView oText1 = (TextView) findViewById(R.id.text1);
TextView oText2 = (TextView) findViewById(R.id.text2);

file = Environment.getExternalStorageDirectory();
readPath += "SDカード : " + file.getPath() + "\n";
File dir = new File(file.getPath());
final File[] filelist = dir.listFiles();

oText1.setText(readPath);
String str1 = "ファイルへ書き込んだ文字です。";

//---------------------
//file write
String fn = "testtest1.txt";
String readText = "";
str1 = orgRead(fn);
readText = orgRead(fn);

if (readText == "") {
readText = "ファイルの読みだしデータはありませんでした。";
}else {
readText="ファイルからの読みだしデータは[ " + readText + ": ]です。";
}

oText2.setText(readText);
}

//--- ファイル書き込み ---
void orgWrite(String fn, String wt){
try{
FileOutputStream fout = openFileOutput(fn, MODE_WORLD_READABLE);
fout.write(wt.getBytes());
Log.e("OK","正常書き込みされました");
}catch(FileNotFoundException e){
Log.e("FNF","ファイルがありません");
}catch(IOException e){
Log.e("IOExp","OIエラーです");
}
}

//--- ファイル読み出し ---
String orgRead(String fn){
String str = "";
try{
FileInputStream in = openFileInput(fn);
BufferedReader reader = new BufferedReader( new InputStreamReader( in , "UTF-8") );
String tmp;
while( (tmp = reader.readLine()) != null ){
str = str + tmp + "--\n";
}
reader.close();
Log.e("strs", "読み取った値は= "+str);
}catch(FileNotFoundException e){
Log.e("FNF","エラー:読み込みファイルがありません");
str = "FNFエラー";
}catch( IOException e ) {
e.printStackTrace();
Log.e("strs", "エラー:読み取りエラーです");
str = "IOエラー";
}
return str;
}
}

試したこと

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

開発環境: AndroidStudio2.2.3
実機: Zenfone2Laser

前提・実現したいこと

Androidの自作アプリでテキストファイルを読むにはどうしたら良いのでしょうか。

アンドロイド開発の初心者で自作アプリに挑戦しています。
自作アプリから既存のテキストファイルを読みたいのですが、何処にファイルを置けば自作アプリから読めるのでしょうか。
アンドロイド入門サイトを調べて、アプリ内でのファイルへの書き込みと、その書き込んだファイルからの読みだしはできます。実機でもできましたが実機のファイルマネージャでそのファイルを検索しても見つかりません。
「一度実機を再起動させる」という記事もあったので試しましたが駄目です。
そもそも「Kikat以降はSDカードの書き込みはできない」という記事もあり、私が無理なことをしようとしているのでしょうか。
以下に私が試したものを記しますのでご教示頂きますようよろしくお願いします。

該当のソースコード

[AndroidManifesy.xml]
.....
</application>
<!--以下のパーミッションを追加しました-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

[MainDBActivity.java]
package com.android.nakajima.mydbapplication;

import 略

@SuppressWarnings("deprecation")
public class MainDBActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_db);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

File file = null;
String readPath = "";
TextView oText1 = (TextView) findViewById(R.id.text1);
TextView oText2 = (TextView) findViewById(R.id.text2);

file = Environment.getExternalStorageDirectory();
readPath += "SDカード : " + file.getPath() + "\n";
File dir = new File(file.getPath());
final File[] filelist = dir.listFiles();

oText1.setText(readPath);
String str1 = "ファイルへ書き込んだ文字です。";

//---------------------
//file write
String fn = "testtest1.txt";
String readText = "";
str1 = orgRead(fn);
readText = orgRead(fn);

if (readText == "") {
readText = "ファイルの読みだしデータはありませんでした。";
}else {
readText="ファイルからの読みだしデータは[ " + readText + ": ]です。";
}

oText2.setText(readText);
}

//--- ファイル書き込み ---
void orgWrite(String fn, String wt){
try{
FileOutputStream fout = openFileOutput(fn, MODE_WORLD_READABLE);
fout.write(wt.getBytes());
Log.e("OK","正常書き込みされました");
}catch(FileNotFoundException e){
Log.e("FNF","ファイルがありません");
}catch(IOException e){
Log.e("IOExp","OIエラーです");
}
}

//--- ファイル読み出し ---
String orgRead(String fn){
String str = "";
try{
FileInputStream in = openFileInput(fn);
BufferedReader reader = new BufferedReader( new InputStreamReader( in , "UTF-8") );
String tmp;
while( (tmp = reader.readLine()) != null ){
str = str + tmp + "--\n";
}
reader.close();
Log.e("strs", "読み取った値は= "+str);
}catch(FileNotFoundException e){
Log.e("FNF","エラー:読み込みファイルがありません");
str = "FNFエラー";
}catch( IOException e ) {
e.printStackTrace();
Log.e("strs", "エラー:読み取りエラーです");
str = "IOエラー";
}
return str;
}
}

試したこと

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

開発環境: AndroidStudio2.2.3
実機: Zenfone2Laser

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Androidではアプリ専用のディレクトリが作られます。
その中でも特定のフォルダはそのアプリしかアクセスできないようになっています。
そのため、ファイルマネージャー等の別アプリからはフォルダやファイルを見ることはできません。

また、コードはコード用の記述に修正してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/21 15:02

    yonaさん、
    説明が不十分ですみません。
    私がやりたいことは、パソコンで作ったテキストデータファイルをスマホの自作アプリで読んで処理したいということです。そのたみに、パソコンからはメールやSDカードを経由してスマホへは持っていけますが、そのファイルを何処へ置けばアプリから読めるのかが解らず困っています。
    宜しくお願いします。

    キャンセル

  • 2017/03/21 15:46

    それなら、アクションにIntent.ACTION_GET_CONTENTを設定した暗黙Intentでファイルを選択し、選択したファイルをアプリ内のフォルダにコピーするといいですね。

    キャンセル

  • 2017/03/21 16:09

    yonaさん、
    早速ありがとうございます。
    まだ仰っていることが十分に理解できておりませんが、ヒントを頂いたので自分で調べてみます。
    どうしてもわからない時は、新たな質問させて頂きます。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる