我正在做一个项目,其中包含一个模块来扫描pdf,从sd卡文档xls文件,并列出它们。我也想只列出文件夹。
因为我对android非常陌生。任何人都有实现这一目标的想法。
这是我的密码:
public class MediaScannerWrapper implements
MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mConnection;
private String mPath;
private String mMimeType;
// filePath - where to scan;
// mime type of media to scan i.e. "image/jpeg".
// use "*/*" for any media
public MediaScannerWrapper(Context ctx, String filePath, String mime){
mPath = filePath;
mMimeType = mime;
mConnection = new MediaScannerConnection(ctx, this);
}
// do the scanning
public void scan() {
mConnection.connect();
}
// start the scan when scanner is ready
public void onMediaScannerConnected() {
mConnection.scanFile(mPath, mMimeType);
Log.w("MediaScannerWrapper", "media file scanned: " + mPath);
}
public void onScanCompleted(String path, Uri uri) {
// when scan is completes, update media file tags
}
}
我建议使用commons。io
库,它还处理符号链接和扩展解析。
要扫描扩展名为的文件的任务:
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ScanTask extends AsyncTask<String,Void,ScanTask.Result> {
@Override
protected Result doInBackground(String... extensions) {
if(extensions == null){
extensions = new String[0];
}
List<File> files = new ArrayList<File>();
boolean success = false;
String status = "";
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
try {
files.addAll(FileUtils.listFiles(Environment.getExternalStorageDirectory(), extensions, true));
success = true;
status = "ok";
} catch (Exception e) {
Log.e("MyApp","File error:",e);
success = false;
status = "Scan error";
}
}else {
success = false;
status = "External storage not available";
}
return new Result(success,status,files);
}
public static class Result{
public final boolean success;
public final String message;
public final List<File> files;
public Result(boolean success, String message,List<File> files) {
this.success = success;
this.message = message;
this.files = files;
}
}
}
用法:
ScanTask task = new ScanTask(){
@Override
protected void onPostExecute(Result result) {
super.onPostExecute(result);
if(result.success){
List<File> files = result.files;
//--do something with files--
}else {
String error = result.message;
//--do something with error message--
}
}
};
task.execute("mp3","jpeg");
使用getExternalStorageDirectory()获取SD卡路径。(不要硬编码)
循环浏览每个子文件夹,并检查具有所需扩展名的文件名。使用String endswith()方法检查文件名是否以扩展名结尾。
下面是一个可能对您有所帮助的示例代码。
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())调用此函数
假设我的系统上有一个特定的目录。 我想读取整个目录,并检查其中的文件是否有特定的扩展名。说<代码>。json为例。如果目录中有多个扩展名为< code >的文件。json列出所有这些文件及其名称。 我可以使用< code > File File = new File(my path);并连续执行< code>file.exists(),但是我如何扫描整个目录中的文件呢?这就是我困惑的地方。 任何帮
我正在制作一个 bash 脚本;如何找到不以特定扩展名结尾的文件? 谢谢。
问题内容: 我正在使用fileBrowser在手机上查找文件,但是我想向用户显示我的应用程序可以打开的所有文件,然后用户选择一个。就像音乐播放器一样,它不仅可以显示用户所在文件夹中的歌曲,还可以显示手机,SD卡和内存中的所有歌曲。 问题答案: 在列出文件时使用文件名过滤器。以下示例列出了给定目录中的所有mp3文件(注意-以下代码未对之下的所有文件夹进行递归处理)-
所以我试图从一个文件中获取扩展名,这样我就可以将它与一个字符串进行比较,看看扩展名是否与我要查找的扩展名匹配。然而,目前我认为我能够得到扩展,但然后比较它与我想要找到的是导致我的应用程序崩溃和关闭立即。此外,我希望它能够处理没有扩展名的文件,只是将它们冒充为与所需的文件扩展名不匹配的文件。下面是执行此操作的代码片段,希望有人能向我解释我在这里做错了什么。 附注:我是Java和Android开发的新
问题内容: 我正在尝试查找具有特定扩展名的文件。例如,我要查找所有名为Robert的.pdf和.jpg文件 我知道我可以执行此命令 但是我需要指定扩展名之外的文件本身的名称。我只是想看看是否有一种避免重复写入文件名的方法,谢谢! 问题答案: 我的偏好:
问题内容: 尽管我们已部署了最新的类,但我们正在使用的是旧版本的类。要扫描应用程序服务器所有子文件夹中的所有JAR文件,我们如何编写一个小的Shell脚本来打印出找到该特定类的JARS文件的文件名? 问题答案: 就像是: 您可以这样包装: 然后将在当前目录下找到的所有jar文件中搜索该类