搜索Android设备中存在的所有.pdf文件

时间:2011-08-04 10:02:44

标签: android

如何通过编程方式搜索Android设备中存在的所有.pdf和.doc文件?

5 个答案:

答案 0 :(得分:20)

尝试使用以下代码,这适用于您。

 public void walkdir(File dir) {
    String pdfPattern = ".pdf";

    File listFile[] = dir.listFiles();

    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                walkdir(listFile[i]);
            } else {
              if (listFile[i].getName().endsWith(pdfPattern)){
                                  //Do what ever u want

              }
            }
        }
    }    
}

修改

要搜索整个SD卡,请使用

调用此函数
walkdir(Environment.getExternalStorageDirectory());

答案 1 :(得分:1)

看看here

基本获取一个起始目录,然后使用过滤器(FilenameFilter)调用“list”,然后遍历子目录。不确定是否有一个功能可以为您完成所有这些。

答案 2 :(得分:1)

从此处下载源代码(Open pdf file from sdcard in android programmatically

在Gradle文件中添加此依赖关系:

compile ‘com.github.barteksc:android-pdf-viewer:2.0.3’

<强> MainActivity.java:

package com.pdffilefromsdcard;

import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends AppCompatActivity {

ListView lv_pdf;
public static ArrayList<File> fileList = new ArrayList<File>();
PDFAdapter obj_adapter;
public static int REQUEST_PERMISSIONS = 1;
boolean boolean_permission;
File dir;

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

}

private void init() {

lv_pdf = (ListView) findViewById(R.id.lv_pdf);
dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
fn_permission();
lv_pdf.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getApplicationContext(), PdfActivity.class);
intent.putExtra(“position”, i);
startActivity(intent);

Log.e(“Position”, i + “”);
}
});
}

public ArrayList<File> getfile(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {

if (listFile[i].isDirectory()) {
getfile(listFile[i]);

} else {

boolean booleanpdf = false;
if (listFile[i].getName().endsWith(“.pdf”)) {

for (int j = 0; j < fileList.size(); j++) {
if (fileList.get(j).getName().equals(listFile[i].getName())) {
booleanpdf = true;
} else {

}
}

if (booleanpdf) {
booleanpdf = false;
} else {
fileList.add(listFile[i]);

}
}
}
}
}
return fileList;
}
private void fn_permission() {
if ((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {

if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE))) {
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);

}
} else {
boolean_permission = true;

getfile(dir);

obj_adapter = new PDFAdapter(getApplicationContext(), fileList);
lv_pdf.setAdapter(obj_adapter);

}
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSIONS) {

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

boolean_permission = true;
getfile(dir);

obj_adapter = new PDFAdapter(getApplicationContext(), fileList);
lv_pdf.setAdapter(obj_adapter);

} else {
Toast.makeText(getApplicationContext(), “Please allow the permission”, Toast.LENGTH_LONG).show();

}
}
}

}

<强> PdfActivity.java:

package com.pdffilefromsdcard;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;

import java.io.File;
import java.util.List;

public class PdfActivity extends AppCompatActivity implements OnPageChangeListener,OnLoadCompleteListener {

PDFView pdfView;
Integer pageNumber = 0;
String pdfFileName;
String TAG=”PdfActivity”;
int position=-1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pdf);
init();
}

private void init(){
pdfView= (PDFView)findViewById(R.id.pdfView);
position = getIntent().getIntExtra(“position”,-1);
displayFromSdcard();
}

private void displayFromSdcard() {
pdfFileName = MainActivity.fileList.get(position).getName();

pdfView.fromFile(MainActivity.fileList.get(position))
.defaultPage(pageNumber)
.enableSwipe(true)

.swipeHorizontal(false)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.load();
}
@Override
public void onPageChanged(int page, int pageCount) {
pageNumber = page;
setTitle(String.format(“%s %s / %s”, pdfFileName, page + 1, pageCount));
}
@Override
public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
printBookmarksTree(pdfView.getTableOfContents(), “-“);

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {

Log.e(TAG, String.format(“%s %s, p %d”, sep, b.getTitle(), b.getPageIdx()));

if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + “-“);
}
}
}
}

答案 3 :(得分:0)

看看Here

更改文件扩展名,如果您想要所有PDF文件,然后扩展名为“.pdf”,则使用此文件从设备获取所有PDF文件。

答案 4 :(得分:0)

Found this method in my old project, this function will get you pdf and its info

希望它将对您有帮助 ** ManageFIleInfoForRecycler是我的用于存储文件信息的自定义类**

  

**“存储”通过为“外部” **

 public ArrayList<ManageFIleInfoForRecycler> fileList(String storage) {
       ArrayList< ManageFIleInfoForRecycler > fileInfo = new ArrayList<>();
//can give any file type "doc", "pdf" etc...
        String pdf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
        int j=0;



        Uri table = MediaStore.Files.getContentUri(storage);

        //Column
        String[] column = {MediaStore.Files.FileColumns.DATA,MediaStore.Files.FileColumns.TITLE};
        //Where
        String where = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
        String[] args = new String[]{pdf};

        Cursor fileCursor = getApplicationContext().getContentResolver().query(table, column, where, args, null);

        String [] filesLists=new String[]{};
        while (fileCursor.moveToNext()) {
            int pathString= fileCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
            int nameIndex=fileCursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE);
            String path = fileCursor.getString(pathString);
            String name=fileCursor.getString(nameIndex);
          ManageFIleInfoForRecycler temp=new ManageFIleInfoForRecycler();
          temp.filePath=path;
          temp.fileName=name;
            fileInfo.add(temp);
        }
return fileInfo;

    }