0

Googleで検索していますが、私の質問に真の答えが見つかりません! 私の質問はhimと同じですが、彼はMODE_APPENDを望み、私は私のfile.howのMODE_PRIVATEをしたいですか?IllegalArgumentException:ファイルにパス区切りが含まれています。

これは私のコードです:

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コンストラクタを使用
  • ばかりの例外を引くにはポイントがありません
  • それを再スロー
  • 、常にすべてのバイトを確認する FileOutputStream上のコール getFD().sync() true
  • あるbooleanを返すにはポイントがありません
  • ディスクに書き込まれます
+0

最高の答えをありがとう。 Vectorは時代遅れですが、ArrayListよりも簡単です。真の操作をチェックするブール値。 – b4hr4m

関連する問題