【问题标题】:How get all files in folder in Java如何在Java中获取文件夹中的所有文件
【发布时间】:2017-10-13 06:40:15
【问题描述】:

我有项目,但我不知道如何获取文件夹中的所有文件名。我在 Andoid Studio 工作。我只需要创建函数 getAllFilesInFolder(string folderPath)。如果您也编写它需要的所有导入,我会很高兴。我使用的代码:

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();
        }
    }

}

【问题讨论】:

    标签: java android arrays file directory


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      假设您想收集storage/emulated/0/DCIM 中的所有文件,并且“DCIM”还有两个目录,比如说Screenshotspictures。这就是您的做法。

      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对象中的所有文件。希望这会有所帮助

      【讨论】:

        【解决方案3】:

        Mehran Zamani 的回答会起作用,但请记住检查文件类型。 记住不要只检查“abc.txt”之类的扩展名。 abc 文件可能是 PDF 文件,但有人通过简单地重命名来更改其扩展名。 为了安全起见,您必须检查其 MIME 类型。例如,在 Java 7 中,您现在可以只使用 Files.probeContentType(path)。这只是一个示例,您可能需要在线搜索更好的解决方案。只是想给你一个想法

        您可能需要检查它是否是另一个目录。 例如 file.isFile() / file.isFolder()。

        【讨论】:

          【解决方案4】:
          File directory = new File(path);
          File[] files = directory.listFiles();
          for (int i = 0; i < files.length; i++)
          {
              //do something
          }
          

          path 应该是这样的: /storage/emulated/0/Android/data

          【讨论】:

            猜你喜欢
            • 2017-04-17
            • 2020-11-07
            • 2014-03-06
            • 2010-12-23
            • 2013-11-26
            • 2021-02-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多