Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止应用程序从java.io.IOException崩溃:写入失败:ENOSPC(设备上没有剩余空间)_Java_Android_Ioexception - Fatal编程技术网

防止应用程序从java.io.IOException崩溃:写入失败:ENOSPC(设备上没有剩余空间)

防止应用程序从java.io.IOException崩溃:写入失败:ENOSPC(设备上没有剩余空间),java,android,ioexception,Java,Android,Ioexception,在尝试写入设备时,当设备已满时,我收到错误:com.google.gson.jsoniexception:java.io.IOException:write failed:ENOSPC(设备上没有剩余空间)。我有一个try-catch块来捕获IOException,还有几行代码来检查列表的大小和可用的存储空间,以确定是否有空间来写入文件,但它仍然使应用程序崩溃,我得到了上面提到的IOException 代码如下: File file = new File(getExternalFilesDir(

在尝试写入设备时,当设备已满时,我收到错误:
com.google.gson.jsoniexception:java.io.IOException:write failed:ENOSPC(设备上没有剩余空间)
。我有一个try-catch块来捕获IOException,还有几行代码来检查列表的大小和可用的存储空间,以确定是否有空间来写入文件,但它仍然使应用程序崩溃,我得到了上面提到的IOException

代码如下:

File file = new File(getExternalFilesDir(null), fileName+".txt");
int file_size = Integer.parseInt(String.valueOf(file.length()/1024));
long storage_size = (getAvailableInternalMemorySize()/1024);
long list_size = listToWrite.toString().getBytes().length/1024;
long total_size = file_size + list_size;
if(total_size < storage_size) {
    try (Writer writer = new FileWriter(file, false)) {
        Gson gson = new GsonBuilder().create();
        gson.toJson(listToWrite, writer);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
File File=new文件(getExternalFilesDir(null),fileName+“.txt”);
int file_size=Integer.parseInt(String.valueOf(file.length()/1024));
长存储空间大小=(getAvailableInternalMemorySize()/1024);
long list_size=listToWrite.toString().getBytes().length/1024;
长总大小=文件大小+列表大小;
if(总尺寸<存储尺寸){
try(Writer=newfilewriter(文件,false)){
Gson Gson=new GsonBuilder().create();
toJson(listToWrite,writer);
}捕获(IOE异常){
e、 printStackTrace();
}
}

是否有方法阻止应用程序崩溃,只需向用户显示Toast消息或执行某些操作。

在清单文件中添加此属性:

android:installLocation="preferExternal"

我建议您编辑您的问题并提供完整的堆栈跟踪。当它再次抛出错误时,我必须获得完整的堆栈跟踪。在您尝试在存储器中存储任何内容之前,您可能应该至少额外留出10%的可用空间。系统不会泄露所有可用字节。这一点很好。听起来是个好主意。因此,我只需找到总存储空间,并在尝试写入之前考虑其中的.10。@NikosHidalgo我使用了1%,而不是
double one_percent_internal=.01*total_internal_size;long list_size=listToWrite.toString().getBytes().length/1024;长总大小到写入=文件大小+列表大小+可用大小;如果(总大小到写入>百分之一内部)