当前位置: 源码素材网 » Android教程 » 详情页

Android 中的目录直读(文件列表读取)例子

  •   时间:2019-02-24
  • 概述:目录直读

本文帖出了一个Android应用中的目录直读程序代码,是一个读取文件列表的例子,可作为Android读取目录及文件的参考代码:

package com.bn.ex7b;
import java.io.File;
//http://www.codesc.net
import com.bn.ex7b.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class Sample7_2_Activity extends Activity
{
String currentPath;//记录当前文件列表的父路径
String rootPath="/";//根目录
String leavePath;//叶子文件
Dialog gmDialog;//声明改名对话框
ListView lv;//ListView控件对象声明
    @Override
    public Dialog onCreateDialog(int id)//创建对话框
    {
    	Dialog result=null;
    	switch(id)
    	{
	    	case 0:
	    		AlertDialog.Builder b=new AlertDialog.Builder(this);
	  		  b.setItems(
	  			null,
	  		    null
	  		   );
	  		  b.setCancelable(false);
	  		  gmDialog=b.create();
	  		  result=gmDialog;
	    	break;
    	}
    	return result;
    }
    @Override
    public void onPrepareDialog(int id, final Dialog dialog)//每次弹出对话框时被回调以动态更新对话框内容的方法
    {
    	switch(id)
    	{
	    	case 0:
	    		dialog.setContentView(R.layout.dialog);
	        	Button bok=(Button)dialog.findViewById(R.id.bOk);
	        	Button bcancel=(Button)dialog.findViewById(R.id.bCancle);
	        	final EditText et=(EditText)dialog.findViewById(R.id.et);
	        	bok.setOnClickListener//确定按钮监听器
	        	(
	        		new OnClickListener()
	        		{
	    				public void onClick(View arg0)
	    				{
	    					String newName=et.getText().toString().trim();//获取新文件名称
	    					//获取修改后的文件路径
	    					File xgf=new File(leavePath);
	    					String newPath=xgf.getParentFile().getPath()+"/"+newName;
	    					xgf.renameTo(new File(newPath));
	    					final File[] files=getFiles(currentPath);//获取根节点文件列表
	    					intoListView(files,lv);//将各个文件添加到ListView列表中
	    					dialog.cancel();
	    				}
	        		}
	        	);
	        	bcancel.setOnClickListener//取消按钮监听器
	        	(
	        		new OnClickListener()
	        		{
	    				public void onClick(View arg0)
	    				{
	    					dialog.cancel();
	    				}
	        		}
	        	);
	        	dialog.setCancelable(true);
	    	break;
    	}
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv=(ListView)Sample7_2_Activity.this.findViewById(R.id.lvwjlb);//获取ListView控件对象
        Button bgml=(Button)this.findViewById(R.id.bgml);//搜索根目录文件按钮
        Button bsf=(Button)this.findViewById(R.id.bsf);//搜索父目录文件按钮
        bgml.setOnClickListener//搜索跟目录文件按钮监听器
        (
        	new OnClickListener()
        	{
				public void onClick(View v) {
					currentPath=rootPath;
					final File[] files=getFiles(currentPath);//获取根节点文件列表
					intoListView(files,lv);//将各个文件添加到ListView列表中
				}
        	}
        );
        bsf.setOnClickListener//搜索父目录文件按钮监听器
        (
        	new OnClickListener()
        	{
				public void onClick(View v) {
					if((currentPath!=null)&&(!currentPath.equals(rootPath)))
					{//如果当前父路径不是rootPath,则点击上翻键,回到上一层目录
						File cf=new File(currentPath);//获取当前文件列表的路径对应的文件
						cf=cf.getParentFile();//获取父目录文件
						currentPath=cf.getPath();//记录当前文件列表路径
						intoListView(getFiles(currentPath),lv);
					}
				}
        	}
        );
    }
    //获取当前目录下的文件列表
    public File[] getFiles(String filePath)
    {
    	File[] files=new File(filePath).listFiles();//获取当前目录下的文件
    	return files;
    }
    //将文件列表添加到ListView中
    public void intoListView(final File[] files,final ListView lv)
    {
    	if(files!=null)//当文件列表不为空时
    	{
    		if(files.length==0)
    		{//当前目录为空
    			File cf=new File(currentPath);//获取当前文件列表的路径对应的文件
				cf=cf.getParentFile();//获取父目录文件
				currentPath=cf.getPath();//记录当前文件列表路径
				Toast.makeText(Sample7_2_Activity.this, "该文件夹为空!!", Toast.LENGTH_SHORT).show();
    		}
    		else
    		{
        		BaseAdapter ba=new BaseAdapter()//创建适配器
            	{
        			public int getCount() {
        				return files.length;
        			}
        			public Object getItem(int position) {
        				return null;
        			}
        			public long getItemId(int position) {
        				return 0;
        			}
        			public View getView(int arg0, View arg1, ViewGroup arg2) {
        				LinearLayout ll=new LinearLayout(Sample7_2_Activity.this);
        				ll.setOrientation(LinearLayout.VERTICAL);//竖直排列
        				ll.setPadding(5, 5, 5, 5);//留白
        				TextView tv=new TextView(Sample7_2_Activity.this);//初始化TextView
        				tv.setTextColor(Color.BLACK);//设置字体颜色
        				tv.setText(files[arg0].getName());//添加文件名称
        			    tv.setGravity(Gravity.LEFT);//左对齐
        			    tv.setTextSize(18);//字体大小
        			    ll.addView(tv);//LinearLayout添加TextView
        				return ll;
        			}
            	};
            	lv.setAdapter(ba);//设置适配器
            	lv.setOnItemClickListener//设置选中菜单的监听器
            	(
          			new OnItemClickListener()
          			{
        					public void onItemClick(AdapterView<?> arg0, View arg1,
        							int arg2, long arg3) {
        						File f=new File(files[arg2].getPath());//获得当前点击的文件对象
        						if(f.isDirectory())//存在分支
        						{
        							currentPath=files[arg2].getPath();
        							File[] fs=getFiles(currentPath);//获取当前路径下所有子文件
        							intoListView(fs,lv);//将子文件列表填入ListView中
        						}
        						else
        						{//弹出对话框,供用户填写新的文件名称
        							leavePath=f.getPath();
        							showDialog(0);
        						}
        					}
          			}
            	);
    		}
    	}
    	else
    	{
    		File cf=new File(currentPath);//获取当前文件列表的路径对应的文件
			cf=cf.getParentFile();//获取父目录文件
			currentPath=cf.getPath();//记录当前文件列表路径
			Toast.makeText(Sample7_2_Activity.this, "该文件夹为空!!", Toast.LENGTH_SHORT).show();
    	}
    }
}

    相关声明:

      若“Android 中的目录直读(文件列表读取)例子”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。