【问题标题】:File.mkdir() and mkdirs() are creating file instead of directoryFile.mkdir() 和 mkdirs() 正在创建文件而不是目录
【发布时间】:2012-12-06 21:15:02
【问题描述】:

我使用以下代码:

final File newFile = new File("/mnt/sdcard/test/");
newFile.mkdir(); // if I use mkdirs() result is the same

它会创建一个空文件!为什么?

【问题讨论】:

  • 你确定这是一个空文件吗?
  • ----rwxr-x系统sdcard_rw 9873
  • cat /mnt/sdcard/test —> /mnt/sdcard/test: 长度无效
  • 您至少应该始终检查可能返回错误的函数的返回值。
  • 你确定 /mnt/sdcard 存在吗?

标签: android java-io


【解决方案1】:

除非您希望创建结构中的每个文件夹,否则您不会使用 mkdirs()。尝试不要在字符串末尾添加额外的斜杠,看看是否可行。

例如

final File newFile = new File("/mnt/sdcard/test");
newFile.mkdir();

【讨论】:

  • 在所有 Android 设备 (KitKat) 上都没有指向真正 sdcard 的“/mnt/sdcard”。我还在“/storage/external_SD/Android/data//files/dummy//”最后尝试了两个斜杠技巧,它现在创建了一个在 Windows 上可见的目录 files,但 dummy 仍然是一个文件.对于 ES3,两者都是目录。对我来说已经足够了:))
【解决方案2】:

尝试使用

    String rootPath=Environment.getExternalStorageDirectory().getAbsolutePath()+"/test/";
            File file=new File(rootPath);
if(!file.exists()){
file.mkdirs();
}

【讨论】:

    【解决方案3】:

    首先你不应该使用带有“/mnt/sdcard/test”的文件路径,这可能会导致一些安卓手机出现问题。改为使用:

    public final static String APP_PATH_SD_CARD = "/Test";
    
    String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + APP_PATH_SD_CARD;
    

    自从您添加破折号后,它会创建一个空文件。

    现在您有了路径,使用以下代码:

    try {
        File dir = new File(fullPath);
        if (!dir.exists()) {
             dir.mkdirs();
        }
    }
    catch(Exception e){
        Log.w("creating file error", e.toString());
    }
    

    【讨论】:

    • >> 首先你不应该使用带有“/mnt/sdcard/test”的文件路径 >> 没关系,因为它是示例代码。事实上,它是文件管理器的一部分,我正在尝试使用用户定义的路径创建目录。所以,我不会在实际代码中使用硬编码的“/mnt/sdcard/”路径。
    【解决方案4】:

    当我需要确保文件的所有目录都存在,但我只有文件路径时 - 我会

       new File(FileName.substring(0,FileName.lastIndexOf("/"))).mkdirs();
    

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多