如何在替换文件之前从内存中删除文件

时间:2018-01-05 20:42:49

标签: android file

我想在运行时删除内部文件。当我从外部服务器下载时,文件的旧版本(具有相同的名称)被替换,但是我无法读取它。我认为我需要在下载新版本之前删除以前的文件。这是我到目前为止所尝试的一个例子:

try {
    FileOutputStream fos = getApplicationContext().openFileOutput("mytext.txt", Context.MODE_PRIVATE);
    fos.write(getStringFromFile(pictosFile.getAbsolutePath()).getBytes());
    Log.e("mytextfile",""+getStringFromFile(pictosFile.getAbsolutePath()));
    progressDialog.cancel();
    fos.close();
} 
catch (IOException e) {
    e.printStackTrace();
} 
catch (Exception e) {
    e.printStackTrace();
}

这允许我将文件保存到内部存储器中,但我不确定在编写新版本之前如何删除以前的文件。

1 个答案:

答案 0 :(得分:3)

如果您需要确保文件被覆盖,即在保存新版本之前删除旧副本,则可以使用exists()方法作为文件对象。下面是一个示例,说明如何在嵌套目录中写入具有相同名称的新文件之前删除旧版本的映像文件:

// Here TARGET_BASE_PATH is the path to the base folder
// where the file is to be stored

// 1 - Check that the file exists and delete if it does
File myDir = new File(TARGET_BASE_PATH);
// Create the nested directory structure if it does not exist (first write)
if(!myDir.exists())
    myDir.mkdirs();
String fname = "my_new_image.jpg";
File file = new File(myDir,fname);
// Delete the previous versions of the file if it exists
if(file.exists())
    file.delete();
String filename = file.toString();
BufferedOutputStream bos = null;

// 2 - Write the new version of the file to the same location
try{
    bos = new BufferedOutputStream(new FileOutputStream(filename));
    Bitmap bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
    bmp.copyPixelsFromBuffer(buf);
    bmp.compress(Bitmap.CompressFormat.PNG,90,bos);
    bmp.recycle();
}
catch(FileNotFoundException e){
    e.printStackTrace();
}
finally{
    try{
        if(bos != null)
            bos.close();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

您还必须确保您具有对内存的读/写访问权限,请确保在运行时向用户请求这些权限,并在清单中包含以下内容:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>