作业━━第 9 章(2)━━文件输入输出流

合集下载

第9章输入输出流

第9章输入输出流

CharArrayReader 字符数组ቤተ መጻሕፍቲ ባይዱ入流
Reader 字符输入流
InputStreamReader 字符输入流
FilterReader 过滤器输入流
FileReader 文件输入流
PushbackReader 回压输入流
PipedReader 管道输入流
StringReader 字符串输入流
Reader类的两个常用子类
关闭输出流
l void flush()
清空输出流,使所有缓冲字节写完
l void write(byte[] b) 将数组b中的字节写到输出流
l void write(byte[] b, int off, int len)
l abstract void write(int b) 将字节b写到输出流
FileNotFoundException BufferedOutputStream 类和FileOutputStream类重写了OutputStream 类中的
write(int b)方法
9.2.3 Reader (字符输入流)类
Reader类称作字符输入流类,是一个抽象类。Reader
类为通用的输入字符流提供了一些基本方法和标准接 口
ObjectInputStream 对象输入流
InputStream 类的两个常用子类
(1)BufferedInputStream 类 当一个BufferedInputStream 类对象被创建时,就产生了一个内部缓冲数组,
因此,可以根据需要从连接的输入数据流中一次性读多个字节的数据到 内部缓冲数组中,这样可以提高读输入数据流的效率 BufferedInputStream的常用构造方法有: l BufferedInputStream(InputStream in) l BufferedInputStream(InputStream in, int size) (2)FileInputStream类 FileInputStream类主要用于文件的输入,创建的对象可以顺序地从本地机 上的文件中读数据 FileInputStream类常用的构造方法有: l FileInputStream(String name) throws FileNotFoundException l FileInputStream(File fileName) throws FileNotFoundException

第9章输入输出流与文件操作

第9章输入输出流与文件操作

什么是流?流有什么用?面向对象语言为什么需要流?哪些场合需要流?答:流是指一组有顺序、有起点和终点地字节集合,是对数据传输地总称或抽象(也就是数据在两个对象之间地传输称为流).个人收集整理勿做商业用途流地作用就是使数据传输操作独立于相关设备.在面向对象地程序设计中,数据地传输和流动具有广泛性,可以在内存与外部设备之间传输,还可以从内存到内存,甚至可以从一台计算机通过网络流向另一台计算机等,故面向对象语言采用流机制.个人收集整理勿做商业用途在标准输入输出、在文件地读写等操作中都需要流.提供了哪些流类?各种流类之间地关系是怎样地?什么场合需要使用什么流类?答:中按照流地方向性,流分为输入流和输出流两大类.按照流中元素地基本类型,流分为字节流和字符流两大类.字节流类按照流地方向分为字节输入流类和字节输出流类,字符流类方向性分为字符输入流类和字符输出流类.以及文件操作类,随机存取文件类.个人收集整理勿做商业用途其中类是所有字节输入流地根类,类是所有字节输出流地根类;类是所有字符输入流地根类,类是所有字符输出流地根类.个人收集整理勿做商业用途操作系统中文件和目录概念是怎么样地?提供了哪些对文件和目录操作地类?程序中对文件和目录能够进行哪些操作?如何操作?个人收集整理勿做商业用途答:文件是信息地一种组织形式,是存储在外部存储介质上地具有标识名地一组相关地信息集合.目录是文件系统组织和管理文件地基本单位,保存它所管理地每个文件地基本属性信息(称为文件目录项或文件控制块).个人收集整理勿做商业用途直接对文件地顺序存取和随机存取操作,提供了类记载文件属性信息,对文件读写操作时以流地形式.类以随机存取方式进行文件读写操作.但在对文件操作过程中还需要使用文件过滤器接口和文件对话框类.在操作系统中,目录也是以文件地形式保存地,称为目录文件.故一个对象也可以表示一个目录.个人收集整理勿做商业用途可以对文件进行读、写、删除、创建等操作,对目录可以读取、创建、删除等操作.应用程序通过调用操作系统提供地系统调用能够对文件及目录进行各种操作.个人收集整理勿做商业用途再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途流与文件操作有什么关系?实际应用中将流类与文件操作结合起来能够实现哪些复杂问题?如何实现?个人收集整理勿做商业用途答:对文件地操作时通过流这个工具进行地.再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途什么是输入输出?什么是标准输入输出?怎样实现标准输入输出功能?答:数据由外部设备流向内存,这个过程称为输入;数据有内存流向外部设备,这个过程称为输出.在计算机系统中,标准输入是从键盘等外部输入设备中获得数据,标准输出是向显示器或打印机等外部输出设备发送数据.个人收集整理勿做商业用途在类中声明了个常量、和用于实现标准输入输出功能.个人收集整理勿做商业用途除了标准输入输出及文件操作之外,还有那些应用中需要使用流?答:在面向对象地程序设计中,数据地传输和流动具有广泛性,不仅可以在内存与外部设备之间传输,还可以从内存流向内存,甚至可以从一台计算机通过网络流向另一台计算机,因此各种不同地数据源地传输都需要采取不同地流机制来实现.个人收集整理勿做商业用途在“打开”、“保存”文件对话框中,设置“*”等文件过滤器.答:略类和与类有什么不同,进行读写操作时需要使用流吗?答:类保存文件和目录地各种属性,在对文件地操作中,其中读写文件地操作由字节流或字符流实现,通常是以顺序存取方式,如果要对文件进行随机存取即对一个文件同时进行读和写操作时就是用类.它们在读写操作时都要用到流.个人收集整理勿做商业用途能否将一个对象写入一个随机存取文件?答:不能应用程序能否使用流与文件操作?为什么不能?答:不能.当创建文件流类或类对象时,如果文件名为空,会怎样?会抛出异常吗?答:个人收集整理勿做商业用途。

第九章输入输出流和文件操作

第九章输入输出流和文件操作

21

import java.io.*; class Mm implements Serializable{ int x=10; int y=20; String s; void tt(){ System.out.println("hi");} } public class Ser{ public static void main(String args[]) throws Exception { Mm a=new Mm(); a.y=200; a.s="hi"; FileOutputStream f=new FileOutputStream("my.dat"); ObjectOutputStream b=new ObjectOutputStream(f); b.writeObject(a); } }
20
对象的串行化
一个类只有实现了Serializable接口 , 其对象才能够通过流 一个类只有实现了 接口, 接口 进行输入输出。 接口不需要实现任何方法。 进行输入输出。 Serializable接口不需要实现任何方法。 接口不需要实现任何方法 一个对象可能有各种类型的成员变量,对象序列化包括这 一个对象可能有各种类型的成员变量, 些成员变量中的值。 些成员变量中的值。 通过对象输出流ObjectOutputStream的 writeObject()方法 通过对象输出流 的 方法 可以将对象写入对应的节点流中。通过对象输入流 ObjectInputStream的 readObject()方法可以从普通的流中 的 方法可以从普通的流中 读取对象, 读取后返回的类型是Object类型, 通过强制转 类型, 读取对象 , 读取后返回的类型是 类型 换可将其转换为原来的类型。 换可将其转换为原来的类型。

第九章输入输出处理

第九章输入输出处理
对于这三个方法,若返回-1,表明流结束。
9
2. 字节流——OutputStream
write(int b)
将一个整数输出到流中(只输出低位字节,抽象)
write(byte b[])
将字节数组中的数据输出到流中
write(byte b[], int off, int len)
将数组b中从off指定的位置开始,长度为len的数据 输出到流中
本讲内容
1、I/O概述 2、I/O字节流 3、I/O字符流 4、随机访问文件
1
1. I/O概述
大部分程序都需要输入/输出处理,比如从键盘读取数 据、向屏幕中输出数据、从文件中读或者向文件中写 数据、在一个网络连接上进行读写操作等。 在Java中,把这些不同类型的输入、输出抽象为流 (Stream),而其中输入或输出的数据则称为数据流 (Data Stream),用统一的接口来表示,从而使程序 设计简单明了。
ObjectInputStream PipedInputStream SequenceInputStream StringBufferInputStream
OutputStream
ByteArrayOutputStream FileOutputStream FilterOutputStream
FilterInputStream(InputStream in); FilterOutputStream(OutputStream out);
这两个类是抽象类,构造方法也是保护方法。
15
2. 字节流——过滤流:缓冲流
类BufferedInputStream和BufferedOutputStream实现 了带缓冲的过滤流,它提供了缓冲机制,把任意的I/O 流“捆绑”到缓冲流上,可以提高读写效率。 在初始化时,除了要指定所连接的I/O流之外,还可以 指定缓冲区的大小。缺省大小的缓冲区适合于通常的 情形;最优的缓冲区大小常依赖于主机操作系统、可 使用的内存空间以及机器的配置等;一般缓冲区的大 小为内存页或磁盘块等地整数倍,如8912字节或更小。

第9章 输入输出流

第9章 输入输出流

3、创建FileOutputStream对象
可用下列方法创建FileOutputStream对象: (1)FileOutputStream(File file) 用指定File对象创建文件输出流,向File对象指定的文件输出数据。该方法始终创建一个新文件。如果 已存在同名文件,原文件被覆盖。File对象指定的是一个文件夹或者文件路径错误,则会产生 FileNotFoundException异常。例如: FileOutputStream dataout = new FileOutputStream(new File("outdatafile.txt")); (2)FileOutputStream(File file, boolean append) 参数append为false时,与FileOutputStream(File file)相同。参数append为true时,表示向文件 添加数据。例如: FileOutputStream dataout = new FileOutputStream(new File("outdatafile.txt"),true); (3)FileOutputStream(FileDescriptor fdObj) 用FileDescriptor对象创建文件输出流。例如: FileOutputStream dataout = new FileOutputStream(FileDescriptor.out); (4)FileOutputStream(String name) 用指定文件名创建文件输出流,向文件输出数据,与FileOutputStream(File file)方法类似。例如: FileOutputStream dataout = new FileOutputStream("outdatafile.txt"); (5)FileOutputStream(String name, boolean append) 参数append为false时,与FileOutputStream(String name)相同。参数append为true时,表示向 文件添加数据。例如: FileOutputStream dataout = new FileOutputStream("outdatafile.txt",true);

C++第9章习题解答

C++第9章习题解答

第九章流类库和输入/输出习题一.本概念与基础知识测试题9.1填空题9.1.1 在C++中“流”是表示(1)。

从流中取得数据称为(2),用符号(3)表示;向流中添加数据称为(4),用符号(5)表示。

答案:(1)数据从一个对象到另一个对象的传送(2)提取操作(3)>>(4)插入操作(5)<<9.1.2 抽象类模板(1)是所有基本流类的基类,它有一个保护访问限制的指针指向类(2),其作用是管理一个流的(3)。

C++流类库定义的cin,cout,cerr和clog是(4)。

cin通过重载(5)执行输入,而cout,cerr和clog通过(6)执行输出。

答案:(1)basic_ios(2)basic_streambuf(3)缓冲区(4)全局流对象(5)>>(stream_extraction operator)(6)<<(stream_insertion operator)9.1.3 C++在类ios中定义了输入输出格式控制符,它是一个(1)。

该类型中的每一个量对应两个字节数据的一位,每一个位代表一种控制,如要取多种控制时可用(2)运算符来合成,放在一个(3)访问限制的(4)数中。

所以这些格式控制符必须通过类ios的(5)来访问。

答案:(1)公有的无名的枚举类型(2)或“|”(3)保护(4)一个长整型数(5)公共接口(函数)9.1.4 取代麻烦的流格式控制成员函数,可采用(1),其中有参数的,必须要求包含(2)头文件。

答案:(1)流操作子(2)iomanip9.1.5 通常标准设备输入指(1)。

标准设备输出指(2)。

答案:(1)键盘(2)显示屏9.1.6 EOF为(1)标志,在iostream.h中定义EOF为(2),在int get()函数中读入表明输入流结束标志(3),函数返回(4)。

答案:(1)文件结束标志(2)-1(3)^Z(Ctrl-Z)(4)EOF9.1.7 C++根据文件内容的(1)可分为两类(2)和(3),前者存取的最小信息单位为(4),后者为(5)。

实验九 输入输出流

实验九 输入输出流

实验九输入输出流1.实验目的1、掌握字符输入、输出流的用法2、掌握使用Scanner类解析文件3、掌握Console流的使用2.实验内容1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。

1) 实验1举重成绩单2) 实验2统计英文单词3) 实验3密码流4) 实验4学读汉字5)实验5 读取Zip文件2、设计编写程序完成以下任务。

1)修改实验2,要求按字典顺序输出全部不相同的单词。

2)参考实验3编写一个程序,程序运行时,要求用户输入的密码是:hello。

如果用户输入了正确的密码。

程序将输出“你好,欢迎你!”。

程序允许用户2次输入的密码不正确,一旦超过2次,程序将立刻退出。

3)在本机的磁盘系统中,找一个文件夹,利用File类的提供方法,列出该文件夹中的所有文件的文件名和文件的路径,执行效果如下:路径是xxx的文件夹内的文件有:文件名:abc.txt路径名:c:\temp\abc.txt--------------------------------------------文件名:def.txt路径名:c:\temp\def.txt知识点:File管理4)使用java的输入输出流将一个文本文件的内容读出并在控制台将文件中的内容打印出来。

(参考书上P289页)5)从控制台输入一串字符串,将该串字符串写入到磁盘某位置上的out.txt文件中去。

(参考教材P290页)6)使用java的输入输出流将一个文本文件的内容按行读取,每读一行就顺序添加行号,并写入到另一个文件中.7)定义一个Person类,包含姓名、年龄、身份证号码属性。

有一个带参数的构造方法用于对所有属性赋值,还有一个study的方法,里面只打印一条“我喜欢学习”的话。

写一个Test类,里面实例化若干个Person对象,并将这些对象写入到obj.txt文件中去。

8)创建c:/test.txt文件并在其中输入"hello world"创建一个输入流读取该文件中的文本并且把小写的l变成大写L再利用输出流写入到d:\test.txt中实现步骤:(1)在本地硬盘C盘下创建一个文件test.txt(2)创建一个包含main()方法的类,并在main中编写代码(3)运行代码并且测试结果实现过滤器的功能效果显示:知识点:IO字符流、String常用方法3.实验步骤略4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。

第九章:输入输出重定向

第九章:输入输出重定向
例子:cat f1f2 >f1会导致文件f1的内容丢失。
9.5错误重定向-2>和2>>
任何命令,只要能产生错误信息到标准错误,都可以将错误信息重定向到其它的文件
例子:
$ cp 2>cp.err创建/覆盖
$ cp 2>>cp.err创建/增加
$
$ morecp.err
Usage: cp [-f] [-i] [-p]source_filetarget_file
所以,当指明一个错误重定向的时候,你必须指明你想要捕获是信息流为2的信息。为了重定向标准错误(2>),在2和>之间不能有空格。同输出重定向相似的是,如果需要,会创建一个文件,或者覆盖已经存在的文件。你能够使用(2>>)来在一个已存在的文件末尾添加信息。
从管理员的观点来看这种机制十分有用。通常你只关心命令出错或经验问题。而将错误信息同普通的输出信息分离,使你可以很容易捕获这些错误信息,形成和维护一个日志文件,其中记;
任何命令,只要能从标准输入得到的输入,都可以被重定向从另外一个文件得到输入
例子:
$ cat remind
your mother’s birthday is November 29
$ mail user3 < remind
$ mail
$ From user3 Mon July 15 11:30 EDT 1993
从标准输入得到输入使用命令行参数重定向输入
$ cat回车
在此输入文本
ctrl + d结束
输入的文本的内容在这里显示
$ cat file
显示文本的内容
$ cat < file
显示文本的内容

第9章 输入输出流(文件操作)

第9章 输入输出流(文件操作)

ios
ifstream
istrstream
ofstream
ostrstream
istream_withassign
iostream
ostream_withassign
fstream
strstream
iostream_withassign
9.5 文件操作与文件流
9.5.2 文件流类及其流对象 如果以磁盘文件为对象进行输入输出,必须先 定义一个文件流类的对象,通过文件流对象将数 据从内存输出到磁盘文件,或者通过文件流对象 从磁盘文件将数据输入到内存。 ofstream outfile; //建立一个输出文件流对象outfile ifstream infile; //建立一个输入文件流对象infile
#include <iostream> #include <fstream> using namespace std; int main(){ fstream ioFile; ioFile.open("C:\\dk\\a.dat",ios::out); ioFile<<"张三"<<" "<<76<<" "<<98<<" "<<67<<endl; ioFile<<"李四"<<" "<<89<<" "<<70<<" "<<60<<endl; ioFile<<"王十"<<" "<<91<<" "<<88<<" "<<77<<endl; ioFile<<"黄二"<<" "<<62<<" "<<81<<" "<<75<<endl; ioFile<<"刘六"<<" "<<90<<" "<<78<<" "<<67<<endl; ioFile.close(); return 0; }

第9章输入输出流和文件操作精品PPT课件

第9章输入输出流和文件操作精品PPT课件
* 其中pathname和child指定文件名;
* parent指定目录名,目录名可以是字符串,也可以 是File对象。
9.4.1 文件类File
例如: * = new File("my"); //在当前目录中,以指定文件名创建一个文件对象 * = new File(".",""); //目录也是以文件形式保存的,称为目录文件,创建 一个目录文件对象,表示当前目录 * = new ,"my"); //在dir目录中,以指定文件名创建一个文件对象
文件或目录的路径名由“/“或者“\“分割; * = new File("C:",""); //表示C盘根目录 * = new File("C:/",""); * = new File("C:\\","");
9.4.1 文件类File
2. File类提供的方法
创建一个文件对象后,可以用File类提供的方法来 获得文件的属性信息。
9.1.1 操作系统中的文件和目录概念
1. 文件与文件系统 2. 目录结构与文件检索 3. 文件的逻辑结构
9.1.1 操作系统中的文件和目录概念
4. 文件的存取方法
5. 文件的使用
9.1.2 程序设计语言中的文件类型
1. 文件类型概念
2. 文件与数组的区别
9.1.3 流的概念
1. 流的定义和作用
9.2.3 Java的标准输入/输出
【例9.1】 标准输入/输出.
9.2.4 文件字节输入/输出流类
1. 类
2. 类
9.2.4 文件字节输入/输出流类

文件输入输出流

文件输入输出流
从程序的角度来确定输入输出
输出流:写文件ofstream
(1)创建文件对象,与具体文件建立关联
ofstream fout; fout.open(“test.txt”); (2)进行写文件操作 int i=10; fout<<i; (3)关闭文件 fout.close();
ofstream fout ("test.txt");
文件打开模式
打开模式 ios::out ios::in ios::ate ios::app ios::trunc ios::nocreate ios::replace ios::binary
含义 打开以进行写入 打开以进行读取 在打开时查找到 文件结尾 追加到文件结尾 如果文件存在则删除 如果文件不存在则打开失败 如果文件已存在 则打开失败 打开一个二进制文件
打开一个文件并删除所有内容 ofstream fout("TEST.TXT"); ofstream fout("TEST.TXT",ios::out); ofstream fout("TEST.TXT",ios::out|ios::trunc);
打开一个文件并追加内容 ofstream fout("TEST.TXT",ios::app);
读写操作 文本文件:使用<<,>>运算符 二进制文件:用函数成员 get、put、read、write等
关闭文件:使用成员函数close, 如:fout.close();
打开一个文件进行二进制输出 ofstream fout("TEST.TXT",ios::binary);
检查打开是否成功 if(fout){...}或

微型计算机课件 第9章 输入输出方法及常用的接口电路

微型计算机课件 第9章 输入输出方法及常用的接口电路

(3) 数据缓冲电路:接口电路输入/输出的数据、控制及状 态信息都是通过此缓冲电路传送的,它和系统的数据总线相连, 能起隔离、缓冲作用。
并不是所有接口都具备上述全部功能的。接口需要哪些功 能取决于I/O设备的特点,有的还需要专用的I/O接口电路。
I/O接口电路按不同方式分类主要有以下几种: (1) 按数据传送方式分类,可分为并行接口和串行接口; (2) 按功能选择的灵活性分类,可分为可编程接口和不可 编程接口; (3) 按通用性分类,可分为通用接口和专用接口; (4) 按数据控制方式分类,可分为程序型接口和 DMA(Direct Memory Access)型接口。程序型接口一般都可采 用程序中断的方式实现主机与I/O设备间的信息交换。DMA型 接口用于连接高速的I/O设备如磁盘、光盘等大信息量的传输。
9.1.3 I/O接口的其他功能 1.对信号的形式和数据格式进行交换与匹配 CPU只能处理数字信号,信号的电平一般在0~5 V之间,
而且提供的功率很小。而外部设备的信号形式是多种多样的, 有数字量、模拟量(电压、电流、频率、相位)、开关量等。所 以,在输入输出时,必须将信号转变为适合对方需要的形式。 如将电压信号变为电流信号,弱电信号变为强电信号,数字信 号变为模拟信号,并行数据变为串行数据。
2.提供信息相互交换的应答联络信号 计算机执行指令时所完成的各种操作都是在规定的时钟信 号下完成的,并有一定的时序。而外部设备也有自己的定时与 逻辑控制,通常与CPU的时序是不相同的。外设接口就需将外 设的工作状态(如“忙”、“就绪”、“中断请求”)等信号及 时通知CPU,CPU根据外设的工作状态经接口发出各种控制信 号、命令及传递数据,接口不仅控制CPU送给外设的信息,也 能缓存外设送给CPU的信息,以实现CPU与外设间信息符合时 序的要求,并协调地工作。

第9章:输入和输出流

第9章:输入和输出流

9.1.2 流对象
1. 建立流对象
创建输入输出流对象的常用构造方法用2种,如:
FileInputStream (String name), 直接指定的文件名创建输入流 FileInputStream (File filename), 用文件对象创建输入流。
创建FileOutputStream类、FileReader类和FileWriter类的 流对象与FileInputStream完全类似。
(1) File (String s),由 s 确定 File 对象的文件名。
(2) File (String directory , String s) s确定文件名。
9.1.2 流对象
Java 程序的输入和输出流称为流对象, 输入输出流由文件名 或 File 对象创建。

使用以上三个方法时,如果在读数据之前,已到达输入的末端位置,没有 读入一个字节数据,用返回-1 表示流在读之前已结束。
9.1.2 流对象
2. 输入流的常用方法
FileReader类包含下面用于读字符和字符数组的方法:
(1)int read(), 从输入流读取下一个字符。 返回的整数即该字符的 Unicode值。如果读前已到流的末尾,则返回-1。 (2)int read (char b[]), 从输入流读取长度为 b.length 的字符数据,写入 到字符数组 b,并返回实际所读取的字符数。 (3)int read (char b[], int off, int len),从数据流中读取长度为 len 的字 符数据,写入到字符数组 b 中从下标 off 开始的数组元素中,并返回实际读 取的字符数。
BufferedWriter 类是提供缓冲式输出的类。

第9章 输入输出流和文件操作

第9章 输入输出流和文件操作
1. FileInputStream类 类
2. FileOutputStream类 类
15
9.2.4 文件字节输入 输出流类 文件字节输入/输出流类
【例9.2】使用文件字节输入 输出流实现 】使用文件字节输入/输出流实现 文件的输入/输出操作 输出操作. 文件的输入 输出操作
16
9.2.5 数据字节输入 输出流类 数据字节输入/输出流类
4
9.1.1 操作系统中的文件和目录概念
1. 文件与文件系统 2. 目录结构与文件检索 3. 文件的逻辑结构
5
9.1.1 操作系统中的文件和目录概念
4. 文件的存取方法
5. 文件的使用
6
9.1.2 程序设计语言中的文件类型
1. 文件类型概念
2. 文件与数组的区别
7
9.1.3 流的概念
1. 流的定义和作用
1. DataInputStream类 类
2. DataOutputStream类 类
17
9.2.5 数据字节输入 输出流类 数据字节输入/输出流类
【例9.3】将Fibonacci序列值写入一个整数 】 序列值写入一个整数 类型文件中. 类型文件中
18
9.2.6 对象输入 输出流类 对象输入/输出流类
34
9.4.1 文件类 文件类File
(4)目录操作方法 目录操作方法 public boolean mkdir(); //创建指定目录,正常建立时返回true 创建指定目录,正常建立时返回 创建指定目录 public String[] list(); //返回目录中的所有文件名字符串 返回目录中的所有文件名字符串 public File[] listFiles(); //返回目录中所有文件对象 返回目录中所有文件对象

第 9 章(2)━━文件输入输出流

第 9 章(2)━━文件输入输出流

C++程序设计第9章(2)━━文件输入输出流主要内容●数据文件●文件I/O流类体系●文件的使用━━定义文件流、打开文件、读/写操作、关闭文件●文件的随机访问●文本文件的使用●二进制文件的使用●数据文件与对象●串I/O流类体系(选读)●串流的定义和使用(选读)●程序文件:源程序文件(.cpp)、目标文件(.obj)、可执行文件(.exe)等。

●数据文件:指存储在磁盘上,由文件名标识的一组数据信息的集合。

根据磁盘文件中数据的组织形式,可分为:文本文件、二进制文件。

●文本文件(ASCII文件、字符文件):①在文本文件中,数据是按ASCII码格式存储,一个数据对应一个字符序列,一个字符对应一个字节,字节中存放的是该字符的ASCII码。

文本文件中的数据可以直观显示,便于阅读。

但是,程序对其进行读取/写入时,一般需做数据格式上的转换!②程序输出时,将内存中要输出的数据,从内存中内部存储格式的数据(二进制)转换成字符序列格式的数据后,再写入文本文件中。

字符序列中的每个字符在文本文件中占用一个字节,存放的是该字符的ASCII码。

③程序输入时,从文本文件中读取一个字符序列格式的数据,将字符序列格式的数据转换成内存中内部存储格式的数据(二进制)后,再赋给内存中对应的变量,而该数据在内存中的内部存储格式是由对应变量的类型决定的。

二进制文件(内部格式文件、字节文件):①在二进制文件中,数据是按其在内存中的内部格式存储,一个数据对应若干个字节,字节中存放的二进制码与内存中的相同。

二进制文件中的数据不能直观显示,无法阅读。

但是,程序对其进行读取/写入时,无需做任何数据格式上的转换!②程序输出时,将内存中要输出的数据,按其在内存中内部存储格式(二进制),不做任何转换,原样写入二进制文件中。

③程序输入时,从二进制文件中读取若干个字节,不做任何转换,直接赋给程序中对应的变量,而读取的字节数是由对应变量的类型决定的。

【例】int a = 100000 ; 则在内存中占4 个字节,以整数形式存放。

文件输入输出流

文件输入输出流

文件输入输出流文件输入输出流是在计算机中进行文件读写操作的一种机制。

通过文件输入输出流,我们可以从文件中读取数据或者将数据写入文件中。

在程序开辟中,文件输入输出流常用于读取配置文件、读取和写入日志文件、进行数据持久化等操作。

文件输入输出流的基本概念和使用方法如下:1. 文件输入流(FileInputStream):用于从文件中读取数据。

- 创建文件输入流对象:可以使用FileInputStream类的构造方法来创建一个文件输入流对象。

需要提供文件路径作为参数。

- 读取数据:可以使用文件输入流对象的read()方法来读取数据。

read()方法会返回一个整数值,表示读取到的字节数据。

当读取到文件末尾时,read()方法会返回-1。

2. 文件输出流(FileOutputStream):用于将数据写入文件中。

- 创建文件输出流对象:可以使用FileOutputStream类的构造方法来创建一个文件输出流对象。

需要提供文件路径作为参数。

如果文件不存在,会自动创建新文件;如果文件已存在,会清空文件内容。

- 写入数据:可以使用文件输出流对象的write()方法来写入数据。

write()方法接受一个字节数组作为参数,将字节数组中的数据写入文件中。

文件输入输出流的使用示例:```javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileIOExample {public static void main(String[] args) {// 文件输入流示例try {FileInputStream inputStream = new FileInputStream("input.txt");int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);}inputStream.close();} catch (IOException e) {e.printStackTrace();}// 文件输出流示例try {FileOutputStream outputStream = new FileOutputStream("output.txt"); String data = "Hello, World!";byte[] bytes = data.getBytes();outputStream.write(bytes);outputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在上面的示例中,我们通过文件输入流读取了名为"input.txt"的文件中的数据,并使用文件输出流将字符串"Hello, World!"写入了名为"output.txt"的文件中。

第09章 输入输出流和文件操作(修改2缩减)

第09章  输入输出流和文件操作(修改2缩减)
实现文件的输入/输出操作。
文件输入操作
文件输出操作 文件复制操作
9.2.4 数据字节流
以前只能写字节数据 现在任何JAVA数据 数据流允许程序按与机器无关的风格读 类型的数据都能写 了!! 取或写入数据。可以读取或写入任何Java类型
数据。
数据输入流DataInputStream
数据输出流DataOutputStream
写一个字节,数据传输效率低。为提高效率,将一块内
存空间设计成缓冲区。配备缓冲区的流称为缓冲流。

当向流写入数据时,数据被发送到缓冲区,当缓冲区
满时,系统将数据全部发送到相应的设备。如果在此 之前要传输数据,可以使用flush()操作;

当从流读取数据时,系统实际从缓冲区读。当缓冲区 空时,系统就从相关设备自动读取数据充满缓冲区。
标准错误输出System.err对象是显示器屏幕
★ 【例9.1】 标准输入/输出
输入 ” abc123” 标准输入流 会抛出异常 键盘 程序 S y s te m .in .re a d () 字节数组 b u ffe r 对应 字符 a b c 1 2 3 0 97 1 98 2 99 3 49 4 50 5 51 6 13 7 10 实际读入8 个字节 8 „ 511
OutputStream类的子类
9.2 .1抽象字节流
1、字节输入流InputStream类 :所有面向字节的 输入流的超类。
2、字节输出流OutputStream类:所有面向字节 的输出流的超类。
字节流相关内容: 标准输入/输出流 文件字节流 数据字节流 对象字节流
9.2.2 Java标准输入/输出
9.1流的基本概念
java.io包中的数据流
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件输入输出流【学习要点】1.掌握文件流类体系的组成和应用。

2.掌握文件的使用方法━━定义文件流、打开文件、读/写操作、关闭文件3.掌握文本文件的使用━━>> 、<< 、get()、getline()、put()4.掌握二进制文件的使用━━read()、write()5.掌握文件的随机访问━━seekg()、tellg()、seekp()、tellp()6.掌握文件与对象━━在构造函数中通过磁盘数据文件来初始化新建立的对象━━在析构函数中将对象中的数据保存在磁盘数据文件------------------------------------------------------------------------------------------------------------------------------------------------【例题分析】1.下面程序的运行结束后,显示器上输出结果是______,数据文件data.dat中保存的结果是______。

#include<fstream.h>void main( ){ ofstream outf ("data.dat") ;for ( int i=10;i<20;i++)if (i%3==0) cout<<i<<'\t';else outf<<i<<'\t';outf.close(); }【答案】显示器上输出结果是:12 15 18数据文件data.dat中保存的结果是:10 11 13 14 16 17 19【解析】程序中循环控制变量i共循环10次,取值范围为10~19,其中能被3整除的通过标准输出流cout输出到显示器,其余的才通过自定义文件流outf输出到数据文件data.dat中。

2.若单词间只有一个空格,下面程序运行后显示器上的输出结果是______。

#include<fstream.h>#include<stdlib.h>void main(){ char c, *str="You are a student!" ;fstream inout ( "mydata.dat", ios::in|ios::out|ios::binary ) ;if ( !inout ) { cout<<"文件打开出错!\n"; exit(1); }inout<<str<<endl;inout.seekg ( 5, ios::beg );while ( ! inout.eof() ) { inout.get(c); if (c==' ') cout<<inout.tellg()<<'\t'; }cout<<endl;inout.close(); }【答案】8 10【解析】①程序中按读/写方式打开一个二进制文件mydata.dat。

②对mydata.dat文件先写入一个字符串,由于字符的内部存储格式与ASCII码一样,所以此处可以用插入运算符“<<”替代write()来写。

③通过inout.seekg(5,ios::beg);语句把文件指针定位于第5号字符位置(即定位于r字符。

注意:文件指针位置为0时,表示指向文件的起始位置)。

④然后依次读取字符,当读取字符为空格,则通过tellg()函数得到当前字符的位置。

值得注意的是,起始字符位置从0开始算起,则are后面的两个空格位置应该是7和9,但程序结果并非是7和9而是8和10,原因是读取字符空格后,文件指针已经移到后面的一个字符上,所以程序输出的是空格后的字符位置。

*************************************************************************************************************************** 3.编写面向过程的程序实现以下工作:将存放在两个文本文件(data1.txt、data2.txt)中已按递增顺序排列好的两个整数序列(两个文件中的整数个数不祥,但已按递增顺序排列好,整数之间以若干空格、或者回车换行间隔),进行合并统一递增排序后写入另一个文本文件mydata.txt中(按每行4个整数的格式),而原始数据文件data1.txt和data2.txt中的内容保持不变。

【面向过程程序的算法提示】●文件读入:定义一个函数input(),完成将指定文件中的数据全部读入一个数组的工作,并返回数组中有效数据的个数。

int input ( char *filename , int *p , int max=100 ) ;●有序合并:定义一个函数combine(),完成数组a、b有序合并到数组c的工作。

有序合并数组a和数组b的算法是:使用三个下标指针pa、pb和pc,初始值都为0,分别代表指向a、b、c三个数组的0号元素。

从0号元素开始依次比较a、b两个数组中的元素,将较小者放入数组c中,然后pc增1,而pa、pb中的一个增1,另一个不变;若比较中出现两个元素相等,则先选择数组a的元素放入数组c中,然后pa增1,pc也增1。

循环以上过程,直到a、b两个数组之一的元素比较完毕,然后将另一个未比较完毕的数组剩余元素拷贝到数组c的尾部。

void combine ( int *a, int m, int *b, int n , int *c ) ;●写入文件:定义一个函数output(),完成将一个数组中的整数写入指定文件的工作,按每行4个整数的格式写入。

void output ( char *filename , int *p , int k ) ;●显示输出:定义一个函数show(),完成将一个数组中的整数显示输出的工作,按每行4个整数的格式输出。

void show ( int *p , int mnk ) ;●编写main( ) 函数:①定义两个命名数组a和b:int a[100] , b[100] ; 数组空间大开小用。

调用两次input()函数:分别将两个文本文件data1.txt和data2.txt中已按递增顺序排列好的两个整数序列读入数组a和b中,并返回两个数组中有效元素的个数m和n。

②为动态数组c分配空间:c = new int [ m+n ] ;③调用combine()函数:完成数组a、b有序合并到数组c的工作。

④调用output()函数:完成将动态数组c中的整数写入文本文件mydata.txt中的工作。

⑤释放动态数组c的空间。

●程序运行前的准备工作:先用记事本建立两个用于存放原始数据的文本文件data1.txt和data2.txt,并输入一些按递增顺序排列好整数,整数之间以若干空格、或者回车换行间隔。

例如:data1.txt:-23 -17 56 67 88123 187 256 667886 999data2.txt:-323 -217 -56 567 887923 987 2256 66768186 9999 56789 66666●程序运行后的核对工作:使用记事本打开所生成的文本文件mydata.txt,核对文件内容是否正确。

【面向过程程序的参考答案】# include< fstream.h ># include< iostream.h ># include< iomanip.h >//定义函数input(),完成将指定文件中的数据全部读入一个数组的工作int input ( char *filename , int *p , int max ){ifstream fin ( filename) ; //打开指定的输入文件if ( ! fin ) { cout<< filename <<”文件不存在\n” ; return 0 ; } //打开失败int temp , count = 0 ;while ( ! fin.eof() && count<=max ) //未到达流结尾,则进入循环体{ fin >> temp ;if ( fin. eof( ) == 0 ) p[ count++ ]= temp ; //若读到整数,则放入数组中}fin. close( ) ; //关闭输入文件return count ;}//定义函数combine(),完成数组a、b有序合并到数组c的工作void combine ( int *a, int m, int *b, int n , int *c ) {int pa=0 , pb=0 , pc=0 ;while ( pa<m && pb<n )if ( a[ pa ] <= b[ pb ] ) c[ pc++ ] = a[ pa++ ] ;else c[ pc++ ] = b[ pb++ ] ;if ( pa==m ) while ( pb<n ) c[ pc++ ] = b[ pb++ ] ;if ( pb==n ) while ( pa<m ) c[ pc++ ] = a[ pa++ ] ;return ;}//定义函数output(),完成将一个数组中的整数写入指定文件的工作void output ( char *filename , int *p , int k ) {ofstream fout ( filename) ; //打开指定的输出文件for ( int i=0; i<k; i++){ fout << setw(10) << p[ i ] ;if ( (i+1)%4 == 0 ) fout << endl ; }fout << endl ;fout. close( ) ; //关闭输出文件return ;}//定义函数show(),完成将一个数组中的整数显示输出的工作void show ( int *p , int mnk ){for ( int i=0; i<mnk; i++ ){ cout << setw(10) << p[ i ] ;if ( (i+1)%4 == 0 ) cout << endl ; }cout << endl ;return ;}//主函数void main ( ){int a[100] , b[100] ;int m , n , k ;m = input ( “data1.txt”, a, 100 ) ;n = input ( “data2.txt”, b, 100 ) ;k = m+n ;int *c = new int [ k ] ;combine ( a, m, b, n, c ) ;output ( “mydata.txt”, c, k ) ;cout << “数组a中的数据为:\n” ;show ( a, m ) ;cout << “数组b中的数据为:\n” ;show ( b, n ) ;cout << “数组c中的数据为:\n” ;show ( c, k ) ;delete [ ] c ;}*************************************************************************************************************************** 6.编写面向对象的程序实现以下工作:将存放在两个文本文件(data1.txt、data2.txt)中已按递增顺序排列好的两个整数序列(两个文件中的整数个数不祥,但已按递增顺序排列好),进行合并统一递增排序后写入另一个文本文件mydata.txt中(按每行4个整数的格式),而原始数据文件data1.txt和data2.txt中的内容保持不变。

相关文档
最新文档