Android学习笔记:文件读取与ListView

来源:互联网 发布:工信部证书有用吗 知乎 编辑:程序博客网 时间:2024/04/30 17:31

本周的作业要求还是挺正常的

 

编写一个程序,完成如下功能:

1.使用文本文件描述若干学生的姓名、学号、年龄、性别等基本信息。

2.把上述的文本文件拷贝到手机的内存储器或外存储器中。

3.读取文本文件,使用ListView显示学生的姓名列表。

4.单击ListView的某个条目,显示对应学生的学号、年龄、性别等详细信息。

 

总体学习要点:

1.Android对文件的读取

2.ListView的使用

 

效果图:

我手上恰好有一份我协会的招新名单,正好拿去作为导入的文件。

 

读取student文件出来的效果



实现步骤:

一.文件读取

1.Java的文件读取

假设我们有一个文件流 名字叫做StdInfo 指向对应的student.txt 那么将里面的字符串提取出来,存在ArrayList<String>中通过以下代码实现

Scanner input = new Scanner(StdInfo, "utf-8");while (input.hasNext()) {//将读取出来的数据文件ArrayList<String> SubInfo = new ArrayList<String>();String Name = input.next();String Spec = input.next();String QQ = input.next();String Phone = input.next();SubInfo.add(Name);SubInfo.add(Spec);SubInfo.add(QQ);SubInfo.add(Phone);InfoName.add(Name);Info.add(SubInfo);}


2.Android对文件的读取

Android读取文件 可以分成两种情况

一种是读取程序以外的其他地方的文件,大部分情况是储存卡上的其他文件

另一种是读取程序内部的资源文件

我使用的是读取程序内部的资源文件,因为在Android模拟器里面比较难实现读取储存卡内容

我了解到 Android程序要读取任意类型的文件比如这次的student.txt,可以通过 Resources resources = this.getResources(); 的方法

只要在工程的目录下的res文件夹下新建一个叫做raw的文件夹,放进里面的任意文件 将会在编译的时候被程序识别为内部资源文件 之后就可以通过StdInfo = resources.openRawResource(R.raw.student); 去使得StdInfo指向这个raw文件下的student.txt文件

如图

这个时候 读取文件应该没多大问题了。

二.使用ListView

ListView是上面效果图中 用列表方式显示数据的一种方式

在实例化一个ListView之后,可以通过listview.add(String)的方式添加子选项。

通过看完整个部分的代码,估计容易明白。


ShowInfo.java

package com.example.studentinfo;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.util.ArrayList;import java.util.Scanner;import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity;import android.content.res.Resources;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.ListView;import android.widget.Toast;@SuppressWarnings("unused")public class ShowInfo extends Activity {public String FileName = "Student.txt";// 建立一个泛型ArrayList数组 InfoName存名字 Info存其他信息public ArrayList<String> InfoName = new ArrayList<String>();public ArrayList<ArrayList<String>>Info=new ArrayList<ArrayList<String>>();public ListView listview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.startpage);ReadTxt();listview = (ListView) this.findViewById(R.id.StdInfo);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, InfoName);listview.setAdapter(adapter);listview.setOnItemClickListener(new OnItemClickListener(){@SuppressLint("ShowToast")@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {Toast toast=Toast.makeText(getBaseContext(),""+Info.get(arg2), 1000);toast.show();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.show_info, menu);return true;}@SuppressLint("ShowToast")public void ReadTxt() {Resources resources = this.getResources();InputStream StdInfo = null;try {// 用InputStream方式读取保存在 /res/raw 下的原始文件StdInfo = resources.openRawResource(R.raw.student);if (StdInfo.available() == 0)return;if (StdInfo != null) {//用utf-8读取文件Scanner input = new Scanner(StdInfo, "utf-8");while (input.hasNext()) {//将读取出来的数据文件ArrayList<String> SubInfo = new ArrayList<String>();String Name = input.next();String Spec = input.next();String QQ = input.next();String Phone = input.next();SubInfo.add(Name);SubInfo.add(Spec);SubInfo.add(QQ);SubInfo.add(Phone);InfoName.add(Name);Info.add(SubInfo);}}} catch (Exception e) {Toast.makeText(this, "文件不存在", 1000).show();}}}

startpage.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=".ShowInfo" >    <ListView        android:id="@+id/StdInfo"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true" >    </ListView></RelativeLayout>




原创粉丝点击