IllegalArgumentException:文件包含路径分隔符Android

时间:2016-12-10 14:25:09

标签: android runtime-error illegalargumentexception path-separator

我在谷歌搜索,无法找到我的问题的真实答案! 我的问题与him相同,但是他想要MODE_APPEND,我想要MODE_PRIVATE用于我的文件。我该怎么办?

这是我的代码:

public boolean saveCustomButtonInfo (Context context, Vector<DocumentButtonInfo> info) throws Exception{
    String path= context.getFilesDir() + "/" + "Load";
    File file = new File(path);

    if(! file.exists()){
        file.mkdir();
        //Toast.makeText(context,file.getAbsolutePath(),Toast.LENGTH_LONG).show();
     }
    path=path+"/DocumentActivityCustomButtonsInfo.obj";
    try{
        FileOutputStream out=context.openFileOutput(path,Context.MODE_PRIVATE);
        ObjectOutputStream outObject=new ObjectOutputStream(out);
        outObject.writeObject(info);
        outObject.flush();
        out.close();
        outObject.close();
        return true;
    }catch(Exception ex){
        throw ex;

    }
}

1 个答案:

答案 0 :(得分:1)

您不能将带斜杠(/)的路径与openFileOutput()一起使用。更重要的是,您正在尝试将getFilesDir()openFileOutput()结合使用,这是不必要的并且会导致此问题。

将您的代码更改为:

public void saveCustomButtonInfo (Context context, List<DocumentButtonInfo> info) throws Exception {
    File dir = new File(context.getFilesDir(), "Load");

    if(! dir.exists()){
        dir.mkdir();
    }
    File f = new File(dir, "DocumentActivityCustomButtonsInfo.obj");
    FileOutputStream out=new FileOutputStream(f);
    ObjectOutputStream outObject=new ObjectOutputStream(out);
    outObject.writeObject(info);
    outObject.flush();
    out.getFD().sync();
    outObject.close();
}

值得注意的是:

  • Vector已经过时了〜15年
  • 永远不要使用连接来构建文件系统路径;使用正确的File构造函数
  • 除了重新抛出异常之外没有任何意义,
  • 返回始终为boolean
  • true毫无意义
  • getFD().sync()上调用FileOutputStream以确认所有字节都写入磁盘