2017-05-14 3 views
1

프로젝트가 있는데 폴더에있는 모든 파일 이름을 가져 오는 방법을 모르겠습니다. 저는 Andoid Studio에서 일합니다. 나는 함수 getAllFilesInFolder (string 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 Zamani의 대답은 작동하지만를 확인하기 위해 기억 파일 유형. "abc.txt"와 같은 확장자 만 확인하지 마십시오. abc 파일은 PDF 파일 일 수 있지만 단순히 누군가의 이름을 변경하여 확장자를 변경했습니다. 안전을 위해 MIME 유형을 확인해야합니다. 예를 들어 Java 7에서는 이제 Files.probeContentType (path)을 사용할 수 있습니다. 이것은 단지 예일 뿐이므로 더 나은 솔루션을 온라인으로 검색해야 할 수도 있습니다. 그냥 당신에게 아이디어를 주려고 시도하십시오

다른 디렉토리인지 여부를 확인해야 할 수도 있습니다. 예 : file.isFile()/file.isFolder().

2

의 당신이 storage/emulated/0/DCIM와의이 Screenshotspictures .This는 어떻게 할 것입니다 가정 해 봅시다 두 개의 디렉토리를 가지고 학습과 "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(); 
     } 
    }; 

하나가 바로 files object.Hope의 모든 파일을 얻을 수있는 기능으로 폴더 이름을 전달하는이 방법이

관련 문제