android实例 文件选择器,Android 文件选择器详解及实例代码

本文详细介绍了如何在Android中使用文件选择器,通过Java File类操作文件和文件夹,实现类似C# OpenFileDialog的功能。文章提供了代码示例,包括监听Back键事件以返回上一级目录,以及针对不同文件类型的处理。用户点击文件夹可浏览其内容,点击PPT文件则返回选中路径。代码简洁易懂,适合开发者快速理解和应用。
摘要由CSDN通过智能技术生成

本文给大家讲解下Android文件选择器的使用。实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件。

此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率。

网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:

1、监听了用户按下Back键的事件,使其返回上一层目录。

2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。

知识点一、 File 类的使用

文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过Java File类来实现的。

知识点二、调用方法说明

使用了startActivityForResult()发起调用以及onActivityResult()方法接收回调后的信息。

先贴上效果图如下:

其他的也没什么好说了,大家看看代码注释吧,很简单。

FileChooserActivity.java 实现文件选择的类 。

Java代码

public class CopyOfFileChooserActivity extends Activity {

private String mSdcardRootPath ; //sdcard 根路径

private String mLastFilePath ; //当前显示的路径

private ArrayList mFileLists ;

private FileChooserAdapter mAdatper ;

//配置适配器

private void setGridViewAdapter(String filePath) {

updateFileItems(filePath);

mAdatper = new FileChooserAdapter(this , mFileLists);

mGridView.setAdapter(mAdatper);

}

//根据路径更新数据,并且通知Adatper数据改变

private void updateFileItems(String filePath) {

mLastFilePath = filePath ;

mTvPath.setText(mLastFilePath);

if(mFileLists == null)

mFileLists = new ArrayList() ;

if(!mFileLists.isEmpty())

mFileLists.clear() ;

File[] files = folderScan(filePath);

if(files == null)

return ;

for (int i = 0; i < files.length; i++) {

if(files[i].isHidden()) // 不显示隐藏文件

continue ;

String fileAbsolutePath = files[i].getAbsolutePath() ;

String fileName = files[i].getName();

boolean isDirectory = false ;

if (files[i].isDirectory()){

isDirectory = true ;

}

FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ;

//添加至列表

mFileLists.add(fileInfo);

}

//When first enter , the object of mAdatper don't initialized

if(mAdatper != null)

mAdatper.notifyDataSetChanged(); //重新刷新

}

//获得当前路径的所有文件

private File[] folderScan(String path) {

File file = new File(path);

File[] files = file.listFiles();

return files;

}

private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() {

public void onItemClick(AdapterView> adapterView, View view, int position,

long id) {

FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));

if(fileInfo.isDirectory()) //点击项为文件夹, 显示该文件夹下所有文件

updateFileItems(fileInfo.getFilePath()) ;

else if(fileInfo.isPPTFile()){ //是ppt文件 , 则将该路径通知给调用者

Intent intent = new Intent();

intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath());

setResult(RESULT_OK , intent);

finish();

}

else { //其他文件.....

toast(getText(R.string.open_file_error_format));

}

}

};

public boolean onKeyDown(int keyCode , KeyEvent event){

if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()

== KeyEvent.KEYCODE_BACK){

backProcess();

return true ;

}

return super.onKeyDown(keyCode, event);

}

//返回上一层目录的操作

public void backProcess(){

//判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。

if (!mLastFilePath.equals(mSdcardRootPath)) {

File thisFile = new File(mLastFilePath);

String parentFilePath = thisFile.getParent();

updateFileItems(parentFilePath);

}

else { //是sdcard路径 ,直接结束

setResult(RESULT_CANCELED);

finish();

}

}

}

此实例的界面稍显简陋,不过大家可以在此基础上完善,添加其他功能。本实例代码下载地址:

http://download.csdn.net/detail/qinjuning/4825392。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值