2017-07-02 7 views
0

かなり時間をかけて自分自身でこれを理解しようとした後、あなたに聞いてみましょう:コミュニティ!解決策は別の投稿のどこかにあるべきだと確信していますが、私はそれを見つけることができません(または私のコードに適用する)。Android/Java:配列の生のフォルダのファイル名

私は次のことを達成したい:私のアンドロイドアプリを起動すると、私は次のことを行いメソッドを呼び出したい:

私はいくつかの保存されている中で、「RES /生」ディレクトリ内のすべてのファイル名を読みますjpegsを作成し、これらのファイルの名前を配列に格納します。

私はそれがあまりにも答えにくいはずはないと思いますが、私はそれを自分で理解することはできません。私はlistFiles()コマンドを調べましたが、それはやり方だと思いますが、動かすことはできません。

public class Example{ 
     File[] imageNames; 
     public void onCreate(){ 
       scanFolder(); 
       useTheDataFromScanFolder(); 
     } 

     public void scanFolder(){ 
       int numberOfFiles = new File("res\raw").listFiles().length; 
       imageNames = new File("res\raw").listFiles(); 
     } 

     useTheDataFromScanFolder(){ 
       //here I want to use numberOfFiles and the array imageId 
     } 
} 

私はあなたが私の問題を解決するため、または右方向に私をプッシュすることができますいずれかを願って:ここでは、関連する行で私のコードの一部を見つけます!前もって感謝します!!

編集:私は私の問題を解決するために管理CommonsWareへ おかげで、私はそれが次のコードで作業を得ることができた(写真は今/中/資産/リソース保存されます):

String [] fileList;  

public void onCreate(Bundle savedInstanceState) { 
    listAssetFiles("resources"); 
} 

public boolean listAssetFiles(String path) { 
    try { 
     fileList = getAssets().list(path); 
    } catch (IOException e) { 
     return false; 
    } 
    return true; 
} 
+1

このようなプロジェクト構造では、プログラムでフォルダを読み取ることはできません。 apkでは、これらはすべてリソースであり、フォルダなどのファイルシステムのようなファイルではありません。 – Opiatefuchs

答えて

3

"res/raw"ディレクトリ内のすべてのファイル名を読む

Androidデバイスにはres/raw/ディレクトリはありません。あなたの開発マシンのAndroidアプリプロジェクトにはres/raw/ディレクトリがあります。リソースはデバイス上のファイルではなく、代わりにAPKファイルのエントリです。したがって、ファイル名はありません。

もっと簡単な解決策は、これらのことをassets/に移動することです。その後、AssetManagerlist()を使用してこれらのアセットの名前を取得し、open()を使用してInputStreamを取得することができます。アセットはデバイス上のファイルでもありませんが、AssetManager APIはファイル形式です。

あなたが生のリソースに固執する場合は、InputStreamを取得するためにResources()オブジェクトにopenRawResource()を使用し、その後、そのリソースIDを見つけるために、R.rawで定義されたすべてのstaticフィールドを反復処理するJavaリフレクションを使用する必要があります。

+0

ありがとうございました。編集でわかるように、問題を解決できました。コードを合理化するためのヒントはありますか? – daan166

+0

@ daan166:合理化するコードがあまりないので特にありません。 – CommonsWare

関連する問題