2012-02-14 11 views
3

私は今、いくつかの時間のgetFileStreamPath狂気を理解しようとしました。 誰かがパス= "shop/crates/fruits"が存在するかどうかをテストする方法を説明できますか? テストを簡素化するために、私はセグメントを分割してしまっています。 私はそれを持っていると思った。しかし、店は存在するが、木箱はありません.Weird! それとも?Context.getFileStreamPathは、ファイルパスが存在するかどうかテストしようとしていますか?

答えて

0
public static Boolean pathExists(String path, Context ctx) 
{ 
    Boolean result = false; 
    String[] pathSegments = path.split("/"); 
    String pathStr = ""; 
    for(int i = 0;i<pathSegments.length;i++) 
    { 
     pathStr += pathSegments[i]; 
     if(!ctx.getFileStreamPath(pathStr).exists()) 
     { 
      result = false; 
      break; 
     } 
     pathStr += "/"; 
     result = true; 
    } 
    return result; 
} 

まず、getFileStreamPathはopenFileOutput(文字列、整数)で作成されたファイルが格納されているファイルシステム上の絶対パスを返します。

内部または外部ストレージのパスをテストしようとしていますか?外部ストレージを使用する場合は、getExternalFilesDir()を使用してください。あなたはres/rawのような内部のパッケージ埋め込まれたリソースを使用したい場合は、それはまた別の話だ:

Android how to get access to raw resources that i put in res folder?

しかし、私はそれはあなたがそれを得るために想定されているように動作するとは思いません。

このhttp://developer.android.com/guide/topics/data/data-storage.html を慎重にお読みください。

ここにUsing the Internal Storageの章をお読みください。

も参照してください:

How to create a file on Android Internal Storage?

Read/write file to internal private storage

http://www.vogella.de/articles/AndroidFileSystem/article.html

+1

_どのように動作するかわかりません。まず、getFileStreamPathは、openFileOutput(String、int)で作成されたファイルが格納されているファイルシステムの絶対パスを返します。_ 私は全く同意します。 ファイルとディレクトリの操作は常に醜いです。 Androidファイルシステムは、平均ファイルシステムオブジェクトよりも醜いです。 あなたはRTFMを持っていなければなりません。その期限が間に合わない場合を除いて。 私はこの姿勢で私が一人ではないことを知っています。そこにはハックしようとしている多くの欲求不満の人がいる。 あまりにも悪い...私に完全な再設計のようです。 – DevNull

2

うん、安っぽいアンドロイドのAPIを。 秘密のソースはcontext.getFilesDir()を使用します。あなたのファイル:

File file = new File(context.getFilesDir() + File.separator + path); 

その後、ファイルは正常に動作します。

関連する問題