第7章 目录和文件操作 王德俊 上海交通大学继续教育学院.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

第15章 文件处理技术 变量和数组只能临时存储数据,且数据量很小, 当应用程序终止,数据就会丢失。如果需要将数 据长期存储或者存储大量数据,就需要用到文件。 文件维护的数据通常称为持久数据,存储在计算 机的辅助存储设备中,如磁盘、光盘等。许多程 序都要与外部数据进行交互,如数据库、XML,甚 至文本文件,因此文件操作是软件开发中必不可.
第二章 JAVA语言基础.
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
第20讲 Java的输入与输出流(上) 1/.
目标 运用File类进行文件操作 理解流,标准输入/输出流的概念
在PHP和MYSQL中实现完美的中文显示
第九章 字符串.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
Hadoop I/O By ShiChaojie.
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
第14章 建立網路應用程式 14-1 瀏覽器的建立 14-2 檔案下載器 14-3 寄送電子郵件 14-4 檢查POP 3的電子郵件.
第十三章 文件和注册表操作.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第六章 目录与文件管理 6.1 目录管理 6.2 文件管理 6.3 文件的读写.
第十一章 文件操作 文件的概念 文件的读写 主讲:李祥 时间:2015年10月.
Java程序设计 第18章 二进制I/O.
第九章 Java输入输出系统.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第九章 输入/输出流.
1、了解File类的特点和使用方法 2、掌握字节流和字符流的特点 3、能够使用字节流和字符流进行文件的读写和终端操作
2018/12/3 面向对象与多线程综合实验-输入输出流 教师:段鹏飞.
第14章 伺服器檔案、電子郵件處理與Ajax 14-1 資料夾與檔案操作 14-2 文字檔案的讀寫 14-3 電子郵件與附檔處理
走进编程 程序的顺序结构(二).
辅导课程六.
文件流. 文件流 文件流 Stream FileStream BufferedStream MemoryStream NetworkStream …… 所有流的抽象 Stream FileStream BufferedStream MemoryStream NetworkStream ……
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
程式設計 博碩文化出版發行.
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
2019/1/13 面向对象与多线程综合实验-输入输出流 教师:段鹏飞.
第 十二 章 C# 中的文件处理.
第5章 文件I/O操作   管理和读写文件信息的功能将使得应用程序的用途更多,利用C#语言编程能很容易实现这些操作。本章详细介绍了C#语言为我们提供的多个可以用于文件I/O操作的类及其使用方法。另外,流也是本章需要理解的一个重要概念,通过它对文件读写更加灵活方便。
第12章 文件操作 12.1 文件和System.IO模型概述 12.2 System.IO模型 12.3 文件夹和文件操作
如何生成设备节点 广州创龙电子科技有限公司
Ch02-基礎語法.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第五讲 JSP中的文件操作(1) 教学目的 本讲主要讲述JSP中使用Java输入、输出流实现文件的读写 操作 。 知识要点
第七章 操作符重载 胡昊 南京大学计算机系软件所.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
第9章 文件 学习目的与要求: 熟练掌握文件指针的使用 掌握与文件相关的函数 能够利用文件相关函数实现各种操作.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
手机移动设备嵌入式C++ 第七章 C++的I/O流库.
Java變數 2014/6/24.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
第二章 Java语法基础.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
第二章 类型、对象、运算符和表达式.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Review 1~3.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
第6章 Java输入输出流与文件操作.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
Python 环境搭建 基于Anaconda和VSCode.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第2章 Java语言基础.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
openFileDialog1.ShowDialog() 對話匣
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第十四讲 文件流与 输出输入重载.
第二章 Java基础语法 北京传智播客教育
顺序结构程序设计 ——关于“字符串”和数值.
Presentation transcript:

第7章 目录和文件操作 王德俊 上海交通大学继续教育学院

第7章 目录和文件操作 7.1 目录管理 7.2 文件管理 7.3 文本文件的读写 7.4 二进制文件的读写 基于文件整体操作的I/O类 第7章 目录和文件操作 7.1 目录管理 7.2 文件管理 7.3 文本文件的读写 7.4 二进制文件的读写 基于文件整体操作的I/O类 基于文件信息的I/O流类

7.3 文本文件的读写 使用StreamReader类和StreamWriter类实现对文本文件的读 写操作 7.3.1 读文本文件 7.3.2 写文本文件

7.3.1 读文本文件 使用StreamReader类实现文本文件的读取 例如: StreamReader srFile = new StreamReader(“C:\\MyFile.txt");

7.3.1 读文本文件 StreamReader类定义了10个版本的重载构造函数,其中常用两 种: public StreamReader(string path) public StreamReader(string path, System.Text.Encoding encoding) 其中,参数path为文件路径,encoding用于设置编码方式,如果文件 中包含中文,该参数一般设置为System.Text.Encoding.Default。

7.3.1 读文本文件 StreamReader类常用方法有: BaseStream.Seek()方法:指定在输入流中读取字符的位置 ReadLine方法:从文件中读入下一行字符 Close方法:关闭打开的文件 ReadToEnd方法:从文件的当前位置读到文件的末尾

BaseStream.Seek()方法 用于指定在输入流中读取字符的位置,原型如下: 其中, 例: long BaseStream.Seek(long offset, SeekOrigin origin) 其中, origin:用于设置在输入流中读取字符的初始位置,其可能取值包括SeekOrigin.Begin、SeekOrigin.Current和SeekOrigin.End,分别表示初始位置为输入流的开始处、当前位置和流的末尾; offset:相对于origin参数的字节偏移量,初始位置+offset就是在输入流中读取字符的真正位置。 例: StreamReader reader = new StreamReader(@"D:\test.txt"); reader.BaseStream.Seek(10, SeekOrigin.Begin);

Read()方法 该方法用于读取输入流中的下一个字符,同时使输入流的当 前位置加1。该函数返回字符的ASCII码的int型整数。 例如: string path = @"D:\test.txt"; StreamReader reader; reader = new StreamReader(path, System.Text.Encoding.Default); int ascii = reader.Read(); //获得字符的unicode的int32编码 char ch = (char)ascii; //转换为字符 while (ascii != -1) { richTextBox1.Text += ch.ToString(); ascii = reader.Read(); ch = (char)ascii; } reader.Close();

ReadLine()方法 该方法用于从输入流中读取一行字符,并将结果以字符串返回。 例如,下面代码从文本文件“毛主席诗词2.txt”中的第10字符开始,逐行读取文本,并将结果显示在richTextBox1控件中 string path = @"D:\VS2008\第7章\Files\毛主席诗词2.txt"; StreamReader reader = new StreamReader(path, System.Text.Encoding.Default); reader.BaseStream.Seek(10, SeekOrigin.Begin); string line = reader.ReadLine(); while (line != null) { richTextBox1.Text += line + "\n"; line = reader.ReadLine(); } reader.Close();

补充示例:StreamFileAccess 用“打开文件对话框”选择文件,打开并显示全部内容

private void Button1_Click(System. Object sender, System private void Button1_Click(System.Object sender, System.EventArgs e) { OpenFileDialog1.InitialDirectory = "C:\\"; OpenFileDialog1.Filter = "text files (*.txt)|*.txt|All Files (*.*)|*.*"; if (OpenFileDialog1.ShowDialog() == DialogResult.OK) StreamReader sr = new StreamReader(OpenFileDialog1.FileName); MessageBox.Show(sr.ReadToEnd()); // 从文件的当前位置读到文件的末尾 sr.Close(); }

7.3.2 写文本文件 使用StreamWriter类实现文本文件的写入 例如: StreamWriter swFile = new StreamWriter (“C:\\MyFile.txt");

7.3.2 写文本文件 StreamWriter类常用方法有: Write方法:向文件中写入一个字符串 WriteLine方法:向文件中写入一个字符串和一个换行符(写入一行) Close方法:释放StreamWriter对象,并关闭打开的文件

Write方法 该方法用于向输出流写入字符串、字符、字符数组、实数和整 数等。它一共有17个重载版本,常用: public override void Write(string value) public override void Write(char value) public override void Write(char[ ] buffer) public override void Write(double value) public override void Write(float value) public override void Write(decimal value) public override void Write(int value) public override void Write(long value)

Write方法(续) 例如: 注意:Write()方法执行完后,不会自动添加回车换行符。如果 需要,必须显式添加。 string path = @"D:\test3.txt"; StreamWriter writer = new StreamWriter(path, false, System.Text.Encoding.Default); writer.Write("aaaaaaa"); writer.Write("BBBBB"); //这两个语句相当于回车换行的作用 writer.Write('\r'); writer.Write('\n'); writer.Write("ccccc"); writer.Close(); 注意:Write()方法执行完后,不会自动添加回车换行符。如果 需要,必须显式添加。

WriteLine方法 与Write()方法基本相同,用于将字符串、字符、字符数组、实 数和整数等写入输出流中。 主要不同之处在于,WriteLine()方法执行后会自动添加一个回 车换行符“\r\n”,而Write()方法没有。

补充示例:TxtRW 在一个文本框TxtFileName中输入文件路径 然后将文本框TxtFile中的内容写入指定的文件

private void BtnWrite_Click(System.Object sender, System.EventArgs e) { StreamWriter swFile = new StreamWriter(TxtFileName.Text); swFile.Write(TxtFile.Text); swFile.Close(); } private void BtnRead_Click(System.Object sender, System.EventArgs e) StreamReader srFile = new StreamReader(TxtFileName.Text); TxtFile.Clear(); TxtFile.Text = srFile.ReadToEnd(); srFile.Close(); 在写入和读出操作完成之后,一定要调用Close方法关闭文件,只有这样才能确保写入和读出文件的正确完成

7.4 二进制文件的读写 二进制文件使用 BinaryReader 和BinaryWriter 类实现读写操作 这两个类一般都要与FileStream类结合使用,即由FileStream类创建文件 流,然后利用BinaryReader类和BinaryWriter类实现对文件流的读写操作, 从而实现对文件的读写操作。 通过BinaryReader类,可以把原始数据类型的数据读取为具有特定编 码格式的二进制数据 通过BinaryWriter类,可以把原始数据类型的数据写入流中,并且还可 以写入具有特定编码格式的字符串

FileStream类 FileStream类提供一共4个重载构造函数,常用的两种: 其中, public FileStream(string path, FileMode mode) public FileStream(string path, FileMode mode, FileAccess access) 其中, path:用于设置文件路径; access:用于对文件的访问方式,可能取值包括FileMode.Read、 FileMode.Write、FileMode.ReadWrite,分别表示只读、只写、可读写; mode:其可能取值及其意义见下页:

FileMode类的常用属性及其意义 FileMode.Append:表示以追加方式打开文件(打开后文件位置移动到文件的 末尾),FileMode.Append仅可以与FileAccess.Write联合使用。 FileMode.Create:创建新的文件,如果已存在同名的文件,则覆盖它。 FileMode.CreateNew:创建新的文件,但如果已经存在同名的文件,则抛出异 常。 FileMode.Open:打开已有的文件,但如果不存在所指定的文件,则抛出异常。 FileMode.OpenOrCreate:如果文件已存在,则打开它,否则创建新的文件。 FileMode.Truncate:打开已有的文件,当写入数据时将覆盖文件中原有的数 据,但文件的基本属性保持不变(如初始创建日期等)。如果指定的文件不存 在则抛出异常。

BinaryWriter类的两个构造函数: 7.4 二进制文件的读写 7.4.1 写二进制文件 BinaryWriter类的两个构造函数: public BinaryWriter(Stream output,) public BinaryWriter(Stream output, Encoding encoding) 其中,参数output用于设置流对象,通常是由FileStream类实例化的 对象。

BinaryWriter类常用方法: 7.4 二进制文件的读写 7.4.1 写二进制文件 BaseStream.Seek()方法:用于设置输出流中当前的位置。 Write()方法:一共重载18个版本,其中大部分与StreamWriter类的 Write()方法相同。常用的方法: public override void Write(byte[ ] buffer)将字节数组buffer中所有字 节全部保存到二进制文件 public override void Write(byte[ ] buffer, int index, int count)将数组 buffer中从索引为index开始、一共count个字节保存到二进制文件中

通过BinaryWriter类写文件的关键代码: 7.4 二进制文件的读写 7.4.1 写二进制文件 通过BinaryWriter类写文件的关键代码: string path = @"C:\test.dat"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); BinaryWriter writer = new BinaryWriter(fs); writer.BaseStream.Seek(0, SeekOrigin.Begin); //设置当前位置 writer.Write("中华人民共和国"); //写入数据 writer.Close(); fs.Close();

类BinaryReader提供许多用于读取输入流中的数据,主要包括: 7.4 二进制文件的读写 7.4.2 读二进制文件 类BinaryReader提供许多用于读取输入流中的数据,主要包括: public abstract int Read(byte[ ] buffer, int index, int count) public abstract byte ReadByte() public abstract byte[ ] ReadBytes() public abstract char ReadChar() public abstract char[ ] ReadChars() public abstract decimal ReadDecimal() public abstract double ReadDouble() public abstract short ReadInt16() public abstract int ReadInt32() public abstract long ReadInt64() public abstract float ReadSingle() public abstract string ReadString()

读二进制文件的关键代码: string path = @"C:\test.dat"; FileStream fs = new FileStream(path, FileMode.Open); BinaryReader reader = new BinaryReader(fs); reader.BaseStream.Seek(0, SeekOrigin.Begin); //设置当前位置 //可通过判断fs.Position是否等于fs.Length来断定是否已经读完 string s = reader.ReadString(); reader.Close(); fs.Close();

注意:读写二进制文件时,读文件语句的写法和顺序完全由写文件的格式来决定,相应的语句要一一对应,不能有差错,否则将读出乱码。 例如,下列的写文件语句和读文件语句必须一一对应,否则将导致错误读出数据:

为了避免错误对应读出和写入的数据,可以通过读取和写入整个对象, 即:对象序列化。 序列化对象是一个表示为字节序列的对象,它包含对象的数据以及 关于对象类型和对象中所保存数据类型的信息。序列化对象写入文 件后,可以从文件读取它并反序列化,即:用对象类型及对象中所 保存数据类型的信息和字节在内存中重建对象。 BinaryFormatter类可以读入和写入流中的整个对象,其Serialize方法将 对象表示写入文件,Deserialize方法从文件读取这个表示并重建原始对 象。

本讲小结 文本文件的读写 二进制文件的读写