第14章 输入与输出流类库
- 格式:doc
- 大小:100.50 KB
- 文档页数:16
输入输出流的相关简介系别:计算机技术与信息管理系班级:09软件技术姓名:徐燕学号:09207745目录一.Java输入输出流详解 (3)1.什么是流: (3)2、流的分类 (3)2.1字节流 (3)2.2.字符流 (4)2.3.对象流 (4)4.字节流与字符流的区别: (4)二.流的层次结构 (5)1.InputStream类 (6)2.OutputStream类 (7)3.FileInputStream类 (7)4.FileOutputStream类 (8)5.File类 (8)6.从一个流构造另一个流 (9)7.BufferInputStream和bufferOutputStream (10)8.printstream (11)三.字符流的读取和写入 (11)1.BufferInputStream和bufferOutputStream (14)2.printstream (15)四.java的i/o输入输出类怎么分出是输入流还是输出流? (15)五.java中什么时候用输入流,什么时候用输出流? (16)六.JA V A输出输入流函数注意事项 (16)1. 处理概述: (17)2. 字节流: (17)2.1输入流: (17)2.2输出流: (18)3、字符流: (18)3.1. 字符流处理概述 (18)3.2. 字符流处理 (19)3.3流处理中的其它方法: (20)七.总结 (21)一.Java输入输出流详解stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。
在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:1.什么是流:流是一个抽象的概念。
当Java程序需要从数据源读取数据时,会开启一个到数据源的流。
数据源可以是文件,内存或者网络等。
同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。
C++实验报告流类库与输入/输出实验八流类库与输入/输出(2学时)一.实验目的:1.熟悉流类库中常用的类及其成员函数使用方法;2.学习标准输入输出及格式控制;3.学习对文件的应用方法(二进制文件,文本文件)二.实验内容与步骤:1.实验题目:(2):编写程序,用二进制方式打开指定的一个文件,在每一行前加行号.(提示:使用void main(int argc,char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作.使用getline成员函数读入数据,使用cout输出字符到文件.)2.程序清单:#include<fstream>#include<strstream>#include<cstdlib>using namespace std;void main(){strstream file;ifstream in("f1.txt",ios::binary);file<<in.rdbuf();ofstream out("f1.txt",ios::binary);const int s=255;char l[s];for(int i=1;file.getline(l,s);i++)out<<i<<"."<<l<<endl; }3.测试结果如下:三.实验小结:1,重要的输出流:ostream,ofstream,ostringstream;2,重要的输入流:istream,ifstream,istringstream.。
C++:流类库与输⼊输出7.2.1 C++的输⼊输出流ios:流基类(抽象类)istream:通⽤输⼊流类和其他输⼊流的基类ostream:通⽤输出流类和其他输出类的基类iostream:通⽤输⼊输出流类和其他输⼊输出流类的基类(以下的派⽣类对象有cin、cout、cerr、clog)ifstream:输⼊⽂件流类ofstream:输出⽂件流类fstream:输⼊输出⽂件流istrstream:输⼊字符串流类ostrstream:输出字符串流类strstream:输⼊输出字符串类iostream_withassign: 通⽤输⼊输出流类和其他输⼊输出流类iostream的的派⽣类7.2.2 预定义的流对象C++中包含⼏个预定义的流对象,它们是标准输⼊流对象cin、标准输出流对象cout、⾮缓冲型的标准出错流对象ceer、缓冲型的标准出错流对象clogcin是istream的派⽣类istream_withassign的对象,它与标准输⼊设备(通常是键盘)相联系。
cout是ostream的派⽣类ostream_withassign的对象,它与标准输出设备(通常是显⽰器)相联系。
ceer是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
clog是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
由于istream和ostream类都在头⽂件iostream中声明的,因此只要在程序中包含头⽂件iostream.h,C++程序开始时这四个标准流对象的构造函数都被⾃动调⽤。
7.2.3 输⼊输出流的成员函数(1)put函数put函数⽤于输出⼀个字符格式:cout.put(char ch)例如:cout.put('A')===cout.put(65)===cout.put(25+40)(2)get函数get函数的功能与提取运算符>>类似,主要不同之处是get函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。
1.概念填空题1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。
其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。
1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。
1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。
C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。
1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。
前者存取的最小信息单位为字节,后者记录。
1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。
文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。
1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。
文本文件的输出可用cout将字符插入到输出文件流来实现。
程序在处理文本文件时需要(需要/不需要)对数据进行转换。
1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。
二进制文件的输入输出分别采用read()、write() 成员函数。
这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。
1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。
2 简答题2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数?2.2 文件的使用有它的固定格式,试做简单介绍。
2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式?2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。
2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题?2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件?2.7 怎样使用istream和ostream的成员函数来实现随机访问文件?3.选择题3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。
c语言输入流和输出流的概念C语言输入流和输出流的概念输入流的概念•输入流是指从外部获取数据并输入到计算机程序中的数据流。
在C语言中,输入流通常用于从键盘或文件中获取输入。
•C语言中的输入流通常使用`头文件中的函数来实现,如scanf和fscanf`等。
输出流的概念•输出流是指将计算机程序中的数据输出到外部设备的流。
在C语言中,输出流通常用于向屏幕或文件等外部设备输出数据。
•C语言中的输出流通常使用`头文件中的函数来实现,如printf 和fprintf`等。
输入输出流的关系•输入流和输出流是C语言中用来进行输入和输出操作的重要概念。
•输入流和输出流可以通过函数的调用来切换,在输入操作时使用输入流,在输出操作时使用输出流。
输入流的操作•使用输入流可以从键盘或文件中获取输入数据,并赋值给变量或数组。
常用的输入流函数包括:1.scanf:从标准输入流中读取数据,并按照指定的格式赋值给变量。
2.fscanf:从指定的输入流中读取数据,并按照指定的格式赋值给变量。
输出流的操作•使用输出流可以将程序中的数据输出到屏幕或文件等外部设备。
常用的输出流函数包括:1.printf:将格式化的数据输出到标准输出流(屏幕)。
2.fprintf:将格式化的数据输出到指定的输出流(通常是文件)。
输入流和输出流函数的格式化控制符•在输入流和输出流函数中,格式化控制符用于指定输入和输出的数据格式。
•常用的格式化控制符包括:–%d:用于输出或输入整数。
–%f:用于输出或输入浮点数。
–%c:用于输出或输入字符。
–%s:用于输出或输入字符串。
示例代码#include <>int main() {int num;char str[50];printf("请输入一个整数:");scanf("%d", &num);printf("您输入的整数是:%d\n", num);printf("请输入一个字符串:");scanf("%s", str);printf("您输入的字符串是:%s\n", str);return 0;}以上是对C语言输入流和输出流的简述,输入流用于获取外部数据输入到程序中,输出流用于将程序中的数据输出到外部设备。
* 掌握:输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
* 理解:C++类库中的常用流类。
* 了解:C++的I/O对C的发展。
重点、难点◆输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
一、C++ 输入输出的含义以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。
从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。
C++的输入与输出包括以下3方面的内容:1、对系统指定的标准设备的输入和输出。
简称标准I/O。
(设备)2、以外存磁盘(或光盘)文件为对象进行输入和输出。
简称文件I/0。
(文件)3、对内存中指定的空间进行输入和输出。
简称串I/O。
(内存)C++采取不同的方法来实现以上3种输人输出。
为了实现数据的有效流动,C++系统提供了庞大的I/O类库,调用不同的类去实现不同的功能。
二、C++的I/O对C的发展—类型安全和可扩展性C语言中I/O存在问题:1、在C语言中,用prinff和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。
学过C语言的读者可以分析下面的用法:想用格式符%d输出一个整数,但不小心错用了它输出单精度变量和字符串,会出现什么情况?假定所用的系统int型占两个字节。
printf("%d",i);//i为整型变量,正确,输出i的值printf("%d",f);//f为单精度变量,输出变量中前两个字节的内容printf("%d","C++");//输出字符串"C++”的起始地址编译系统认为以上语句都是合法的,而不对数据类型的合法性进行检查,显然所得到的结果不是人们所期望的。
2、在用scanf输入时,有时出现的问题是很隐蔽的。
第12章流类库和输入输出【内容提要】流的概念及流类库输入输出的格式控制输入与输出运算符的重载文件操作【重点与难点】12.1 流的概念及流类库12.1.1 流的概念C++中的流是指数据从一个对象传递到另一个对象的操作。
从流中读取数据称为提取操作,向流内添加数据称为插入操作。
流在使用前要建立,使用后要删除。
如果数据的传递是在设备之间进行,这种流就称为I/O流。
C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。
C++流预定义了4个标准流类对象,它们可以直接用来输入输出。
这些标准流类对象都包含在头文件iostream.h中。
istream cin; //与标准输入设备相关联的标准输入流。
ostream cout; //与标准输出设备相关联的标准输出流。
ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。
ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。
12.1.2 流类库C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。
使用这些流类库时,必须包含相应的头文件。
ios类及其派生类为用户提供了使用流类的接口。
以下给出ios类及其派生类的层次结构图。
iosistreamifstreamistream_withassign iostreamistrstream fstreamostream strstreamofstream sdiostreamostream_withassignostrstream图12.1 ios类的层次关系12.2 输入输出的格式控制C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。
12.2.1 用ios类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。
C++——输⼊、输出和⽂件⼀、C++输⼊和输出概述 1.1、流和缓冲区 C++程序把输⼊和输出看作字节流。
输⼊时,程序从输⼊流中抽取字节;输出时,程序将字节插⼊到输出流中。
对于⾯相⽂本的程序,每个字节代表⼀个字符,更通俗地说,字节可以构成字符或数值数据的⼆进制表⽰。
输⼊流中的字节可能来⾃键盘,也可能来⾃存储设备(如硬盘)或其他程序。
输出流中的字节可以流向屏幕、打印机、存储设备或其他程序。
流充当了程序和流源或流⽬标之间的桥梁。
这使得C++程序可以以相同的⽅式对待来⾃键盘的输⼊和来⾃⽂件的输⼊。
C++程序只检查字节流,⽽不需要知道字节来⾃何⽅。
同理,通过使⽤流,C++程序处理输出的⽅式将独⽴于其去向。
因此管理输⼊将包含两步: *将流与输⼊去向的程序关联起来。
*将流与⽂件连接起来。
换句话说,输⼊流需要两个连接,每端各⼀个。
⽂件端部连接提供了流的来源,程序端连接将流的流出部分转储到程序中(⽂件端连接可以是⽂件,也可以是设备)。
同样,对输出的管理包括将输出流连接到程序以及将输出⽬标与流关联起来。
通常,通过使⽤缓冲区可以更⾼效地处理输⼊和输出。
缓冲区是⽤作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储⼯具。
1.2、流、缓冲区和iostream⽂件 管理流和缓冲区的⼯作有点复杂,但iostream(以前为iostream.h)⽂件中包含⼀些专门设计⽤来实现、管理流和缓冲区的类。
C++98版本C++I/O定义了⼀些类模板,以⽀持char和wchar_t数据;C++11添加了char16_t和char32_t具体化。
通过使⽤typedef⼯具,C++使得这些模板char具体化能够模仿传统的⾮模板I/O实现。
下⾯是其中的⼀些类: *streambuf类为缓冲区提供了内存,并提供了⽤于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类⽅法; *ios_base类表⽰流的⼀般特征,如是否可读取、是⼆进制流还是⽂本流等; *ios类基于ios_base,其中包含了⼀个指向streambuf对象的指针成员; *ostream类是从ios类派⽣⽽来的,提供了输出⽅法; *istream类也是从ios类派⽣⽽来的,提供了输⼊⽅法; *iostream类是基于istream和ostream类的,因此继承了输⼊⽅法和输出⽅法。
java核心技术第十二版笔记以下是一份《Java核心技术第十二版》的笔记,涵盖了书中主要知识点和概念。
由于篇幅限制,这里只提供了一部分内容,更多细节和内容建议阅读原书。
一、Java平台Java平台由Java虚拟机(JVM)和Java开发工具包(JDK)组成。
JVM 是Java平台的核心,负责解释和执行Java字节码。
JDK是开发Java应用程序的工具集合,包括编译器、调试器、类库和API。
二、Java语言基础1. Java是一种面向对象的编程语言,具有简单性、可移植性、安全性等特点。
2. Java程序由类和对象组成,类是对象的模板,对象是类的实例。
3. Java语言支持继承和多态等面向对象特性。
4. Java语言中的变量需要先声明后使用,变量类型包括基本类型和引用类型。
5. Java语言中的运算符包括算术运算符、关系运算符、逻辑运算符等。
6. Java语言中的控制流语句包括条件语句、循环语句等。
7. Java语言中的异常处理机制用于处理程序中的错误情况。
三、Java输入/输出流1. Java输入/输出流是用于处理数据输入和输出的类库,包括字节流和字符流。
2. Java输入/输出流可以通过InputStream和OutputStream等类进行操作。
3. Java字符流可以通过Reader和Writer等类进行操作,支持多种字符编码格式。
4. Java NIO(New I/O)是Java输入/输出流的改进版本,提供了更高效的数据传输方式。
四、Java图形用户界面1. Java图形用户界面(GUI)是通过Swing和AWT等类库实现的。
2. Swing是Java的一个GUI工具包,提供了丰富的组件,如按钮、文本框、菜单等。
3. AWT是Java最早的GUI工具包,提供了一些基本的GUI组件。
4. Java GUI应用程序通常采用事件驱动模式,通过事件监听器处理用户交互操作。
五、Java网络编程1. Java网络编程可以通过Java Socket API实现基于TCP/IP协议的网络通信。
JAVA各章习题及答案-全解第1章Java入门一、选择题1.下列选项中,不属于Java 语言特点的一项是( C )。
(A)分布式(B)安全性(C)编译执行(D)面向对象【解析】Java程序采用解释执行的方法。
在系统编译运行Java程序时,Java编译器将Java程序转化为字节码,在运行时,解释器将编译得到的字节码进行解释执行。
2.在Java语言中,( C )是最基本的元素?(A)方法(B)包(C)对象(D)接口【解析】构成Java程序的基本元素类(抽象的对象)。
3.编译一个定义了3个类和10个方法的Java源文件后,会产生( D )个字节码文件?扩展名是( D )?(A)13个字节码文件,扩展名为.class(B)1个字节码文件,扩展名为.class(C)3个字节码文件,扩展名为.java(D)3个字节码文件,扩展名为.class【解析】源文件中的每一个类编译后都会生成一个字节码文件,字节码文件的扩展名是.class。
4.在创建Applet应用程序时,需要用户考虑问题是(B )。
(A)窗口如何创建(B)绘制的图形在窗口中的位置(C)程序的框架(D)事件处理【解析】创建Applet程序时必须继承系统类Applet,而Applet类中已经包含了如何创建窗口以及事件处理等内容,这类程序的框架也都是固定的,而绘制图形在窗口中的位置则需要由用户确定。
5.Java语言属于( B )种语言?(A)面向机器的语言(B)面向对象的语言(C)面向过程的语言(D)面向操作系统的语言【解析】Java语言是一种纯面向对象的语言。
6.下列关于Application和Applet程序的说法中不正确的一项是(B )。
(A)Application使用解释器java.exe(B)Application不使用独立的解释器(C)Applet在浏览器中运行(D)Applet必须继承Java 的Applet类【解析】Application程序包含main()方法,它是一种独立执行的程序,因此必须使用独立的解释器解释执行。
C++中输⼊输出流及⽂件流操作总结本⽂实例为⼤家分享了C++中输⼊输出流及⽂件流操作笔记,供⼤家参考,具体内容如下1、流的控制iomanip 在使⽤格式化I/O时应包含此头⽂件。
stdiostream ⽤于混合使⽤C和C + +的I/O机制时,例如想将C程序转变为C++程序2、类继承关系ios是抽象基类,由它派⽣出istream类和ostream类, iostream类⽀持输⼊输出操作,iostream类是从istream类和ostream类通过多重继承⽽派⽣的类类ifstream继承了类istream,类ofstream继承了类ostream,类fstream继承了类iostreamiostream头⽂件中4种流对象cout补充1、⽤“cout<<”输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型并根据其类型选择调⽤与之匹配的运算符重载函数。
这个过程都是⾃动的,⽤户不必⼲预。
如果在C语⾔中⽤prinf函数输出不同类型的数据,必须分别指定相应的输出格式符,⼗分⿇烦,⽽且容易出错2、cout流在内存中对应开辟了⼀个缓冲区,⽤来存放流中的数据,当向cout流插⼈⼀个endl时,不论缓冲区是否已满,都⽴即输出流中所有数据,然后插⼊⼀个换⾏符,并刷新流(清空缓冲区)。
注意如果插⼈⼀个换⾏符”\n“(如cout<<a<<"\n"),则只输出和换⾏,⽽不刷新cout 流(但并不是所有编译系统都体现出这⼀区别)。
3、在iostream中只对"<<"和">>"运算符⽤于标准类型数据的输⼊输出进⾏了重载,但未对⽤户声明的类型数据的输⼊输出进⾏重载。
如果⽤户声明了新的类型,并希望⽤"<<"和">>"运算符对其进⾏输⼊输出,按照重运算符重载来做。
第14章输入与输出流类库C++的I/O流类,是目前最常用的I/O系统。
本章介绍C++输入与输出流类库。
通过本章的学习,读者可以了解怎样使用C++面向对象的输入/输出流,能够格式化输入和输出,了解I/O流类的层次结构,了解怎样输入/输出用户自定义类型的对象,能够建立用户自定义的流操作符,能够确定输入/输出操作的成功与失败,能够把输出流连到输入流上。
14.1 I/O流类的结构(略)14.2 文件流类C++语言把每个文件都看成一个有序的字节流。
每个文件或者以文件结束符结束,或者在特定的字节号处结束(该字节号通常记录在由系统维护和管理的数据结构中)。
当打开一个文件时,该文件就和某个流关联起来。
系统自动生成cin、cout、cerr、clog对象,流使用这些对象所关联的特定文件或输入/输出设备和程序之间建立通信通道。
要在C++中进行文件处理,就要包含头文件<iostream.h>和<fstream.h>。
<fstream.h>头文件包括流类 ifstream(从文件输入)、ofstream(向文件输出)和fstream(从文件输入/输出)的定义。
生成这些流类的对象即可打开文件。
这些流类分别从istream、ostream 和iostream类派生。
其层次结构如图14.2。
iosistream ostreamifstream ofstreamiostreamfstream图14.2 文件流类的继承关系在C++中,要定义一个文件流类对象,必须规定文件名和打开方式。
类ofstream用于执行文件输出,该类有几个构造函数,其中最有用的是:ofstream::ofstream(char* pFileName, //指向要打开的文件名字符串int nMode = ios::out, //打开方式int nProt = filebuf::openprot); //文件保护方式nMode参数是打开方式,它的含义见表14.1nProt是文件保护方式,它的选择项见表14.2。
由于C++把文件看作是无结构的字节流,所以为了在文件中记录特定结构的内容,必须给文件加上记录结构。
下面的程序演示了班级学生成绩表,学号作为记录关键字,文件按学号顺序建立和维护。
假定用户按学号顺序键入记录,程序将把键入的记录保存并写入文件。
程序示例如下。
例14.4 文件流操作实例//演示文件流操作#include "stdafx.h"#include<iostream.h>#include<fstream.h>#include<stdlib.h>int main(){int regNumber;char name[30];float grade;//使用ofstream类的构造函数打开文件ofstream outGradeFile("C:\\grade.dat",ios::out);//也可以先创建输出流类对象,再用open操作打开文件//ofstream outGradeFile;//outGradeFile.open("C:\\grade.dat",ios::out);if(!outGradeFile){cerr<<"文件不能被打开!"<<endl;exit(1);//函数原形定义在stdlib.h中}cout<<"请输入学号,姓名,和成绩,\n"<<"按输入文件结束符结束。
\n? ";while(cin>>regNumber>>name>>grade){outGradeFile<<regNumber<<" "<<name<<" "<<grade<<'\n';cout<<"? ";}outGradeFile.close();ifstream inGradeFile("C:\\grade.dat",ios::in); //也可以先创建输入流类对象,再用open操作打开文件//ifstream inGradeFile;//inGradeFile.open("C:\\grade.dat",ios::in);cout<<"? ";while(inGradeFile>>regNumber>>name>>grade){ cout<<regNumber<<" "<<name<<" "<<grade<<'\n';cout<<"? ";}inGradeFile.close();return 0; //ofstream的析构函数将关闭文件}程序运行结果如下:请输入学号,姓名,和成绩,按输入文件结束符结束。
?123 aaa 78?234 bbb 89?345 ccc 69?^Z?123 aaa 78?234 bbb 89?345 ccc 69上例中,对于文件名要说明其路径,斜杠要双写,因为编译器理解下的斜杠是字符转换符。
这和包含头文件时的路径不一样,因为包含头文件是由编译预器处理的。
文件打开时,对于使用ofstream类构造对象时,其打开方式默认为ios::out|ios::trunc,即该文件每次打开,如果原先存在,则都会先被清空内容,否则就新建。
如果要打开二进制文件,写方式,输出到文件尾,可以如下操作:ofstream bfile(“binfile”,ios::binary|ios::ate);也可以生成oftream对象而不打开特定文件,而在后面再将文件与对象相连接。
可以如下操作:ofstream outFile;outFile.open(“abc.dat”,ios::out);如果需要打开一个输入文件,从文件中读取数据可以如下操作:ifstream myinf(“C:\\grade.dat”,ios::nocreate);if(myinf.fail()){cerr<<”打开文件出错!\n”;return;}myinf>>regNumber>>name>>grade;…对于打开文件是否操作成功,可以使用重载的ios运算符成员函数!操作符确定打开是否成功,如果打开操作的流将failbit或badbit置位,则条件(!outGradeFile)返回非0值(true);也可以通过判断fail()成员函数来确定打开文件是否出错。
如果打开文件同时用于输入和输出,则可以如下操作:fstream myinout(“abc.dat”,ios::in|ios::out);用fstream打开的文件,打开方式不能默认。
14.3 串流类(不讲)ostrstream、istrstream、strstream是串流类,在strstrea.h中定义。
其中,strstream类是从ostrstream和istrstream类多重继承而来的子类。
要定义一个串流类对象,须提供字符数组和数组大小。
类istrstream用于串流输入,该类有几个构造函数,其中最有用的是:istrstream::istrstream(const char* pch);istrstream::istrstream(const char* pch,int nLength);第一个参数指出字符串数组,第二个参数说明数组大小。
当size为0时,表示把istrstream类对象连接到由pch指向的以空字符结束的字符串。
类ostrstream用于执行串流输出,该类也有几个构造函数,其中最有用的是:ostrstream::ostrstream(char* pch,int nLength,int nMode=ios::out);第一个参数指出字符串数组,第二个参数说明数组大小,第三个参数指出打开方式。
下面的实例演示了如何使用串流输入输出功能。
例14.5 串流输入输出功能实例//演示串流输入输出功能#include<iostream.h>#include<strstrea.h>#include<string.h>char* parseString(char* pch){int number;float balance;//计算需要构造的串流类的长度//strlen返回字符串长度,其定义包含在string.h中int nLength=strlen("帐号:")+strlen(" 收支:")+strlen(pch);istrstream inp(pch,0); //ios::in方式,读到null结束inp>>number>>balance; //从串流中读入一个整数和浮点数char *pBuffer=new char[nLength];ostrstream outp(pBuffer,nLength);//ios::out方式,字串长度为计算出的nLength,//刚好满足输出到pBuffer中的长度要求outp<<"帐号:"<<number<<" 收支:"<<balance; //写入pBuffer中//注意该处如果写入超出pBuffer空间长度的字符,//超出部分将不会被写入return pBuffer;}int main(){char *pch="1001 125.45";char *pBuf=parseString(pch);cout<<pBuf<<endl;delete []pBuf;return 0;}演示结果如下:帐号:1001 收支:125.45在函数parseString()中,先定义了一个输入串流对象inp,将输入设备pch中的字符输入到了一个整数和一个浮点数中,然后,定义了一个输出串流对象outp,将提示信息和这两个变量输出到outp连接的输出设备(实际为一字符串空间)pbuffer中。
注意语句:outp<<"帐号:"<<number<<" 收支:"<<balance;它同时也将提示信息“帐号:”、“收支:”也写入到了输出设备pbuffer中。