2017-05-14 16 views
1

私はプロジェクトを持っており、フォルダ内のすべてのファイル名を取得する方法がわかりません。私はAndoid Studioで働いています。私は関数getAllFilesInFolder(文字列folderPath)を作成する必要があります。あなたが必要とするすべての輸入品を書いていただければ幸いです。コード私が使用:Javaのフォルダ内のすべてのファイルを取得する方法

package com.my.appPackage; 

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String[] files = getAllFilesInFolder("/sdcard/folderIUse"); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.LargeTextInList, files); 
     ListView list = (ListView) findViewById(R.id.listView); 
     list.setAdapter(adapter); 

     list.setOnItemClickListener(new ItemList()); 
    } 
    class ItemList implements AdapterView.OnItemClickListener{ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
      ViewGroup vg = (ViewGroup) view; 
      TextView tv = (TextView) vg.findViewById(R.id.LargeTextInList); 
      Toast.makeText(MainActivity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

答えて

1

これはうまくいくかもしれないのに役立ちます:

ArrayList<String> result = new ArrayList<String>(); //ArrayList cause you don't know how many files there is 
    File folder = new File("PATH/TO/YOUR/FOLDER/AS/STRING"); //This is just to cast to a File type since you pass it as a String 
    File[] filesInFolder = folder.listFiles(); // This returns all the folders and files in your path 
    for (File file : filesInFolder) { //For each of the entries do: 
     if (!file.isDirectory()) { //check that it's not a dir 
      result.add(new String(file.getName())); //push the filename as a string 
     } 
    } 

    return result; 
0
File directory = new File(path); 
File[] files = directory.listFiles(); 
for (int i = 0; i < files.length; i++) 
{ 
    //do something 
} 

pathはこのようなものでなければなりません: /ストレージ/エミュレート/ 0 /アンドロイド/データ

0

Mehranザマヌからの答えは動作しますが、チェックするために覚えているでしょうファイルの種類。 "abc.txt"のような拡張子だけをチェックしないことを忘れないでください。 abcファイルはおそらくPDFファイルですが、誰かが単にその名前を変更して拡張子を変更しました。 安全のため、MIMEタイプをチェックする必要があります。たとえば、Java 7では、Files.probeContentType(path)を使用できるようになりました。これは単なる例であり、より良い解決策をオンラインで検索する必要があるかもしれません。

別のディレクトリであるかどうかを確認する必要があります。 たとえば、file.isFile()/ file.isFolder()です。

2

のは、あなたがstorage/emulated/0/DCIMとのは、Screenshotspictures .Thisは、あなたがそれを行うだろうかあるとしましょう2つのディレクトリを持っているfuther「DCIM」内のすべてのファイルを収集したいとしましょう。

public void getAllFiles(File parent) { 
    List<File> directories = new ArrayList<>(); 
    List<File> files = new ArrayList<>(); 
    //adding initial parent whose files we want to fetch 
    directories.add(parent); 
    while (directories.size() != 0) { 
     File f = directories.remove(0); 
     if (f.isDirectory()) { 
      if (f.list().length > 0) { 
       //directory filter to filter out directories if any 
       List<File> directoryList = Arrays.asList(f.listFiles(directoryFilter)); 
       //file filter to filter out files if any 
       List<File> fileList = Arrays.asList(f.listFiles(fileFilter)); 
       //adding directories to directory list 
       directories.addAll(directoryList); 
       //adding files to file list 
       files.addAll(fileList); 
      } 
     } 
    } 
} 

FilenameFilter fileFilter = new FilenameFilter() { 
    @Override 
    public boolean accept(File file, String s) { 
    return file.isFile(); 
    } 
    }; 

    FilenameFilter directoryFilter = new FilenameFilter() { 
     @Override 
     public boolean accept(File file, String s) { 
      return file.isDirectory(); 
     } 
    }; 

1がちょうどfiles object.Hope内のすべてのファイルを取得するための関数にフォルダ名を通過しなければならない。この方法で、この

関連する問題