在" / sdcard /"中列出文件返回null?

时间:2017-02-28 22:03:49

标签: android file internal-storage

我有一个需要访问Android手机内部存储空间的应用,例如“下载”文件夹。但是,当我尝试列出文件时,它会导致

java.io.File;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        File root = new File("/"); // Works
        File mnt = new File("/mnt/"); // Works
        File mnt2 = new File("/mnt/m_internal_storage"); // Crashes
        File cus = new File("/custom/"); // Works
        File f = new File("/sdcard/"); // Crashes
        String[] s =  f.list();
        for (int x = 0; x < s.length; x++) {
            Log.println(Log.ASSERT, "#", s[x]);
        }
    }
}

此代码将打印目录中的每个文件。它适用于rootmnt&amp; cus,但在尝试获取f&amp;列表时崩溃mnt2,将null数组返回s。如何访问内部文件存储?

我也尝试使用Environment的功能,但大多数都失败了,我甚至拥有启用外部存储的读/写权限。

编译为7.0。 定位API 23。 Min sdk API 18。

3 个答案:

答案 0 :(得分:3)

  

我有一个需要访问Android手机内部存储空间的应用,例如“下载”文件夹。

用户看到的Download文件夹位于Android SDK调用的external storage内。

  

如何访问内部文件存储?

使用Environment.getExternalStorageDirectory()永远不要硬编码路径。例如,地球表面上很少有设备/mnt/m_internal_storage/custom//sdacard/

  

我也尝试使用环境功能,大多数都失败了,我甚至拥有启用外部存储的读/写权限。

也许您没有实施runtime permissions

答案 1 :(得分:1)

在你的代码中它是&#34;文件f =新文件(&#34; / sdacard /&#34;); //崩溃&#34;,应该是&#34; / sdcard /&#34;。

答案 2 :(得分:1)

如果您想要应用的内部文件,请参阅app.package

/sdcard/data/data/pack_name/files/fileName

你需要像这样访问它

File p = getApplicationContext().getFileStreamPath("FileName");

编辑 除此之外,你必须要求运行时权限 和下载路径不是内部存储!它定义为外部。 普通用户可以在文件管理器中访问(没有root)的所有内容都是外部存储。内部存储不像内部SD卡,然后是micro sdcard。内部存储属于你的包 阅读: https://developer.android.com/guide/topics/permissions/requesting.html