IllegalArgumentException: файл содержит разделитель пути Android
Я ищу в Google и не могу найти верный ответ на мой вопрос! мой вопрос такой же, как у него, но он хочет 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 ответ
Решение
Вы не можете использовать пути с косой чертой (/
) с 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
подтвердить, что все байты записаны на диск