実際にファイルが存在してもFile#exists()がfalseを返します

1,249 views
Skip to first unread message

Tetsu

unread,
Nov 17, 2018, 11:49:07 PM11/17/18
to 日本Androidの会
こんにちは。
タイトル通りなのですが、実際にファイルが存在してもFile#exists()がfalseを返すという問題に悩んでます。

01.txt、02.txt、03.txt・・・という連番のファイルがあり、ファイルがいくつあるかは場合によりあらかじめ分かりません。
また、ファイルはもしかしたら03.txtの後、04.txtが無くて05.txt・・・と続くかもしれません。

現在やっていることは以下の通りです。
最初のファイルの場所をIntent.ACTION_OPEN_DOCUMENT+startActivityForResult()でURIとして取り出し、そのURIからファイルのパスの取得をしました。
取得できたパスは"/stroage/C459-1402/myfolder/01.txt"という形です。
01.txtの処理が終了したら"01.txt"の文字列を置換して"02.txt"にして"/stroage/C459-1402/myfolder/02.txt"のファイルの存在確認をして存在すれば開く、なければ今度は03.txtのファイルの存在確認・・・ということをしています。

問題になっているコードは抜粋ですが以下のような形です。

  String filePath = "/stroage/C459-1402/myfolder/02.txt";
  File txtFile = new File(filePath);
  if (txtFile.exists()) {
    //処理
  }

txtFile.exists()の部分でどうやってもfalseが帰ってくるので処理がなされません。

ファイルの権限については、manifestに以下の文を追加してプログラム内でもrequestPermissions()しています。
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


  if (Build.VERSION.SDK_INT >= 23) {
      String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};
      if (!hasPermissions(this, permissions)) {
          ActivityCompat.requestPermissions(this, PERMISSIONS, READ_STORAGE_PERMISSION_REQUEST_CODE);
      } else {
          //do here
      }
  } else {
      //do here
  }

  public boolean hasPermissions(Context context, String... permissions) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
              for (String permission : permissions) {
                  if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                      return false;
                  }
              }
          }
          return true;
      }

以上の方法でどうしても上手くいかないのですが、どうすればよいでしょうか?
どうかよろしくお願いします。

miyake osamu

unread,
Dec 19, 2018, 9:54:43 PM12/19/18
to android-g...@googlegroups.com
三宅です。

ファイルの権限ですが、Linux上のファイルの権限に対して正しく動作できる前提になっていますか?
アプリが違うと基本ファイルにアクセスできないと思っていた方がいいです。



########################################
WEBアプリケーション・スマートフォンアプリケーション
開発・コンサルティング

合同会社 ソニックスタジオ
http://sonicstudio.jp

〒101-0025
東京都千代田区神田佐久間町3-38 第5東ビル5F
代表/技師  三宅 理
Tel: 050-5858-9334

########################################
このメールには機密情報を含む場合があります。
誤ってこのメールを受信された場合は、速やかに破棄していただくようお願いします。



2018年11月18日(日) 13:49 Tetsu <poroporo...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このグループに投稿するには android-g...@googlegroups.com にメールを送信してください。
https://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
Reply all
Reply to author
Forward
0 new messages