0

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

有关更多背景信息:

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

我已经:

  • 检查以确保 SD 卡已安装、可读和可写
  • 启用权限WRITE_EXTERNAL_STORAGE
  • 尝试File.mkdir()对层次结构中的每个文件使用直到文件夹位置
  • 尝试使用/, \\, File.separatorChar, 和File.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”。

4

1 回答 1

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() );
于 2012-08-30T12:56:25.517 回答