1. 程式人生 > >【android】簡易檔案管理器(列表式檔案目錄)

【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>


   ,

相關推薦

android簡易檔案管理列表檔案目錄

、    核心程式碼:                                 File fatherFile = new File(path); File[] files = fatherFile.listFiles();         效果圖:        

Android兩種抽屜寫法NavigationView和Toolbar互動

其實這兩種的效果差不多,只是第一種的抽屜比較高,把Toolbar都蓋住了,看不到Toolbar上三道杆的動畫;另一種嘛,就是抽屜在Toolbar下方,三道杆變成箭頭的動畫可以完整展現。來先看效果圖。 第一種: 第二種: 第一種寫法非常簡單,不用

BZOJ4196[NOI2015] 軟體包管理樹鏈剖分

點此看題面 大致題意: 有nnn個軟體包,它們的依賴關係形成一棵樹。現在,問你安裝或解除安裝一個軟體包,會影響多少個軟體包的安裝狀態。 樹鏈剖分 這道題應該是 樹鏈剖分 演算法比較入門的題目吧。 Link 對於安裝操作 我們對安裝和解除安裝兩種操作分別

HD檔案管理 v0.1.3----- 一款介面簡約,功能強大的免費檔案管理Android

Android平臺上具有完整功能的檔案管理,漂亮的UI介面設計以及良好的使用者體驗。 支援android 1.5及以上平臺 包括: * 將Linux平臺上最流行的圖示集之一 Faenza 作為檔案管理

安全工具帳密管理Account-Manager

執行環境 軟體介紹   現在我們的生活已經被各種各樣的賬號密碼纏繞,就本人而言,已經有近百個帳密需要記憶,這是很恐怖的事情   你是否仍在苦惱如何儲存這些帳密?   記錄到

Android 程式碼開啟系統自帶的檔案管理不是單純的獲取檔案路徑

網上搜索的辦法基本上都是下面這種: public void openFileExplorer(){ Intent intent=new Intent(Intent.ACTION_

搭建開源的web檔案管理eXtplorer

下載: wget https://extplorer.net/attachments/download/77/eXtplorer_2.1.11.zip 解壓: unzip eXtplorer_2.1.11.zip -d extplorer 複製到站點根目錄: \cp -a extpl

轉自 老羅 Android應用程式資源管理Asset Manager的建立過程分析

原文地址在 http://blog.csdn.net/luoshengyang/article/details/8791064 原創老羅,轉載請說明     在前面一篇文章中,我們分析了Android應用程式資源的編譯和打包過程,最終得到的應用程式資源就與

181221VC++ 加油站管理系統SQL+觸發器原始碼

原始碼下載簡介 VC++ 寫的中小型加油站管理系統,MSSQL2000+觸發器,含創庫指令碼和資料庫檔案。   系統完成八大功能:工作人員管理、油庫資訊管理、油品型別管理、會員管理、新增進貨記錄、新增銷售記錄、庫存查詢、帳目管理。   附加資料庫後在執行彈出的對話方塊中輸入SQL連線資訊,然

LinuxCentos之“任務管理”監控工具

alt fff dcb RoCE mst cfa http images 圖片 linux 運維中經常需要查看系統進程、CPU、內存、磁盤、網絡等,可用不同的命令查看,但是多有不便。其實,也可以采用類似Windows“任務管理器”的工具,來滿足運維工作的需求。類似的工具有t

Android超級手電筒專案總結

一、專案教程連結:http://study.163.com/course/courseMain.htm?courseId=897003 與教程原始碼略有不同。 二、涉及功能點: 1.控制閃光燈實現手電筒的功能; 2.實現螢幕上燈光圖的交替閃爍; 3.使用閃光燈的亮與滅傳送

18、android中呼叫系統自帶檔案管理並返回選中檔案的路徑

思路: 通過Android API呼叫系統自帶的檔案瀏覽器選取檔案獲得URI,然後將URI轉換成file,從而得到file。 import android.annotation.SuppressLint;import android.app.Activity;impo

Android13.0 UI開發——列表控件RecyclerView的橫向布局排列實現

andro 上海市 tro source 構造 類繼承 ima libs ted 1.0 新建項目,由於ListView的局限性,RecyclerView是一種很好取代ListView的控件,可以靈活實現多種布局。 2.0 新建項目RecyclerviewTest,目錄如下

Android15.0 UI開發——列表控件RecyclerView的網格布局排列實現

dir test pro 繼承 http 香港 bin too app 1.0 列表控件RecyclerView的網格布局排列實現,關鍵詞GridLayoutManager。 LinearLayoutManager 實現順序布局 GridLayoutManager 實現網格

ANDROID中呼叫檔案管理並返回選中檔案的路徑

package com.panhouye.selectfile; import android.annotation.SuppressLint; import android.app.Activity; import android.content.ContentUris; import android.c

AndroidFirebase配置與使用

Firebase是一個支援實時資料庫管理、雲端儲存、推送分發、事件統計、身份驗證等功能的強大的後臺,常用於各個平臺的開發中。 在Android開發中,使用Firebase作為自己的app的後臺主要可以分為以下幾步: 為你的app配置Firebase

Entity Framework6 with Oracle可實現code first

ocs driver 版本 nag model oracl 新的 vid req Oracle 已在2014年底提供對EF6的支持。以前只支持到EF5。EF6有很多有用的功能 值得升級。這裏介紹下如何支持Oracle 一.Oracle 對.net支持的一些基礎知識了解

AMQ之JMS Mesage structureJMS消息結構

api 兼容 ctu 標識 提供商 nbsp 連接 特定 ext Δ消息體:JMS API 定義了5種消息格式也叫消息類型,可以使用不同形式發送和接收數據,並可以兼容現有的消息格式 TextMessage,MapMessage,ByteMessage,StreamMessa

HDOJ3341Lost's revengeAC自動機,DP

res n) trie hdoj 字母 div 其中 func color 題意:給出一個n個模式串,一個目標串,問把目標串重新排位最多能產生多少個模式串,可以重疊且所有串只包含A C G T。 n<=10,len[i]<=10 len(s)<=40 C

C++最近公共祖先LCATarjan離線算法&& 洛谷P3379LCA模板

target sizeof add 例題 開始 實現 再看 根節點 strong 1.前言   首先我們介紹的算法是LCA問題中的離線算法-Tarjan算法,該算法采用DFS+並查集,再看此算法之前首先你得知道並查集(盡管我相信你如果知道這個的話肯定是知道並查集的),