android简易文件管理器实例(列表式文件目录)
作者:jingxian 发布时间:2021-07-28 09:43:30
标签:android,简易文件,管理器
核心代码:
File fatherFile = new File(path);File[] files = fatherFile.listFiles();
效果图:
实现这种列表式的目录,用直接读取目录下文件方法会比较简单,但是如果要根据文件类型从所有文件中分类,那就用ContentProvider去查询数据库方式会更有效率;
实现代码:
FileListActivity.java
package com.example.d_readandwritetextfile;
import java.io.File;
import java.util.ArrayList;
import com.example.d_readandwritetextfile.entity.FileEntity;
import com.example.d_readandwritetextfile.entity.FileEntity.Type;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 文件列表 界面
* @author Administrator
*
*/
public class FileListActivity extends Activity implements OnClickListener{
private ListView mListView;
private Button btnComfirm;
private MyFileAdapter mAdapter;
private Context mContext;
private File currentFile;
String sdRootPath;
private ArrayList<FileEntity> mList;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filelist);
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
if(mAdapter ==null){
mAdapter = new MyFileAdapter(mContext, mList);
mListView.setAdapter(mAdapter);
}else{
mAdapter.notifyDataSetChanged();
}
break;
case 2:
break;
default:
break;
}
}
};
mContext = this;
mList = new ArrayList<>();
sdRootPath =Environment.getExternalStorageDirectory().getAbsolutePath();
currentFile = new File(sdRootPath);
System.out.println(sdRootPath);
initView();
getData(sdRootPath);
}
@Override
public void onBackPressed() {
//super.onBackPressed();
System.out.println("onBackPressed...");
if(sdRootPath.equals(currentFile.getAbsolutePath())){
System.out.println("已经到了根目录...");
return ;
}
String parentPath = currentFile.getParent();
currentFile = new File(parentPath);
getData(parentPath);
}
private void initView() {
mListView = (ListView) findViewById(R.id.listView1);
btnComfirm = (Button) findViewById(R.id.button1);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final FileEntity entity = mList.get(position);
if(entity.getFileType() == Type.FLODER){
currentFile = new File(entity.getFilePath());
getData(entity.getFilePath());
}else if(entity.getFileType() == Type.FILE){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, entity.getFilePath()+" "+entity.getFileName(),
1).show();
}
});
}
}
});
}
private void getData(final String path) {
new Thread(){
@Override
public void run() {
super.run();
findAllFiles(path);
}
}.start();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
setResult(100);
finish();
break;
default:
break;
}
}
/**
* 查找path地址下所有文件
* @param path
*/
public void findAllFiles(String path) {
mList.clear();
if(path ==null ||path.equals("")){
return;
}
File fatherFile = new File(path);
File[] files = fatherFile.listFiles();
if (files != null && files.length > 0) {
for (int i = 0; i < files.length; i++) {
FileEntity entity = new FileEntity();
boolean isDirectory = files[i].isDirectory();
if(isDirectory ==true){
entity.setFileType(Type.FLODER);
//entity.setFileName(files[i].getPath());
}else{
entity.setFileType(Type.FILE);
}
entity.setFileName(files[i].getName().toString());
entity.setFilePath(files[i].getAbsolutePath());
entity.setFileSize(files[i].length()+"");
mList.add(entity);
}
}
mHandler.sendEmptyMessage(1);
}
class MyFileAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<FileEntity> mAList;
private LayoutInflater mInflater;
public MyFileAdapter(Context mContext, ArrayList<FileEntity> mList) {
super();
this.mContext = mContext;
this.mAList = mList;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mAList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mAList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
if(mAList.get(position).getFileType() == Type.FLODER){
return 0;
}else{
return 1;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//System.out.println("position-->"+position+" ---convertView--"+convertView);
ViewHolder holder = null;
int type = getItemViewType(position);
FileEntity entity = mAList.get(position);
if(convertView == null){
holder = new ViewHolder();
switch (type) {
case 0://folder
convertView = mInflater.inflate(R.layout.item_listview, parent, false);
holder.iv = (ImageView) convertView.findViewById(R.id.item_imageview);
holder.tv = (TextView) convertView.findViewById(R.id.item_textview);
break;
case 1://file
convertView = mInflater.inflate(R.layout.item_listview, parent, false);
holder.iv = (ImageView) convertView.findViewById(R.id.item_imageview);
holder.tv = (TextView) convertView.findViewById(R.id.item_textview);
break;
default:
break;
}
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
switch (type) {
case 0:
holder.iv.setImageResource(R.drawable.folder_125);
holder.tv.setText(entity.getFileName());
break;
case 1:
holder.iv.setImageResource(R.drawable.file);
holder.tv.setText(entity.getFileName());
break;
default:
break;
}
return convertView;
}
}
class ViewHolder {
ImageView iv;
TextView tv;
}
}
FileEntity.java
package com.example.d_readandwritetextfile.entity;
public class FileEntity {
public enum Type{
FLODER,FILE
}
private String filePath;
private String fileName;
private String fileSize;
private Type fileType;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileSize() {
return fileSize;
}
public void setFileSize(String fileSize) {
this.fileSize = fileSize;
}
public Type getFileType() {
return fileType;
}
public void setFileType(Type fileType) {
this.fileType = fileType;
}
}
activity_filelist.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="14dp"
android:onClick="onClick"
android:text="确定" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#666"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
item_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/item_imageview"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:src="@drawable/folder_125"
android:scaleType="fitXY"
/>
<TextView
android:id="@+id/item_textview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:text="TextView"
android:gravity="center"
/>
</LinearLayout>


猜你喜欢
- Unsafe类介绍第一次看到这个类时被它的名字吓到了,居然还有一个类自名Unsafe?读完本文,大家也能发现Unsafe类确实有点不那么安全
- springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然
- 本文实例讲述了Android手机获取root权限并实现关机重启功能的方法,是Android程序设计中非常常见的重要功能。现分享给大家,供大家
- 今天给大家讲讲有关自定义对话框的相关内容,前面两篇都在在利用系统提供的函数来实现对话框,但局限性太大,当我们想自己定义视图的时候,就不能利用
- 一>实现功能在实验二中我们已经实现了在类微信界面添加recyclview并添加相应的imageview,本次实验就是在recyclvi
- 想必大家都知道,国内的Android应用基本都是免费的
- 1.图的遍历从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次图的遍历有两种深度优先遍历DFS、广度优先遍历BFS2.深度优先遍历深
- 目录概要独立文件专属文件internal storageexternal storage概要当我们查看手机的文件管理器的时候,会发现里面的文
- 所谓文件的断点续传,就是一个线程传输文件,另一个线程控制传输标识,以达到暂停文件效果、恢复文件上传的效果。本demo使用最基本的线程之间的通
- 首先:看问题图,如下可以激活ide的网址很多,估计是个团队或者个人,直接买了全部产品的一年的有效期。而且还是会一直更新下去的。因为,后来我自
- 本文实例讲述了Java使用自定义注解实现为事件源绑定事件 * 操作。分享给大家供大家参考,具体如下:一 定义注解import java.la
- 前言在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决。对话框
- 关于unicode和utf的关系,可以简单的记忆:Unicode是一个编码组织、一个编码规范、在java中指utf-16;utf是Unico
- 本文实例为大家分享了Java单例模式利用HashMap实现缓存数据的具体代码,供大家参考,具体内容如下一、单例模式是什么?单例模式是一种对象
- 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Thre
- 简介单例指的是只能存在一个实例的类(在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它是软件工程中使用最多的几种模
- 之前一篇文章研究完横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己同时对性能进
- 本文实例为大家分享了本地图片或者网络图片高斯模糊效果(毛玻璃效果),具体内容如下首先看效果图1.本地图片高斯模糊2.网络图片高斯模糊gith
- 想要将一个项目导出为jar包,供其它项目使用,在eclipse中可以直接导出该项目为jar包,而 在AS中可以通过修改gradle才处理。接
- Android利用爬虫实现模拟登录的实现实例为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次