Android file 如何在android中从手机内部存储器(Nexus 5)获取所有视频文件
我想从设备的内存中获取所有视频文件 我尝试了以下方法,但没有得到结果Android file 如何在android中从手机内部存储器(Nexus 5)获取所有视频文件,android-file,Android File,我想从设备的内存中获取所有视频文件 我尝试了以下方法,但没有得到结果 File File[]=Environment.getExternalStorageDirectory().listFiles() File File=Environment.getDataDirectory() File File[]=Environment.getRootDirectory().listFiles() File File=Environment.getExternalStoragePublicDirecto
File File[]=Environment.getExternalStorageDirectory().listFiles()代码>
File File=Environment.getDataDirectory()代码>
File File[]=Environment.getRootDirectory().listFiles()代码>
File File=Environment.getExternalStoragePublicDirectory()代码>
我得到了这个问题的解决方案。请查看下面的代码
import android.os.Environment;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class ExternalStorage {
public static final String SD_CARD = "sdCard";
public static final String EXTERNAL_SD_CARD = "externalSdCard";
/**
* @return True if the external storage is available. False otherwise.
*/
public static boolean isAvailable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
public static String getSdCardPath() {
return Environment.getExternalStorageDirectory().getPath() + "/";
}
/**
* @return True if the external storage is writable. False otherwise.
*/
public static boolean isWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/**
* @return A map of all storage locations available
*/
public static Map<String, File> getAllStorageLocations() {
Map<String, File> map = new HashMap<String, File>(10);
List<String> mMounts = new ArrayList<String>(10);
List<String> mVold = new ArrayList<String>(10);
mMounts.add("/mnt/sdcard");
mVold.add("/mnt/sdcard");
try {
File mountFile = new File("/proc/mounts");
if(mountFile.exists()){
Scanner scanner = new Scanner(mountFile);
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.startsWith("/dev/block/vold/")) {
String[] lineElements = line.split(" ");
String element = lineElements[1];
// don't add the default mount path
// it's already in the list.
if (!element.equals("/mnt/sdcard"))
mMounts.add(element);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
try {
File voldFile = new File("/system/etc/vold.fstab");
if(voldFile.exists()){
Scanner scanner = new Scanner(voldFile);
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.startsWith("dev_mount")) {
String[] lineElements = line.split(" ");
String element = lineElements[2];
if (element.contains(":"))
element = element.substring(0, element.indexOf(":"));
if (!element.equals("/mnt/sdcard"))
mVold.add(element);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < mMounts.size(); i++) {
String mount = mMounts.get(i);
if (!mVold.contains(mount))
mMounts.remove(i--);
}
mVold.clear();
List<String> mountHash = new ArrayList<String>(10);
for(String mount : mMounts){
File root = new File(mount);
if (root.exists() && root.isDirectory() && root.canWrite()) {
File[] list = root.listFiles();
String hash = "[";
if(list!=null){
for(File f : list){
hash += f.getName().hashCode()+":"+f.length()+", ";
}
}
hash += "]";
if(!mountHash.contains(hash)){
String key = SD_CARD + "_" + map.size();
if (map.size() == 0) {
key = SD_CARD;
} else if (map.size() == 1) {
key = EXTERNAL_SD_CARD;
}
mountHash.add(hash);
map.put(key, root);
}
}
}
mMounts.clear();
if(map.isEmpty()){
map.put(SD_CARD, Environment.getExternalStorageDirectory());
}
return map;
}
}
导入android.os.Environment;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Scanner;
公共类外部存储{
公共静态最终字符串SD_CARD=“sdCard”;
公共静态最终字符串EXTERNAL\u SD\u CARD=“externalSdCard”;
/**
*@如果外部存储器可用,则返回True。否则返回False。
*/
公共静态布尔值isAvailable(){
String state=Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)| Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
返回true;
}
返回false;
}
公共静态字符串getSdCardPath(){
返回Environment.getExternalStorageDirectory().getPath()+“/”;
}
/**
*@如果外部存储器可写,则返回True;否则返回False。
*/
公共静态布尔值可写(){
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
返回true;
}
返回false;
}
/**
*@返回所有可用存储位置的地图
*/
公共静态映射getAllStorageLocations(){
Map Map=新的HashMap(10);
列表mMounts=新的ArrayList(10);
List mVold=new ArrayList(10);
mMounts.add(“/mnt/sdcard”);
mVold.add(“/mnt/sdcard”);
试试{
File mountFile=新文件(“/proc/mounts”);
if(mountFile.exists()){
扫描仪=新扫描仪(挂载文件);
while(scanner.hasNext()){
字符串行=scanner.nextLine();
if(行.startsWith(“/dev/block/vold/”){
String[]lineElements=line.split(“”);
String元素=lineElements[1];
//不要添加默认装载路径
//它已经在列表中了。
如果(!element.equals(“/mnt/sdcard”))
mMounts.add(元素);
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
试试{
File voldFile=新文件(“/system/etc/vold.fstab”);
if(voldFile.exists()){
扫描仪=新扫描仪(voldFile);
while(scanner.hasNext()){
字符串行=scanner.nextLine();
if(line.startsWith(“dev_mount”)){
String[]lineElements=line.split(“”);
String元素=lineElements[2];
if(element.contains(“:”)
element=element.substring(0,element.indexOf(“:”);
如果(!element.equals(“/mnt/sdcard”))
mVold.add(元素);
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
对于(int i=0;i
它工作得很好……此代码从设备的内部和外部存储器中获取所有视频文件。