我有一个需要访问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]);
}
}
}
此代码将打印目录中的每个文件。它适用于root
,mnt
&amp; cus
,但在尝试获取f
&amp;列表时崩溃mnt2
,将null
数组返回s
。如何访问内部文件存储?
我也尝试使用Environment
的功能,但大多数都失败了,我甚至拥有启用外部存储的读/写权限。
编译为7.0。 定位API 23。 Min sdk API 18。
答案 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