Android文件查看与读取(一)

来源:互联网 发布:mac桌面显示时间 编辑:程序博客网 时间:2024/06/06 01:45

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;@Overrideprotected 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()); } //将适配器添加到listViewlistView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubfor (int i = 0; i < adapter.getCount(); i++) {listView.setItemChecked(i, true); }}});//反选按钮的监听器InversCheckButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubfor (int i = 0; i < adapter.getCount(); i++) {if (!listView.isItemChecked(i)) {listView.setItemChecked(i, true); }else {listView.setItemChecked(i, false); }}}});//取消按钮的监听器CancelButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubfor (int i = 0; i < adapter.getCount(); i++) {listView.setItemChecked(i, false); }}});//确认按钮的监听器OkButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubArrayList<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() {@Overridepublic 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 早


0 0
原创粉丝点击