C#程序设计教程(第6版)课后习题及答案ch09 文件和流_第1页
C#程序设计教程(第6版)课后习题及答案ch09 文件和流_第2页
C#程序设计教程(第6版)课后习题及答案ch09 文件和流_第3页
C#程序设计教程(第6版)课后习题及答案ch09 文件和流_第4页
C#程序设计教程(第6版)课后习题及答案ch09 文件和流_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章文件和流习题:9-1什么是文件?什么是流?流与文件的关系是什么?9-2在流的类层次结构中,最顶层的是哪个类?9-3用什么类从文件中读取字符?9-4用什么类向文件中写入字符?9-5编写程序在E盘下新建一个文本文件,并对该文件进行复制、移动、写入和读取操作。答案:9-1什么是文件?什么是流?流与文件的关系是什么?1.文件(File)文件是计算机中用于持久存储数据的容器,通常存储在磁盘、U盘等外部存储设备中,具有唯一的路径(如E:\test.txt)和明确的格式(如文本文件、二进制文件、图片文件)。核心特征:持久性:数据存储在非易失性介质中,断电后数据不丢失;独立性:文件可独立于程序存在,程序关闭后文件仍保留;可访问性:通过文件路径和操作系统接口(如Windows的文件系统)可对文件进行创建、读取、修改、删除等操作。常见分类:按内容格式:文本文件(如.txt、.csv,存储字符编码的文本)、二进制文件(如.exe、.jpg、.dat,存储字节序列,需特定解析规则);按操作方式:顺序文件(需按顺序读写)、随机访问文件(可通过指针直接定位到任意位置读写)。2.流(Stream)流是C#中用于处理数据传输的抽象概念,代表数据在程序与外部设备(如文件、网络、内存)之间的“流动通道”。流以“字节序列”的形式传输数据,屏蔽了不同设备的底层差异(如文件、网络的读写方式不同,但流的操作接口统一)。核心特征:方向性:分为输入流(InputStream,从外部设备读取数据到程序)和输出流(OutputStream,从程序写入数据到外部设备);连续性:数据以字节为单位连续传输,可逐字节、逐块读写;抽象性:流是抽象类(System.IO.Stream),需通过具体子类(如FileStream、MemoryStream)实现实际功能。常见分类:按数据类型:字节流(如FileStream,传输字节)、字符流(如StreamReader/StreamWriter,传输字符,自动处理编码);按数据源:文件流(FileStream,操作文件)、内存流(MemoryStream,操作内存缓冲区)、网络流(NetworkStream,操作网络数据)。3.流与文件的关系流是程序操作文件的“桥梁”,文件的读写必须通过流来实现,二者的关系可概括为:依赖关系:文件是数据的“存储载体”,流是数据的“传输通道”。程序无法直接操作文件中的数据,必须先通过流建立程序与文件的连接(如FileStream打开文件),再通过流的读写方法(如Read/Write)传输数据;操作流程:建立流:通过FileStream、StreamReader等类创建流对象,指定文件路径和操作模式(如读、写、追加);传输数据:通过流的方法读取文件数据到程序(输入流),或写入程序数据到文件(输出流);关闭流:数据传输完成后关闭流,释放文件资源(避免文件被占用);示例:读取E:\test.txt文件时,StreamReader(字符流)会先通过FileStream(字节流)连接文件,将文件的字节数据按指定编码(如UTF-8)转换为字符,再传输到程序中。9-2在流的类层次结构中,最顶层的是哪个类?在C#的System.IO命名空间中,流的类层次结构最顶层的类是**Stream抽象类**(System.IO.Stream)。核心作用:Stream类定义了所有流的统一接口,包含流操作的基础方法和属性,如:方法:Read(byte[]buffer,intoffset,intcount)(读取字节到缓冲区)、Write(byte[]buffer,intoffset,intcount)(写入字节到流)、Close()(关闭流)、Flush()(清空缓冲区,强制写入数据);属性:CanRead(是否支持读)、CanWrite(是否支持写)、CanSeek(是否支持随机访问)、Length(流的长度)。子类实现:Stream类是抽象类,无法直接实例化,需通过其子类实现具体功能,常见子类包括:FileStream:操作文件的字节流;MemoryStream:操作内存缓冲区的字节流;NetworkStream:操作网络数据的字节流;BufferedStream:带缓冲区的字节流,提升读写性能;StreamReader/StreamWriter:基于Stream的字符流(非直接继承Stream,但依赖Stream实现)。9-3用什么类从文件中读取字符?在C#中,从文件读取字符(文本文件)常用的类是**StreamReader**(System.IO.StreamReader),它是专门用于读取字符流的类,可自动处理字符编码(如UTF-8、GB2312),避免直接操作字节流时的编码转换问题。1.

StreamReader的核心优势支持字符级读取:可逐行读取(ReadLine())、读取整个文件(ReadToEnd())、逐字符读取(Read());自动编码处理:默认使用UTF-8编码,也可手动指定编码(如newStreamReader("E:\\test.txt",Encoding.GetEncoding("GB2312")));高效缓冲:内部自带缓冲区,减少磁盘IO次数,提升读取性能。2.常用方法方法名作用ReadLine()读取一行字符,返回字符串(换行符不包含在内),到达文件末尾返回nullReadToEnd()读取从当前位置到文件末尾的所有字符,返回完整字符串Read()读取单个字符,返回字符的ASCII码(int类型),到达文件末尾返回-1Close()关闭流,释放文件资源(推荐使用using语句自动释放)3.示例代码(读取文本文件)csharpusingSystem;usingSystem.IO;usingSystem.Text;classFileReadDemo{staticvoidMain(){stringfilePath="E:\\test.txt";//使用using语句自动释放StreamReader资源(无需手动Close())using(StreamReaderreader=newStreamReader(filePath,Encoding.UTF8)){Console.WriteLine("文件内容:");stringline;//逐行读取文件,直到末尾while((line=reader.ReadLine())!=null){Console.WriteLine(line);}}}}9-4用什么类向文件中写入字符?在C#中,向文件写入字符(文本文件)常用的类是**StreamWriter**(System.IO.StreamWriter),它是专门用于写入字符流的类,支持自动处理字符编码,可直接写入字符串,无需手动转换为字节。1.

StreamWriter的核心优势支持字符级写入:可写入字符串(Write())、写入一行字符串(WriteLine());灵活的写入模式:支持覆盖写入(默认)、追加写入(需指定append:true);自动编码处理:默认使用UTF-8编码,也可手动指定编码(如GB2312)。2.常用方法方法名作用Write(stringvalue)写入字符串(不自动换行)WriteLine(stringvalue)写入字符串并自动添加换行符Flush()强制将缓冲区中的数据写入文件(关闭流时会自动调用)Close()关闭流,释放文件资源(推荐使用using语句自动释放)3.示例代码(写入文本文件)csharpusingSystem;usingSystem.IO;usingSystem.Text;classFileWriteDemo{staticvoidMain(){stringfilePath="E:\\test.txt";//追加写入(append:true),指定UTF-8编码using(StreamWriterwriter=newStreamWriter(filePath,append:true,Encoding.UTF8)){writer.WriteLine("HelloC#File!");//写入一行writer.Write("当前时间:");//写入字符串(不换行)writer.WriteLine(DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss"));//写入时间并换行}Console.WriteLine("写入完成!");}}9-5编写程序在E盘下新建一个文本文件,并对该文件进行复制、移动、写入和读取操作。需求分析需实现5个核心功能:新建文本文件并写入内容;读取新建文件的内容;复制文件到指定路径(如E:\test_copy.txt);移动文件到指定路径(如E:\new_dir\test_move.txt,需先创建目录);异常处理(如文件已存在、路径不存在、权限不足等)。完整代码csharpusingSystem;usingSystem.IO;usingSystem.Text;classFileOperationDemo{//定义基础路径(可根据需求修改)privatestaticreadonlystringOriginalPath="E:\\test_original.txt";//原始文件privatestaticreadonlystringCopyPath="E:\\test_copy.txt";//复制目标路径privatestaticreadonlystringMoveDir="E:\\new_dir";//移动目标目录privatestaticreadonlystringMovePath=Path.Combine(MoveDir,"test_move.txt");//移动目标路径staticvoidMain(){try{//1.新建文件并写入内容CreateAndWriteFile();//2.读取文件内容Console.WriteLine("\n===读取原始文件内容===");ReadFile(OriginalPath);//3.复制文件CopyFile();//4.移动文件(先创建目标目录)MoveFile();//5.验证移动后的文件Console.WriteLine("\n===读取移动后的文件内容===");ReadFile(MovePath);Console.WriteLine("\n所有操作完成!");}catch(Exceptionex){Console.WriteLine($"操作失败:{ex.Message}");}}///<summary>///新建文本文件并写入内容///</summary>privatestaticvoidCreateAndWriteFile(){Console.WriteLine("1.开始新建文件并写入内容...");//若文件已存在,会覆盖原有内容(StreamWriter默认覆盖)using(StreamWriterwriter=newStreamWriter(OriginalPath,append:false,Encoding.UTF8)){writer.WriteLine("===原始文件内容===");writer.WriteLine("文件创建时间:"+DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss"));writer.WriteLine("文件用途:测试文件的新建、读取、复制、移动操作");writer.WriteLine("编程语言:C#");}Console.WriteLine($"文件创建成功,路径:{OriginalPath}");}///<summary>///读取指定路径文件的内容///</summary>///<paramname="filePath">文件路径</param>privatestaticvoidReadFile(stringfilePath){if(!File.Exists(filePath)){thrownewFileNotFoundException("文件不存在",filePath);}//读取文件内容using(StreamReaderreader=newStreamReader(filePath,Encoding.UTF8)){stringcontent=reader.ReadToEnd();//读取全部内容Console.WriteLine(content);}}///<summary>///复制文件///</summary>privatestaticvoidCopyFile(){Console.WriteLine("\n2.开始复制文件...");//若目标文件已存在,设置overwrite:true覆盖File.Copy(OriginalPath,CopyPath,overwrite:true);Console.WriteLine($"文件复制成功,原始路径:{OriginalPath},目标路径:{CopyPath}");}///<summary>///移动文件(先创建目标目录)///</summary>privatestaticvoidMoveFile(){Console.WriteLine("\n3.开始移动文件...");//步骤1:创建移动目标目录(若不存在)if(!Directory.Exists(MoveDir)){Directory.CreateDirectory(MoveDir);Console.WriteLine($"目标目录不存在,已创建:{MoveDir}");}//步骤2:移动文件(若目标文件已存在,设置overwrite:true覆盖)File.Move(OriginalPath,MovePath,overwrite:true);Console.WriteLine($"文件移动成功,原始路径:{OriginalPath},目标路径:{MovePath}");//步骤3:删除原始文件(可选,因Move已移动文件,此处仅验证)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论