0

Я ищу в google и не могу найти верный ответ на мой вопрос! мой вопрос такой же, как him, но его хочу MODE_APPEND, и я хочу MODE_PRIVATE для моего файла. Как я должен это делать?IllegalArgumentException: Файл содержит разделитель путей Android

это мой код:

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; 

    } 
} 

ответ

0

Вы не можете использовать пути с косой черты (/) с 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, чтобы подтвердить все байты записываются на диск
+0

Благодарим вас за лучший ответ. Я знаю, что Vector устарел, но это проще, чем ArrayList. и логическое значение для проверки истинной операции. – b4hr4m

 Смежные вопросы

  • Нет связанных вопросов^_^