这个是由于android中的安全机制的缘故,由于android继承了Linux系统的传统,对于某个特定的目录有用户的权限,一共分为三种--可读,可写,可执行;虽然说可以设置某个特定的目录的权限,但是对于目录里面的子目录和子文件都可以进行权限的设置,也就是说出了根目录权限之外,子目录本身的权限也决定了子目录可否访问,这一点需要清楚了解,所以在判断完了是否是目录之外,还需要在进行listFiles()获取File[]数据后判断获取的数组是否为空,如果为空的话,文件夹是不可访问的。样例代码如下:
01package net.nowamagic.file
02import java.io.File
03import java.util.ArrayList
04import java.util.HashMap
05import java.util.Map
06import android.util.Log
07/**
08 * @author
09 * function 用于扫描SD卡上的文件
10 *
11 */
12public class FileScan {
13
14private static final String TAG = "FileScan"
15public HashMap<String, String>getMusicListOnSys(File file) {
16
17//从根目录开始扫描
18Log.i(TAG, file.getPath())
19HashMap<String, String>fileList = new HashMap<String, String>()
20getFileList(file, fileList)
21return fileList
22}
23
24/**
25 * @param path
26 * @param fileList
27 * 注意的是并不是所有的文件夹都可以进行读取的,权限问题
28 */
29private void getFileList(File path, HashMap<String, String>fileList){
30//如果是文件夹的话
31if(path.isDirectory()){
32//返回文件夹中有的数据
33File[] files = path.listFiles()
34//先判断下有没有权限,如禅迅迟果没有权限的话,就不执行了
35if(null == files)
36return
37
38for(int i = 0i <files.lengthi++){
39getFileList(files[i], fileList)
40}
41}
42//如果是文件的话直接加入
43else{
44Log.i(TAG, path.getAbsolutePath())
45//进行文件的处理
46String filePath = path.getAbsolutePath()
47//文件名
48String fileName = filePath.substring(filePath.lastIndexOf("/")+1)
49//添加
50fileList.put(fileName, filePath)
51}
52}
53
54}
出处:http://www.nowamagic.net/librarys/veda/detail/1481
这个是由于android中的安全机制的缘故,由于android继承了Linux系统的传统,对大歼于某个特定的目录有用户的权限,一共分为三种--可读,可写,可执行;虽然说可以设置某胡族个特定的目录的权限,但是对于目录里面的子目录和子文件都可以进行权限的设置,也就是说出了根目录权限之外,子目录本身的权限也决定了子目录可否访问,这一点裤仿弊需要清楚了解,所以在判断完了是否是目录之外,还需要在进行listFiles()获取File[]数据后判断获取的数组是否为空,如果为空的话,文件夹是不可访问的。参考如下代码:package com.Aina.Android
import java.io.File
import java.util.ArrayList
import java.util.List
import android.app.AlertDialog
import android.app.ListActivity
import android.content.DialogInterface
import android.os.Bundle
import android.view.View
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.TextView
public class Test_ListFile extends ListActivity {
/** Called when the activity is first created. */
private List<String>items = null//存放名称
private List<String>paths = null//存放路径
private String rootPath = "/"
private TextView tv
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
tv = (TextView) this.findViewById(R.id.TextView)
this.getFileDir(rootPath)//获取rootPath目录下的文件.
}
public void getFileDir(String filePath) {
try{
this.tv.setText("当前路径:"+filePath)// 设置当前所在圆知迟路径
items = new ArrayList<String>()
paths = new ArrayList<String>()
File f = new File(filePath)
File[] files = f.listFiles()// 列出所有文件
// 如果不是根目录,则列出返回根目录和上一目录选项
if (!filePath.equals(rootPath)) {
items.add("返回根目录")
paths.add(rootPath)
items.add("返回橘李上一猛凯层目录")
paths.add(f.getParent())
}
// 将所有文件存入list中
if(files != null){
int count = files.length// 文件个数
for (int i = 0i <counti++) {
File file = files[i]
items.add(file.getName())
paths.add(file.getPath())
}
}
ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items)
this.setListAdapter(adapter)
}catch(Exception ex){
ex.printStackTrace()
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id)
String path = paths.get(position)
File file = new File(path)
//如果是文件夹就继续分解
if(file.isDirectory()){
this.getFileDir(path)
}else{
new AlertDialog.Builder(this).setTitle("提示").setMessage(file.getName()+" 是一个文件!").setPositiveButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
}
}).show()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)