当前位置:首页 >> IT/计算机 >>

Lesson02--文件读写与XML


第二章
文件读写与 XML

1

本章目标
?

掌握文件的读写
掌握 XML 文件的元素读取

?

2

如何读写文本文件
?

读写一个文件的步骤:
1
2
创建一个文件流

创建相应的读写器(reader and writer)

3 4 5

执行读写操作

关闭读写器(reader and writer)

关闭文件流

3

读取文本文件
?

读取文本文件:
创建一个文件流 FileStream myfs = new FileStream(path, FileMode.Open, FileAccess.Read); 创建一个读取器 StreamReader mySr = new StreamReader(myfs); content = mySr.ReadToEnd(); 将流从当前位置读到末尾 txtContent.Text = content; mySr.Close(); 关闭 myfs.Close();

演示示例2:TextReader

4

创建文件流
需要引入System.IO命名空间---提供文件操作的类 文件流用于( FileStream类)读写文件
FileStream myfs = new FileStream( path, FileMode.Create); 指定文件路径 指定如何打 开文件 如果文件存在、 则改写旧文件

FileMode枚举 Create:创建一个新文件 Open:指定打开现有文件 CreateNew:新建一个文件 如果文件存在 会发生异常

5

创建写入器
?

文本文件写入器:StreamWriter
StreamWriter mySw = new StreamWriter(myfs); mySw.Write(content); 写入方法 //mySw.WriteLine(content); mySw.Close(); 关闭写入器 写入一行数据的方法 传入文件流

文本文件读取器:StreamReader
StreamReader mySr = new StreamReader(myfs); content = mySr.ReadToEnd(); 读取到文件末尾 传入文件流

//content = mySr.ReadLine(); mySr.Close();
关闭读取器

读取一行

将数据写入文本文件

创建一个文件流 FileStream myfs = new FileStream(path, FileMode.Create, FileAccess.Write); StreamWriter mySw = new StreamWriter(myfs); 创建写入器,写入一个流 mySw.Write(content); 写入操作 mySw.Close(); myfs.Close(); 关闭文件流与写入器

演示示例1:TextReader

7

文本文件不使用文件流的读写
?

StreamWriter允许直接将字符串写入文件
StreamWriter mySw = new StreamWriter(path); mySw.Write(content); 直接指定路径 mySw.Close(); 自动创建文件

StreamReader允许直接读取文件内容
StreamReader mySr = new StreamReader(path); content = mySr.ReadToEnd(); 直接指定路径 txtContent.Text = content; mySr.Close();

演示示例2:TextReader

8

小结
? ? ?

在C盘的根目录下有一个文件Test.txt 请用文件流的方式读取它的所有内容 编写五个基本步骤语句
1、创建一个文件流、指定路径与打开方式。 2、创建一个读取器,指定读取的文件流 3、读取文件中的所有内容 4、关闭读取器 5、关闭文件流

9

文件操作
?
?

文件操作还包括拷贝、移动、删除等等 .NET提供一个File类,提供各种操作文件方法

方法 Exists(string path) Copy(string SourceFilePath, string DestinationFilePath Move (string sourceFileName, string destFileName) Delete(string path)

说明 用于检查指定文件是否存在,该方法返回一 个布尔值 按指定路径的源文件中的内容复制到目标文 件中,如果目标文件不存在,则在指定路径 中新建一个文件 将指定文件移动到一个新的路径

删除指定的文件,如果指定的文件不存在,则 不引发异常

目录操作
?

Directory 类提供对文件夹的拷贝、移动、删除等操作
方法 Exists(string path) Move(string sourceDirName, string destDirName) 说明 用于检查指定文件夹在磁盘上是否存在 用于将文件或目录及其内容移到新位置

Delete(string,Boolean)

删除指定目录,如果bool指定true,则删除子 目录中的所有目录内容。 删除指定的文件,如果指定的文件不存在,则 不引发异常

Delete(string path)

静态类与非静态类
?

File类与Directory类
静态类

public static class File public static class Directory

静态类 用static修饰 只包含静态成员 不可以包含实例成员 使用类名调用静态成员 不能被实例化 不能包含实例构造函数

非静态类 不用static修饰 可以包含静态成员 可以包含实例成员 使用实例对象调用非静态成员 可以被实例化 包含实例构造函数

文件操作
?

FileInfo类
?

FileInfo 类用于典型的操作,如复制、移动、重命名、 创建、打开、删除和追加到文件

?

DirectoryInfo类
?

DirectoryInfo 类用于典型操作,如复制、移动、重命 名、创建和删除目录

?

以上两个类提供的都是实例方法

?

DEMO

TreeView控件
?

通过TreeView控件可以表示一个树形结构

信息主题的 树形结构显示

TreeView

15

TreeView控件的使用
TreeView和TreeNode
属性 Nodes Level SelectedNode 事件 Click AfterSelect 所包含的子节点集合 节点的深度或层次 被选中的节点

?

点击时发生 当节点被选中后发生

16

HTML语言和XML语言
HTML语言的缺陷 如何让用户能够知道标记语言所带的数据信息?

使用XML语言

17

XML语言的优势
轻松的跨平台:各种浏览器,各种操作系统都支持 信息共享:在企业级应用程序中可定义自己的格式,并 能轻松的读写和交互:如CRM(客户关系管理系统) 数据传递:支持各种通道间的数据传输,能在数字电视, 手机,网络传递。是电子商务应用的前提。 数据重用 分离数据和表示:每中数字终端都有不同的显示方式和显 示规范 可扩展 文挡包含定义

18

XML概述
?
?

可扩展标记性语言 XML用于描述数据
描述的内容 一目了然

eXtensible Markup Language <Student> <Name>张靓靓</Name> <Age>20</Age> <Hobby>唱歌歌</Hobby> <!-- --> <Name>周杰杰</Name> <Age>22</Age> <Hobby>耍双节棍棍</Hobby> </Student> 节点区分大小写
19

可自由扩展:加入性 别或者身高…

节点成对出现

XML概述
?

XML的组成
Xml文件开头

根元素/根节点

<?xml version=“1.0” encoding=“UTF-8”?> <DataPacket> <Files> <File arrtname=“useid”/> <File arrtname=“usename”/> </Files> </DataPacket>

Xml 中的元素 Xml 中的元素属性

20

XML示例
编码格式,能显示中 文 <xml version=“1.0“ encoding=“gb2312”?> <data> <userinfo> <username>张三</username> <userpwd>001</userpwd><!-- 用户名称--> </userinfo> <userinfo> <username>李四</username> <userpwd>002</userpwd> </userinfo> <! -<a>ddd</a> <b>ttt</b> --> </data>

行注释

块注释
21

读取XML文件
XmlDocument myXmlencoding="utf-8" = new XmlDocument(); <?xml version="1.0" ?> 需要读取的XML myXml.Load("Student.xml"); <Student> 读取XML文件 <Name>张靓靓</Name> XmlNode student = myXml.DocumentElement; 获取根节点 <Age>20</Age> <Hobby>唱歌歌</Hobby> foreach (XmlNode <!-- --> node in student.ChildNodes ) <Name>周杰杰</Name> { 获取当前节点 switch (node.Name) <Age>22</Age> 当前节点名字 的所有子节点 <Hobby>耍双节棍棍</Hobby> { case "Name": </Student> Console.WriteLine("姓名:{0}",node.InnerText); break; 当前节点的值 … } }

演示示例4:ReadXML

22

读取XML文件
XmlDocument对象表示XML整个文档 XmlNode对象表示XML文件的单个节点
对象 XmlDocument 属性和方法 DocumentElement 属性 ChildNodes 属性 Load()方法 XmlNode InnerText 属性 获取根节点 获取所有子节点 读取整个XML的结构 当前节点的值 说明

Name属性
ChildNodes 属性

当前节点的名字
当前节点的所有子节点

用TreeView解析XML
?

TreeView也是用节点表示数据(改写代码)

pm.Load();//取得频道信息 foreach (RssFeed feed in pm.Profile.Feeds)//按频道循环 { 定义一个TreeView的节点 TreeNode feedNode; feedNode = tvMain.Nodes.Add(feed.DisplayName);

}

foreach (Article atcl in feed.Articles.Values) {//按文章列表循环 feedNode.Nodes.Add(atcl.Title); } 将文章标题显示在一个子节点

将频道标题显示一 个根节点

演示示例6:MyNewsReader
24

树视图控件的使用-选中的节点
?

改写代码
TreeNode node = tvMain.SelectedNode; … if (pm.Profile.Feeds[node.Index].FetchArticles()) { //调用更新指定频道得方法 遍历当前频道中的新闻 UpdateArticlesView(node.Index); }

获取选中节点

获取选中频道 的文章列表

将新闻加入TreeView当前的频道节点 tvMain.BeginUpdate(); //禁止树视图重绘 tvMain.Nodes[feedIndex].Nodes.Clear();

foreach (Article atcl in pm.Profile.Feeds[feedIndex].Articles.Values) { TreeNode node; node = tvMain.Nodes[feedIndex].Nodes.Add(atcl.Title); } //启用树视图重绘 tvMain.EndUpdate();

25

获取选中的节点
?

选中文章节点,将内容显示在WebBrowser
获取频道索引

if (tvMain.SelectedNode.Level == 0) return; int feedIndex = tvMain.SelectedNode.Parent.Index;

获取文章标题作为键值 string articleKey = tvMain.SelectedNode.Text; wbMain.Navigate (pm.Profile.Feeds[feedIndex].Articles[articleKey].Url); 获取URL并指定到WebBrowser

26

总结
? ?

? ?

操作一个文件的五大步骤? 创建文件流时,指定一个文件的打开方式 是创建新文件,FileMode的值是什么? 简述静态类与非静态类的区别? 获取一个XML节点的值的属性是什么?

27


赞助商链接
相关文章:
更多相关标签: