File io 从应用程序专用存储目录(Android)中删除文件

File io 从应用程序专用存储目录(Android)中删除文件,file-io,android-file,android,File Io,Android File,Android,我在尝试从应用程序私有存储目录中删除一个文件时遇到了一些麻烦,我已经通过编程创建并压缩了该目录 我面临的问题是,当我调用file.exists()时,它无法识别该文件是否存在,因此它不会删除该文件 这是我用来删除文件的代码 public static void deleteImageFromPrivateArea( final String fileUri ) { final File file; boolean isFileDeleted; if ( isFileP

我在尝试从应用程序私有存储目录中删除一个文件时遇到了一些麻烦,我已经通过编程创建并压缩了该目录

我面临的问题是,当我调用file.exists()时,它无法识别该文件是否存在,因此它不会删除该文件

这是我用来删除文件的代码

public static void deleteImageFromPrivateArea( final String fileUri )
  {
    final File file;
    boolean isFileDeleted;
    if ( isFilePathPrefixPresent( fileUri ) )
    {//file name checking
      file = new File( fileUri );
    }
    else
    {
      file = new File( "file://" + fileUri );
    }

    if ( file.exists() )
    {
      isFileDeleted = file.delete();
      if ( ! isFileDeleted )
      {
        throw new IllegalStateException( "File was not deleted" );
      }
    }
  }
  • 为了澄清问题,我知道我要传递的文件URI是当前存在的文件的位置。我已使用filemanager应用程序进行了检查

  • 我在清单xml中设置了权限

  • 我认为正在发生的是,这段代码正在获取当前现有文件的路径,并设置一个新文件,但没有将数据写入其中,因此android中不存在这个新文件

  • 因此,我认为我需要做的是获取现有文件(可能不是以Uri的形式,而是实际的文件),然后调用.delete(),因为该文件将存在

    在使用fileUri设置这个新文件之后,使用OutputfileStream将数据写入其中——尽管这不是我的首选方法


    -但我不完全确定。

    将文件名作为参数传递会更容易

     File mydir = getFilesDir(); //get your internal directory
     File myFile = new File(mydir, filename);
     myFile.delete();
    

    将文件名作为参数传递会更容易,然后

     File mydir = getFilesDir(); //get your internal directory
     File myFile = new File(mydir, filename);
     myFile.delete();
    

    将文件名作为参数传递会更容易,然后

     File mydir = getFilesDir(); //get your internal directory
     File myFile = new File(mydir, filename);
     myFile.delete();
    

    将文件名作为参数传递会更容易,然后

     File mydir = getFilesDir(); //get your internal directory
     File myFile = new File(mydir, filename);
     myFile.delete();
    

    在布拉德的帮助下,我找到了最好的解决方案

  • 我使用*getExternalFilesDir(Environment.DIRECTORY\u PICTURES)*获取图片2。应用程序专用存储区域中的目录

  • 使用给定的imageUri创建了一个新文件,然后使用该文件获取文件名

  • 使用ExternalFilesDir和filename重新初始化文件以创建新文件

  • 检查文件是否存在并将其删除

  • #


    在布拉德的帮助下,我找到了最好的解决方案

  • 我使用*getExternalFilesDir(Environment.DIRECTORY\u PICTURES)*获取图片2。应用程序专用存储区域中的目录

  • 使用给定的imageUri创建了一个新文件,然后使用该文件获取文件名

  • 使用ExternalFilesDir和filename重新初始化文件以创建新文件

  • 检查文件是否存在并将其删除

  • #


    在布拉德的帮助下,我找到了最好的解决方案

  • 我使用*getExternalFilesDir(Environment.DIRECTORY\u PICTURES)*获取图片2。应用程序专用存储区域中的目录

  • 使用给定的imageUri创建了一个新文件,然后使用该文件获取文件名

  • 使用ExternalFilesDir和filename重新初始化文件以创建新文件

  • 检查文件是否存在并将其删除

  • #


    在布拉德的帮助下,我找到了最好的解决方案

  • 我使用*getExternalFilesDir(Environment.DIRECTORY\u PICTURES)*获取图片2。应用程序专用存储区域中的目录

  • 使用给定的imageUri创建了一个新文件,然后使用该文件获取文件名

  • 使用ExternalFilesDir和filename重新初始化文件以创建新文件

  • 检查文件是否存在并将其删除

  • #


    嘿,谢谢你的帮助!这让我接近了我所需要的。我没有使用getFilesDir(),而是使用了getExternalFilesDir(Environment.DIRECTORY\u PICTURES)嘿,谢谢你的帮助!这让我接近了我所需要的。我没有使用getFilesDir(),而是使用了getExternalFilesDir(Environment.DIRECTORY\u PICTURES)嘿,谢谢你的帮助!这让我接近了我所需要的。我没有使用getFilesDir(),而是使用了getExternalFilesDir(Environment.DIRECTORY\u PICTURES)嘿,谢谢你的帮助!这让我接近了我所需要的。我没有使用getFilesDir(),而是使用了getExternalFilesDir(Environment.DIRECTORY\u PICTURES)