Android文件查看与读取(一)

Android 文件查看与读取(一)

 

请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) 

 

查看指定文件路径下的文件列表,选择某文件并读取该文件内容。其中用到的xml控件有:ListView、Button…

 

1、创建选择文件夹的布局文件(activity_selectfloder.xml)

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SelectFloderActivity" > 

    <LinearLayout  
	    android:orientation="vertical"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    android:layout_gravity="center"
	    >
	    
	    <ListView
	        android:id="@+id/listView"
	        android:layout_gravity="center"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	         >
	
	    </ListView>
	</LinearLayout>

</RelativeLayout>

2、创建选择文件的布局文件(activity_selectfile)

a)       比起上一个布局文件,该文件只多了4个Button,4个Button分别加上android:layout_weight="1",以保证4个Button权重一致并均匀占满整个父空间。

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SelectFloderActivity" > 

    <LinearLayout  
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
	    <LinearLayout  
	        android:orientation="horizontal"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:layout_gravity="center_horizontal">
	   		<Button
		        android:id="@+id/AllCheck_Button"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_weight="1" 
		        android:text="全选" /> 
		    <Button
		        android:id="@+id/InvertCheck_Button"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content" 
		        android:layout_weight="1" 
		        android:text="反选" /> 
		    <Button
		        android:id="@+id/CancalCheck_Button"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"  
		        android:layout_weight="1" 
		        android:text="取消" /> 
		    <Button
		        android:id="@+id/OK_Button"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"  
		        android:layout_weight="1" 
		        android:text="确定" /> 
	        
	    </LinearLayout>
	    
		    <ListView
		        android:id="@+id/listView"
		        android:layout_width="match_parent"
		        android:layout_height="match_parent" 
		        android:layout_gravity="center"  >
		    </ListView>
		    
		    
	</LinearLayout> 
    

</RelativeLayout>


3、创建查看文件夹类(SelectFloderActivity)

a)       首先将ListView控件实例化

b)       新建数组适配器,指定适配器样式为android.R.layout.simple_list_item_1

c)       新建文件File mFolder,传入参数Environment.getExternalStorageDirectory()和”xx”,得到SD外部文件的根目录下的”xx”的文件对象mFolder。

d)       新建文件数组,由mFolder.listFiles()函数得到mFolder文件下的文件列表

e)       将该文件列表下的文件一一添加到适配器上

f)        将适配器加载到ListView上

g)       最后设置ListView的点击事件。点击事件触发时,将跳转到SelectFileActivity,并且将选择的文件对象传递过去。由于这次传递的是个对象,所以我们借用android.os.Bundle对象封装数据的能力,调用Bundle.putSerializable(…,…)函数

 

package com.example.engineering7.Activity;

import java.io.File; 
import com.example.engineering7.R; 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class SelectFloderActivity extends Activity {


	private ListView listView;
	private ArrayAdapter  adapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_selectfloder); 
 
		listView = (ListView) findViewById(R.id.listView);

		// 适配器
		adapter = new ArrayAdapter (this,android.R.layout.simple_list_item_1);
		
		//新建系统根目录下"工程机械手持数据采集存储文件"的文件
		File mFolder=new File(Environment.getExternalStorageDirectory(),"工程机械手持数据采集存储文件");
		
		//返回该文件下的文件和文件夹列表
		final File[] files = mFolder.listFiles();
		
		//将其添加到适配器中
		for (int i = 0; i < files.length; i++) {
			adapter.add(files[i].getName()); 
		} 
		
		//将适配器添加到listView
		listView.setAdapter(adapter); 
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView  arg0, View arg1, int arg2,
				long arg3) { 
					// TODO Auto-generated method stub 
					
					//Activity跳转兼传值
					Intent i = new Intent();
					//将文件绑定在Bundle中传递到另外一个Activity中
					Bundle bundle = new Bundle();
					bundle.putSerializable("file", files[arg2]);
					i.putExtras(bundle); 
					
					i.setClass(SelectFloderActivity.this, SelectFileActivity.class);
					startActivity(i);
				} 
				
		});
		
		
	}
 

}

4、创建选择文件类(SelectFileActivity)

a)       首先通过Intent.getSerializableExtra()函数,取得传递过来的文件对象mflie

b)       ListView控件实例化,Button控件实例化

c)       新建数组适配器,指定适配器样式为带多选框Checkbox:android.R.layout.simple_list_item_multiple_choice

d)       同样由mflie.listFiles()函数得到mflie文件下的文件列表

e)       将该文件列表下的文件名用Sting.substring(…,..)去掉后4个字符,在添加到适配器上

f)        将适配器加载到ListView上

g)       设置ListView的选择模式为多选

h)       设置Button的监听器

i)         全选按钮的监听器下,遍历所有adapter.getCount(),用ListView.setItemChecked(…,… )函数将所有的Checkbox设为true

j)         取消按钮的监听器下,同样遍历所有,将所有的Checkbox设为flase

k)       反选按钮的监听器下,同样遍历所有,用ListView.isItemChecked(id)判断某id的选择状态,然后将其反选

l)         确认按钮的监听器下,同样遍历所有,将所有选择Check为true的文件和id都添加到文件集合ArrayList<File>和整型集合ArrayList<Integer>,并将这两个集合传递到下一个Activity中。

 

package com.example.engineering7.Activity;

import java.io.File;
import java.util.ArrayList; 
import android.R.integer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView; 
import com.example.engineering7.R;

public class SelectFileActivity extends Activity {

	private ListView listView;
	private ArrayAdapter  adapter;
	
	private Button AllCheckButton;
	private Button InversCheckButton;
	private Button CancelButton;
	private Button OkButton;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_selectfile); 
		 
		//取得传递过来的文件
		Intent mIntent = this.getIntent();
		File mflie=(File) mIntent.getSerializableExtra("file"); 
		
		listView = (ListView) findViewById(R.id.listView);

		// 适配器  带CheckBox的适配器
		adapter = new ArrayAdapter (this,android.R.layout.simple_list_item_multiple_choice);
		
		//返回该文件下的文件和文件夹列表
		final File[] files = mflie.listFiles();
		//将其添加到适配器中
		for (int i = 0; i < files.length; i++) {
			//得到文件名
			String s = files[i].getName();
			//将文件名的最后4个字符(.txt)去掉
			s = s.substring(0, s.length()-4);
			adapter.add(s); 
		} 
		
		listView.setAdapter(adapter); 
		
		//设置多选
		listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		
		
		AllCheckButton  = (Button) findViewById(R.id.AllCheck_Button);
		InversCheckButton  = (Button) findViewById(R.id.InvertCheck_Button);
		CancelButton  = (Button) findViewById(R.id.CancalCheck_Button);
		OkButton  = (Button) findViewById(R.id.OK_Button);
		
		//全选按钮的监听器
		AllCheckButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				for (int i = 0; i < adapter.getCount(); i++) {
					listView.setItemChecked(i, true); 
				}
				
			}
		});
		
		//反选按钮的监听器
		InversCheckButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				for (int i = 0; i < adapter.getCount(); i++) {
					
					if (!listView.isItemChecked(i)) {
						listView.setItemChecked(i, true); 
					}else {
						listView.setItemChecked(i, false); 
					}
					
				}
				
			}
		});
		
		//取消按钮的监听器
		CancelButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				for (int i = 0; i < adapter.getCount(); i++) {
					listView.setItemChecked(i, false); 
				}
				
			}
		});
		
		//确认按钮的监听器
		OkButton.setOnClickListener(new OnClickListener(
				) {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				ArrayList<File> mFiles=new ArrayList<File>();
				ArrayList<Integer> nums=new ArrayList<Integer>();
				
				for (int i = 0; i < adapter.getCount(); i++) {
					
					if (listView.isItemChecked(i)) {  
						
						mFiles.add(files[i]);
						nums.add(i);
						
					}
					
				}
				 
				Intent mIntent = new Intent();
				
				Bundle bundle = new Bundle();
				bundle.putSerializable("file", mFiles);
				bundle.putSerializable("num", nums);
				mIntent.putExtras(bundle); 
				
				mIntent.setClass(SelectFileActivity.this, DisplayBackActivity.class);
				
				startActivity(mIntent);
				
			}
		}); 
	
		 
		
		
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView  arg0, View arg1, int arg2,
				long arg3) { 
				// TODO Auto-generated method stub
//				
//				Intent i = new Intent();
//				
//				Bundle bundle = new Bundle();
//				bundle.putSerializable("file", files[arg2]);
//				i.putExtras(bundle); 
//				
//				i.setClass(SelectFileActivity.this, DisplayBackActivity.class);
//				startActivity(i);
				 
			}
		});
		
	}
 
	
}

5、AndroidManifest.xml添加权限

 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

 

请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) 

                                                                                                    by 2015.1.29 早


  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值