从对File.mkdirs()的调用中删除斜杠

时间:2012-08-30 02:03:58

标签: android android-sdcard

正如标题所示,我正在尝试在Android上创建一个文件夹,但所有斜杠都已从中删除。

有关更多背景信息:

具体来说,我正在尝试创建一个目录来存储我的应用程序的用户文件。用户必须可以从文件管理器(例如文件管理器HD)访问这些文件,因为该应用程序不支持完整文件管理。使用API​​级别8+的标准,我使用Environment.getExternalStoragePublicDirectory()引用可公开访问的文件夹的根目录。然后我尝试创建位于 DCIM>的文件夹。 Sketchbook> [草图的名称] 使用File.mkdirs()。有关更多信息,请参阅下面的代码。

我已经:

  • 检查以确保SD卡已安装,可读和可写
  • 启用了权限WRITE_EXTERNAL_STORAGE
  • 尝试将File.mkdir()用于层次结构中的每个文件,直至文件夹位置
  • 尝试使用/\\File.separatorCharFile.separator作为文件夹分隔符

代码:

boolean success = true;

//The public directory
File publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
//The location of the sketchbook
File sketchbookLoc = new File(publicDir + "Sketchbook" + File.separator);
//The location of the sketch
//getGlobalState().getSketchName() returns the name of the sketch: "sketch"
File sketchLoc = new File(sketchbookLoc + getGlobalState().getSketchName() + File.separator);

if(!sketchLoc.mkdirs()) success = false;

//Notify the user of whether or not the sketch has been saved properly
if(success)
    ((TextView) findViewById(R.id.message)).setText(getResources().getText(R.string.sketch_saved));
else
    ((TextView) findViewById(R.id.message)).setText(getResources().getText(R.string.sketch_save_failure));


通过上述测试的各种变化(实际工作的那些),我得到了一致的结果:我在DCIM中获得了一个新文件夹,其名称对应于应该是它的分层父项的所有文件夹的组合。换句话说,我已经创建了一个新目录,但是已经从中删除了所有文件夹分隔符。

现在,我问你:

  • 我是否尝试将用户数据保存在正确的位置?我还有另一种方法吗?
  • 甚至可以在DCIM文件夹中创建新文件夹吗? Android是否会阻止它?
  • 这个问题特定于我吗?是否有其他人能够在DCIM文件夹中创建文件夹?
  • 我使用的是正确的文件夹分隔符吗?
  • 还有其他我绝对,完全,完全失踪的东西吗?

既然我已经完成了打字,而且你已经读完了我的(过长)问题,我希望我能找到某种答案。如果您需要澄清或了解更多信息,请说明。

编辑:创建文件夹的一个示例是“DCIMSketchbooksketch”,它应该是“DCIM / Sketchbook / sketch”。

1 个答案:

答案 0 :(得分:1)

不要使用

File sketchbookLoc = new File(publicDir + "Sketchbook" + File.separator);

File sketchbookLoc = new File(publicDir , "Sketchbook");

因为publicDir.toString()将以文件分隔符结束(即使您以这种方式声明)。 toString()给出了文件的规范名称。


所以你的来源变成了:

//The location of the sketchbook
File sketchbookLoc = new File(publicDir , "Sketchbook" );
//The location of the sketch
File sketchLoc = new File(sketchbookLoc , getGlobalState().getSketchName() );