【问题标题】:new File(path) always actually creates a file on android?new File(path) 实际上总是在 android 上创建一个文件?
【发布时间】:2013-04-03 14:46:51
【问题描述】:

我正在尝试检查 android sd 卡上是否存在文件...所以我这样做了:

File f=new File(sdpath + "/" + DATABASE_NAME); //   
if(!f.exits()) {
...create new file..
}
else {
...do something...
}

每次这实际上都会在 sd 卡上创建目录或文件。

我知道它不存在,并且当新文件被执行时它被创建并且它不应该?

我在谷歌上读到新文件不会在文件系统上创建实际文件,但在我的情况下它确实......

在不使用新文件的情况下检查文件/目录是否退出的任何替代方法..

编辑 1:好吧,我想补充一下(4 年后:))在我写这篇文章时,这个问题只发生在两台设备上,而且再也没有发生过,其中一个是 HTC Desire C with android 4.0,另一个是华为2.x的,不记得了。

【问题讨论】:

    标签: java android file android-file


    【解决方案1】:

    由于某种奇怪的原因,结果发现 new File 每次都会创建一个目录...

    我没有检查if (!f.exists()),而是将其更改为检查if (!f.isFile())

    在这种情况下,我创建了一个新文件,它运行良好,下次我运行它时,该文件已经在 sd 卡上......

    【讨论】:

      【解决方案2】:

      工作方式和你的差不多:

      File f = new File(Environment.getExternalStorageDirectory(), "a directory");
      if(!f.exists){
      // do something
      }
      

      和检查文件是否存在的方法几乎相同:

      File f = new File(Environment.getExternalStorageDirectory() + "/a directory/" + "a file");
      if(!f.exists){
      // do something
      }
      

      我希望它可以帮助你,因为它没有在我的应用程序中创建文件或目录。它只是检查了路径。

      【讨论】:

      • 它仍然是我做的同样的事情......每次我放置新文件(某物)时,它都会创建一个具有该名称的目录。
      【解决方案3】:

      这可能对你有帮助,试试吧

      if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                          //handle case of no SDCARD present
                      } else {
                          File file = new File(Environment.getExternalStorageDirectory()
                               +File.separator
                               +"myDirectory" //folder name
                               +File.separator
                               +"myFile.example"); //file name
      
                          if(file.exists()){
                              Toast.makeText(MainActivity.this, "Not Create ", 12).show();
                          }else{
                              file.mkdirs();
                              Toast.makeText(MainActivity.this, "Create ", 12).show();
                          }
      
                      }
      

      【讨论】:

      • 我的 sdpath 是这样构建的,所以我基本上已经这样做了:(
      【解决方案4】:

      试试这个

          File[] files = filedir.listFiles();
          for (File file2 : files) {
              if (file2.isDirectory()) {
                  Toast.makeText(this, "directory", Toast.LENGTH_LONG).show();
              } else {  
                  if (file2.getName().equals(DATABASE_NAME)) {
                      Toast.makeText(this, "File found",Toast.LENGTH_LONG).show();
                  }
                else{Toast.makeText(this, "File not found",Toast.LENGTH_LONG).show();
              }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-24
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        相关资源
        最近更新 更多