因缺少/而没有创建文件夹?

时间:2013-12-31 12:15:32

标签: java android

SNIPPET 1

 public class MyLogs {
          private static File root;

          private static String rootPath;

          static {
            rootPath = Environment.getExternalStorageDirectory().toString() + "/MyFolder/Sub1/Sub2";
            root = new File(rootPath);
            root.mkdirs();
          }
        }

使用上面提到的代码我无法在SD卡上创建文件夹。 root.mkdirs()在这种情况下返回false,但是当我使用rootPath = Environment.getExternalStorageDirectory().toString() + "/MyFolder/Sub1/Sub2/";时(我在Sub2之后添加了'/'),它会创建文件夹。我搜索过它但没有得到答案。

SNIPPET 2

String root = Environment.getExternalStorageDirectory().toString();
File myImageFolder = new File(root + "/MyFolder");
myImageFolder.mkdirs();

在这种情况下,“MyFolder”应该充当文件,但它允许我在这种情况下创建文件夹。 请在此赐教我。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

好问题。我在这里的初步答案是不正确的,即使它收到了5个赞成票。在Android libcore源中错误的线索后花了一些时间后重写了答案。

您的代码正确且尾部斜杠不重要。 File构造函数无论如何都会删除任何尾部斜杠。 (请参阅sourcesfixSlashes()调用的init()。)

可以解释为什么没有创建目录的原因:

  • 您的应用没有WRITE_EXTERNAL_STORAGE权限。

  • 代码未运行。它在静态初始化器中。你必须要做到实例化该类,以便类加载器加载它并运行静态初始化程序。

答案 1 :(得分:1)

我没有对此进行测试,但我确信这是正确的: 如果没有尾随分隔符(在您的情况下为/),Android(有点基于UNIX)将其解释为文件(而不是目录)。这是由于Java中的File类表示文件和目录。 而你根本无法在文件中创建目录。