学到这里我们就想到了绝对不能动的R.java文件,对于安卓程序员来说,那是个禁区,是决定不能改动的,那有没有想狮子口拔牙想要把它读出来呢,来我们来试一下。
资源文件的ID都生成在R文件,通过import android.content.res.Resources;将之读出,获取id方法为:
r=super.getResources();//操作资源
InputStream input=r.openRawResource(R.raw.mybook);
现在我们自res文件下新建一个raw文件来存出一个资源 mybook.txt,我们实现将之读出,注意定义文本格式选择utf-8,否则读出会是乱码。
将布局文件设为utf-8,右键properties
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:id="@+id/msg" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Activity代码:
public class MainActivity extends Activity { private TextView text=null; private Resources r=null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.text=(TextView)super.findViewById(R.id.msg); r=super.getResources();//操作资源 InputStream input=r.openRawResource(R.raw.mybook);//读取ID Scanner scan=new Scanner(input); StringBuffer buf=new StringBuffer();//读取数据 while(scan.hasNext()){ //循环读取 buf.append(scan.next()).append("\n"); } scan.close(); try { input.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.text.setText(buf.toString()); }
实现效果为:
- DOM
使用文件存储固然方便,但是如果数据多了以后,就不太好管理了,现在我们把数据存到xml文件形式进行存储,然后这个格式必须进行解析,解析就要用到DOM解析。
DOM解析虽然我们在android中并不推荐使用,但是这并不代表着不可以实现。dom的原理是把xml文件的各种部分都看成是节点,所有的节点因为层级关系最后形成了一颗节点树。而DOM的解析方式便是在内存中生存这棵树,并允许用户进行相关的操作。
现在我们实现一个目前我们第一个人机交互保存、
就是用户输入资料,程序保存
并必要时可以读出供用户阅览
定义DOM,也就是布局文件去解析:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/TableLayout1" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名" /> <EditText android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/邮箱" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <EditText android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存" /> </TableRow> </TableLayout>
Activity代码:
public class MainActivity extends Activity { private EditText name = null ; private EditText email = null ; private Button but = null ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); this.name = (EditText) super.findViewById(R.id.name) ; this.email = (EditText) super.findViewById(R.id.email) ; this.but = (Button) super.findViewById(R.id.but) ; this.but.setOnClickListener(new OnClickListenerImpl()) ; } private class OnClickListenerImpl implements OnClickListener{ @Override public void onClick(View v) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 不存在不操作 return; // 返回到程序的被调用处 } File file = new File(Environment.getExternalStorageDirectory() + File.separator + "eedata" + File.separator + "ee.xml"); // 要输出文件的路径 if (!file.getParentFile().exists()) { // 父路径不存在 file.getParentFile().mkdirs() ; // 创建父文件夹 } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ; DocumentBuilder builder = null ; try { builder = factory.newDocumentBuilder() ; } catch (ParserConfigurationException e) { e.printStackTrace(); } Document doc = null ; doc = builder.newDocument() ; // 创建一个新的文档 Element addresslist = doc.createElement("addresslist") ; Element linkman = doc.createElement("linkman") ; Element name = doc.createElement("name") ; Element email = doc.createElement("email") ; name.appendChild(doc.createTextNode(MainActivity.this.name.getText() .toString())); email.appendChild(doc.createTextNode(MainActivity.this.email.getText() .toString())); linkman.appendChild(name) ; linkman.appendChild(email) ; addresslist.appendChild(linkman) ; doc.appendChild(addresslist) ; TransformerFactory tf = TransformerFactory.newInstance() ; Transformer t = null ; try { t = tf.newTransformer() ; } catch (TransformerConfigurationException e) { e.printStackTrace(); } t.setOutputProperty(OutputKeys.ENCODING, "GBK") ; DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(file) ; try { t.transform(source, result) ; } catch (TransformerException e) { e.printStackTrace(); } } } }
实现效果如下:
接下来我们来读取刚才我们保存的文件:
定义类似的布局文件:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/TableLayout1" 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=".MainActivity" > <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邮箱" /> <TextView android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读取" /> </TableRow> </TableLayout>
Activity代码:
public class MainActivity extends Activity { private TextView name = null; private TextView email = null; private Button but = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); this.name = (TextView) super.findViewById(R.id.name); this.email = (TextView) super.findViewById(R.id.email); this.but = (Button) super.findViewById(R.id.but); this.but.setOnClickListener(new OnClickListenerImpl()); } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 不存在不操作 return; // 返回到程序的被调用处 } File file = new File(Environment.getExternalStorageDirectory() + File.separator + "eedata" + File.separator + "ee.xml"); // 要输出文件的路径 if (!file.exists()) { // 文件不存在 return; } DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } //定义document类对象接口,通过DocumentBuilder进行DOM树转化 Document doc = null; try { doc = builder.parse(file); // 通过文件转化文档,读取指定路径的xml文件 } catch (SAXException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } //查找节点 NodeList nl = doc.getElementsByTagName("linkman"); for (int x = 0; x < nl.getLength(); x++) { Element e = (Element) nl.item(x); // 取得元素 MainActivity.this.name.setText(e.getElementsByTagName("name") .item(0).getFirstChild().getNodeValue()); MainActivity.this.email.setText(e.getElementsByTagName("email") .item(0).getFirstChild().getNodeValue()); } } } }
这一章涉及到很多知识,大家需要好好消化
实现效果如图:
相关推荐
本篇文章将深入探讨如何在Android中使用Pull解析器进行XML文件的解析和存取。 一、XML解析器简介 在Android中,有两种主要的XML解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。SAX是事件驱动...
在Android系统中,文件存取是一项基础且重要的功能,它涉及到应用程序如何保存和读取数据。本篇将详细探讨Android的内部存储、外部存储(包括SD卡存储)以及简单的文件管理,尤其是通过对话框实现的文件操作。 首先...
### Android 文件存取示例:基础文件操作 #### 概述 本文档旨在提供一个关于Android平台上基础文件操作的示例教程。对于那些希望了解如何在Android应用中进行简单文件读写操作的开发者来说,本教程将是非常有用的...
在Android应用开发中,文件存取、数据库编程和UI编程是至关重要的组成部分。这份资料集包含两个PDF文档,分别详细讲解了这些主题。下面将分别介绍这三个关键领域的主要知识点。 一、Android文件存取 在Android系统...
Java 解析 XML 文件的 DOM 和 SAX 方式 Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种...
### 新版Android开发教程+笔记12--文件存取、数据库编程 #### 文件存取编程基础 在Android应用开发过程中,文件存取是一项基本而重要的功能。它允许开发者存储和检索用户数据,如配置文件、图像文件等。下面将详细...
总结来说,Android中解析XML时,DOM适用于小型且需要频繁访问的文件,SAX和Pull解析适合大型文件或资源有限的环境。选择哪种解析方式取决于具体应用场景和性能需求。理解并熟练掌握这三种解析方式,将有助于提升...
在Android开发中,文件存取和数据库编程是两个至关重要的概念。它们构成了应用程序处理数据的基础,使得应用能够存储、读取、更新和删除用户数据。本文将深入探讨这两个主题,帮助开发者更好地理解和掌握Android平台...
在Android应用开发中,文件存取和数据库编程是两个至关重要的环节。本教程将深入探讨这两个主题,帮助开发者更好地理解如何在Android系统中管理和存储数据。 ### 文件存取 #### 1. 存储类型 Android提供了多种...
Android文件存取与数据库编程知识,文件操作主要是读文件、写文件、读取静态文件等,同时还介绍了创建添加文件内容并保存,打开文件并显示内容;数据库编程方面主要介绍了SQLite数据库的使用、包括创建、删除、打开...
在这个主题中,我们将深入探讨如何在Android环境下使用SQLiteDatabase来直接存取数据和图像。 首先,要使用SQLite数据库,我们需要创建一个SQLiteOpenHelper的子类。这个类有两个关键方法:`onCreate()` 和 `...
3. **文本文件的创建与存取**: - **创建文本文件**: - 首先,创建`FileSystemObject`实例,然后调用`CreateTextFile`方法,传入文件名(可以带路径),可选参数`overwrite`决定是否覆盖已存在的文件,`unicode`...
1. DOM解析:DOM(文档对象模型)解析器将整个XML文件加载到内存中,形成一个树形结构。这种解析方式适用于小规模的XML文件,因为其消耗的内存较大。例如,`DocumentBuilderFactory` 和 `DocumentBuilder` 可用于...
3. **更新(Update)**:修改文件中已存在的数据。如果需要更新某条记录,我们需要找到这条记录在文件中的位置,然后覆盖原有数据。为了确保数据的一致性,通常需要先将整个文件读入内存,修改后写回,或者使用临时...
3. **DOM解析**:使用DOM解析,我们可以获取XML文档的节点信息,包括根节点、子节点、属性等,并能对它们进行操作。例如,通过`创建XML文档对象`、`加载XML文件`、`查找指定元素`、`获取属性值`等命令,可以实现对...
### Linux系统文件存取管理 #### 一、Linux系统简介 Linux是一种自由开源的操作系统,其内核由Linus Torvalds于1991年创建。作为一个多用户多任务的分时操作系统,Linux能够支持多个用户同时进行操作,并且能够...
在Android平台上,对TXT文件进行保存和读取是常见的数据持久化操作...通过合理地运用这些知识,开发者可以有效地在Android应用中实现TXT文件的存取功能。在实际开发中,还要结合具体的业务需求,进行相应的优化和调整。
在Android应用开发中,文件存取和数据库编程是两个至关重要的概念。对于任何需要持久存储数据的应用来说,理解和掌握这两个方面都是必要的。本教程将深入探讨Android系统中的文件存储机制以及SQLite数据库的使用。 ...