Android 在SD卡或内存上创建目录的行为

Android 在SD卡或内存上创建目录的行为,android,android-sdcard,Android,Android Sdcard,在我的应用程序中,我必须让用户选择保存文件的位置。它必须从sd卡或内存中选择 我尝试制作一些如下的测试目录: 用于Sd卡 File sdCard = Environment.getExternalStorageDirectory(); File dir = new File (sdCard.getAbsolutePath() + "/External dir"); dir.mkdirs(); 内部 File path2 = Environment.getDataDirectory(

在我的应用程序中,我必须让用户选择保存文件的位置。它必须从sd卡或内存中选择

我尝试制作一些如下的测试目录:

用于Sd卡

  File sdCard = Environment.getExternalStorageDirectory();
  File dir = new File (sdCard.getAbsolutePath() + "/External dir");
  dir.mkdirs();
内部

File path2 = Environment.getDataDirectory();
File dir22 = new File (path2.getAbsolutePath() + "/Internal dir");
dir22.mkdirs();
只生成“外部目录”。“内部目录”不存在。此外,我已经在我的手机上安装了“OI文件管理器”,而且我无法对内部存储进行任何dir 我的手机根本没有Sd卡。上面的代码没有给我任何关于没有sd卡的错误。 我还尝试:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
double sdAvailSize = (double)stat.getAvailableBlocks()*(double)stat.getBlockSize();
double mb= sdAvailSize / (1024*1024);

Log.w("sd-card",""+mb);    //show me that i have 1240 mb on sd-card


为什么会这样?

请仔细阅读本文,首先了解各种存储之间的区别:我已经编辑了您的标题。看到共识在哪里了吗?不,他们不应该。
File path = Environment.getDataDirectory();
StatFs stats = new StatFs(path.getPath());
int availableBlocks = stats.getAvailableBlocks();
int blockSizeInBytes = stats.getBlockSize();
int freeSpaceInBytes = availableBlocks * blockSizeInBytes;
double mb2= (availableBlocks*blockSizeInBytes)/(1024*1024);

Log.w("telephone",""+mb2);   ///shows me 283 mb on phone