第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输入时,有时出现的问题是很隐蔽的。
第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中。