Android 文件查看与读取(一)
请支持原创,尊重原创,转载请注明出处:http://blog.youkuaiyun.com/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.youkuaiyun.com/kangweijian(来自kangweijian的csdn博客)
by 2015.1.29 早