字符流和标准输入输出流
《Java基础入门》_课后习题答案大一计算机专业7
![《Java基础入门》_课后习题答案大一计算机专业7](https://img.taocdn.com/s3/m/d3249a1dba0d4a7303763ab0.png)
《Java基础入门》课后习题答案第7章IO(输入输出)一、填空题1、Java中的I/O流,按照传输数据不同,可分为:字节流、字符流2.在Buffer与Channel交互时,数据从:Channel、读取到Buffer 中,或从Buffer入到Channel 中。
3.用于将字节流转换为字符流的是:InputStreamReader、OutputStreamWriter2、NIO主要有三大核心部分:Buffer、Channel、Selector5、Java中提供了一个类:RandomAccesseFile,它不但具有读写文件的功能,而且可以随机地从文件的任何位置开始执行读写数据的操作。
二、判断题1. 如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。
错2.对象序列化是指将一个Java 对象转换成一个I/0 流中字节序列的过程。
对3.Channel 是一个接口对象,它类似于传统的流对象。
对4.InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。
对5,BufferedInputStream 和BufferedOutputStream 不是字节缓冲流。
错三、选择题1.下面选项中,哪些是标准输人输出流?(多选) (AB)A. System.InB.System. OutC.InputStreamD.OutputStream2.File类中以字符串形式返回文件绝对路径的方法是哪一项?(C)A. getParent()B. getNamel)C. getAbsolutePathOD. getPath()3.以下创建RandomAccessFile类实例对象的代码,哪些是正确的?(多选)(AB)A.new RandomAccessFile(new File("D:\\itcast\\dirl\test. java"),”rw”);B.new RandomAccessFile("D:\\itcast\\dirl\test. java","r");C. new RandomAccessFile("D:\\itcast\\dir1\\test.java");D. new RandomAccessFile("D:\\itcast\\dir1\\test.java","wr")4.以下选项中,哪个流中使用了缓冲区技术? (A)A. BufferedOutputStreamB. FileInputStreamC. DataOutputStreamD. FileReader5.以下选项中,关于Java NIO 中Buffer类的常用说法正确的是哪一项?(B)A.clearO方法会清除缓冲区数据,并将position 设置为0.limit 设置为capacity OB.fip()方法先将limit 设置为当前position 位置,然后再将pson设置为0C.mark()方法用于设置Buffer 的标记(mark),其能在0 与limi 之间做标记D.rewind()方法将position 设置为0,并设置mark 标记四、简答题1、简述I/O 流的概念。
字符流分类详细介绍和各种字符流类介绍与使用字符集
![字符流分类详细介绍和各种字符流类介绍与使用字符集](https://img.taocdn.com/s3/m/cc1bf60fc4da50e2524de518964bcf84b9d52d0e.png)
字符流分类详细介绍和各种字符流类介绍与使⽤字符集1、字符流:字节流不能操作Unicode字符,由于Java采⽤16位的Unicode字符,即⼀个字符占16位,所以要使⽤基于字符的输⼊输出操作。
所以创造了字符流,以提供直接的字符输⼊输出的⽀持。
2、字符流类的层次结构:2.1、输⼊流的类层次结构:2.2、输出流的类层次结构3、字符流的顶层抽象类:Reader和Writer。
public abstract class Reader extends Object implements Readable, Closeable⽤于读取字符流的抽象类。
⼦类必须实现的⽅法只有 read(char[], int, int) 和 close()。
但是,多数⼦类将重写此处定义的⼀些⽅法,以提供更⾼的效率和/或其他功能。
public abstract class Writer extends Object implements Appendable, Closeable, Flushable写⼊字符流的抽象类。
⼦类必须实现的⽅法仅有 write(char[], int, int)、flush() 和 close()。
但是,多数⼦类将重写此处定义的⼀些⽅法,以提供更⾼的效率和/或其他功能。
4、java.io包中⽤于处理字符流的基本类InputStreamReader和OutputStreamWriter:InputStreamReader是字节流通向字符流的桥梁:它使⽤指定的 charset 读取字节并将其解码为字符。
它使⽤的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
OutputStreamWriter 是字符流通向字节流的桥梁:可使⽤指定的 charset 将要写⼊流中的字符编码成字节。
它使⽤的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
4.1、InputStreamReader主要构造⽅法:InputStreamReader(InputStream in) 创建⼀个使⽤默认字符集的 InputStreamReader。
输入输出流
![输入输出流](https://img.taocdn.com/s3/m/40e3a841a8956bec0975e31b.png)
输入输出流的相关简介系别:计算机技术与信息管理系班级: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程序需要从数据源读取数据时,会开启一个到数据源的流。
数据源可以是文件,内存或者网络等。
同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。
毕向东Java基础[07-IO]
![毕向东Java基础[07-IO]](https://img.taocdn.com/s3/m/412c0db5f121dd36a32d8216.png)
—高级软件人才实作培训专家! IO包中的其他类
操作基本数据类型
• DataInputStream与DataOutputStream • ByteArrayInputStream与ByteArrayOutputStream • CharArrayReader与CharArrayWrite
操作字节数组
• 当某一功能要重复使用时。
练习: 思考:
• 列出一个文件夹下所有的子文件夹以及子文件
• 1,删除一个目录的过程是如何进行的?
北京传智播客教育
—高级软件人才实作培训专家! IO包中的其他类
打印流
• 可以直接操作输入流和文件。 序列流 • 对多个流进行合并。 操作对象
—高级软件人才实作培训专家! 字符流——创建文件
创建流对象,建立数据存放文件
• • •
FileWriter fw = new FileWriter(“Test.txt”); fw.write(“text”);
调用流对象的写入方法,将数据写入流 关闭流资源,并将流中的数据清空到文件中。
fw.close(); 不写close方法会有什么结果呢? 如果想在原有文件上继续加入新的数据呢?
缓冲区的出现提高了对数据的读写效率。 对应类
• BufferedWriter • BufferedReader
缓冲区要结合流才可以使用。 在流的基础上对流的功能进行了增强。
北京传智播客教育
—高级软件人才实作培训专家! 装饰设计模式
对原有类进行了功能的改变,增强。 装饰模式的基本格式。 它与继承有什么不同? 了解BufferedReader的原理。 练习:
IO操作手册
![IO操作手册](https://img.taocdn.com/s3/m/f8406742852458fb770b56a4.png)
IO操作手册1 IO API1.1 类文件输入流:FileReader BufferedReader字符流:输出流:FileWriter BufferedWriter PrintWriter输出流:FileOutputStream BufferedOutputStream PrintStream 字节流:DataOutputStream输入流:FileInputStream BufferedInputStream DataInputStream输入流:InputStreamReader字符字节通用流:输出流:OutputStreamWriter在数据流操作过程中通过缓冲区能大大提高I/O性能,采用数据缓冲区只需将输入与输出流用Buffered*封装一次即可1.2 类说明FileOutputStream 用于写入诸如图像、文件数据之类的原始字节的流FileInputStream 用于读取诸如图像、文件数据之类的原始字节流DataOutputStream写入java基本类型数据字节流(也可写入文件数据)readUTF方法用于读取用UTF-8 修改版格式编码的字节流DataInputStream 读写由DataOutputStream写入的java的基本类型的方法,如readInt,readLong。
writeUTF方法采用平台无关方式的UTF-8 修改版编码写入字节流Buffered*能够在内存里建立一个缓冲数据区,当写文件的时候,能起到缓冲的作用,并且可以自定缓冲区大小,BufferedOutputStream(OutputStream out, int size) InputStreamReader 是从字节流到字符流的桥梁:它读入字节,并根据指定字符编码方式,将之转换为字符流显示。
使用的编码方式可能由名称指定,如InputStreamReader(InputStream in, String charsetName),charsetName就是用于指定字符编码方式的OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的编码方式将要向其写入的字符编码为字节。
拓展知识9-1 标准输入输出设备文件和流
![拓展知识9-1 标准输入输出设备文件和流](https://img.taocdn.com/s3/m/98407f91da38376baf1fae7b.png)
拓展知识9-1 标准I/O设备文件和流C程序中经常有大量对文件的输入输出操作,它构成了程序的重要部分,因而C语言提供了很多输入输出的函数,用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件系统(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件系统(也称非标准文件(流)输入输出(I/O)系统)。
我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf,printf 等等,这些通过控制台(键盘、显示器等)进行I/O的操作,可以看作标准文件输入输出系统的一些特例。
任何C程序执行时,系统都定义了5个标准设备文件供使用。
系统自动打开的5个标准设备文件为:键盘(标准输入)stdin 0显示器(标准输出)stdout 1显示器(标准错误)stderr 2串行口(标准辅助)stdoux 3打印机(标准打印)stdprn 4在C中可将数据的输入输出看作是数据的流入和流出,这样不管是普通(磁盘)文件或者是物理设备(打印机、显示器、键盘等),都可看作一种流的源和目的,视他们为同一种东西,而不管其具体的物理结构,即对他们的操作,就是数据的流入和流出。
这种把数据的输入输出操作,抽象化为一种流,而不管它的具体结构的方法很有利于编程,而涉及流的输入输出操作函数可用于各种对象,与其具体的实体无关,即具有通用性。
在C语言中流可分为两大类,即文本流(text stream)和二进制流(binary stream)。
所谓文本流是指在流中流动的数据是以字符形式出现。
在文本流中,'\n'被换成回车CR和换行LF的代码0DH和0AH。
而当输出时,则0DH和0AH被换成'\n'。
二进制流是指流动的是二进制数字序列,若流中有字符,则用一个字节的二进制ASCII码表示,若是数字,则用一个字节的二进制数表示。
在流入流出时,对\n符号不进行变换。
【示例】2001这个数,在文本流中用其ASCII码表示为:50 48 48 49共占4字节。
第九章输入输出处理
![第九章输入输出处理](https://img.taocdn.com/s3/m/fc8ecab6fbb069dc5022aaea998fcc22bdd1437d.png)
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字节或更小。
输入输出流-2.输入输出流、文件流
![输入输出流-2.输入输出流、文件流](https://img.taocdn.com/s3/m/5fc29bc658f5f61fb736662c.png)
4.5
文件输入输出流
FileInputStream 用来打开一个输入文件,可以从文件读取一个或几个字节。 若文件不存在,则会产生例外FileNotFoundException,这是一个 非运行时例外,必须捕获或声明抛弃; FileOutputStream 用来打开一个输出文件,可以将一个或几个字节写入文件。 若文件不存在,则创建一个新的文件,否则原文件被覆盖。 FileReader
4
本节学习目标
熟悉字节文件流和字符文件流 熟悉输入输出流的常用方法 掌握字节文件输入输出流的使用 掌握字符文件输入输出流的使用
5
文件输入输出流
任务1:通讯录以文本形式存储,读取文件内容,并输出显示(在读取 时一次读取一个字节或一个字符) 成果体验
任务步骤: 创建文件输入流对象 读取文件中的个人通讯方式 输出显示 检测运行是否成功 任务2:向通讯录中写入新的联系人及联系方式.
15
字节流抽象类的使用
把输入流中的所有内容复制到输出流中
public void copy(InputStream in, OutputStream out) throws IOException { byte[] buf = new byte[4096]; int len = in.read(buf); while (len != -1) { out.write(buf, 0, len); 一般2个抽象类使用在形参中, 一般2个抽象类使用在形参中, len = in.read(buf); 可以接受任何其子类对象 } }
注意:new File()只是生成文件对象,不是生成真正的文件,生成文 件用creatNewFile(),生成文件目录mkdir()或者mkdirs() 文件是有扩展名,用creatNewFile() 目录无扩展名,用mkdir()或者mkdirs() 。表示当前目录
常用流
![常用流](https://img.taocdn.com/s3/m/6a5e891fff00bed5b9f31d8f.png)
流机制是JAVA及C++中的一个重要的机制,通过流能使我们能自由地控制包括文件,内存,IO设备等等中的数据的流向。
如:可以从文件输入流中获取数据,经处理后再通过网络输出流把数据输出到网络设备上;或利用对像输出流把一个程序中的对象输出到一个格式流文件中,并通过网络流对象将其输出到远程机器上,然后在远程机器上利用对象输入流将对象还原。
像这些机制是别的高级语言所不能比拟的。
但要掌握好这些流对象,流的概念是很重要的。
流是一串连续不继的数据的集合,就像水管一里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。
数据写入程序可以是一段一段地向数据流管道中写入数据,这些数据段会按先向顺序形成一个长的数据流。
对数据的读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。
不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。
在JAVA中的流按流动方向可以分为输入流及输出流两种,按流的处理位置可分为节点流和包装流。
输入流,输出流是以程序为参考点来说的,所谓的输入流就是程序从中获取数据的流,输出流就是程序要其写数据的流。
在输入流的一边是程序,而另一边就是流的数据源。
而输出流的一边则目标,一边就是程序。
其实流可以想像成是一条长河,在上游有一水库提供水源,河边住着一户人,随时都可以从河边取到水,同时,这户人也可以把一些废水倒进河里,使得废水可以流进大海。
这里所提到河就是一个数据的流动通道,而水库就好比是计算机上的一切数据源,包括磁盘文件,内存,IO设备,键盘等等,JAVA提供了非常完善的输入流类来把这些数据源挂接到流上使得程序能从这些输入流中获取所需的数据。
河边上的用户就是程序,它能随时随地从流中取得数据,只要有数据源挂接到这个通道上可以。
而大海就是程序处理完数据后要流向的目的地,这些目的地包抱磁盘文件,内存,IO设备,显示器等,这些目的地只是相对程序来说的,它们也可能是别的进程的输入流。
输入和输出处理PPT课件
![输入和输出处理PPT课件](https://img.taocdn.com/s3/m/dc86917eb0717fd5370cdc5d.png)
第8页/共23页
FileReader和FileWriter类 由于InputStreamReader和OutputStreamWriter字符流类在创建
流类的对象时必须以一个字节流作为原始的数据流来打开文件。为了能够 直接将一个具体的文件名的文件直接转换为字符流类的对象,在java.io 包中还为程序员提供了InputStreamReader和OutputStreamWriter字 符 流 类 的 两 个 子 类 F i l e Re a d e r 和 F i l e W r i t e r.
第13页/共23页
FileInputStream类
• 下列3种方法可创建FileInputStream对象: FileInputStream(File file) FileInputStream(FileDescription fdObj) FileInputStream(String name) • 在读文件时有几个必要流程如下: 使用文件输入流读取文件夹 处理I/O异常 从输入流中读取字节 关闭流
• 2. 读入和写出字符 • 3. 获取当前编码方式 • 4. 关闭流
第7页/共23页
BufferedReader和BufferedWriter • 为提高字符流的处理效率,可以采用缓冲机制。JDK引入了 BufferedReader和BufferedWriter类,用来对字符流进行成批的处理。 其中的方法readLine()是读出一行字符,而newLine()则是写入一行字符, 由于提供缓冲机制,把任意的输入流或输出流“捆绑”到缓冲流上将获得 性能的提高,同时也可以在创建缓冲流对象进设置缓冲区的大小。
第21页/共23页
串行化的注意事项
[初一数学]第7章 输入输出
![[初一数学]第7章 输入输出](https://img.taocdn.com/s3/m/03b931f0cf84b9d529ea7a58.png)
Java输入输出流(一)——常用的输入输出流
![Java输入输出流(一)——常用的输入输出流](https://img.taocdn.com/s3/m/bc1aa36000f69e3143323968011ca300a6c3f67f.png)
Java输⼊输出流(⼀)——常⽤的输⼊输出流1.流的概念:在Java中,流是从源到⽬的地的字节的有序序列。
Java中有两种基本的流——输⼊流(InputStream)和输出流(OutputStream)。
根据流相对于程序的另⼀个端点的不同,分为节点流和过滤流。
(1)节点流:以特定源如磁盘⽂件、内存某区域或者线程之间的管道为端点的构造输⼊输出流,是⼀种基本的流。
(2)过滤流:以其他已经存在的流为端点构造的输⼊输出流。
根据流中的数据单位分为字节流和字符流。
(1)字节流:流中的数据是以8位字节为单位进⾏读写,以InputStream和OutputStream为基础类。
(2)字符流:流中的数据是以16为字符为单位进⾏读写,以Reader和Writer为基础类。
2.字节流InputStream和OutputStream是字节流的两个顶层⽗类,提供了输⼊流类和输出流类的通⽤API。
2.1 输⼊字节流InputStream基本⽅法:(1)基本读⽅法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)(2) 关闭流:void close()(3) 返回输⼊流中还有多少可读字节 int available()(4) 跳过指定字节 long skip(long n)(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()2.2 输出字符流OutputStream基本⽅法:(1)基本写⽅法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)(2) 关闭流:void close()(3)q强制输出:void flush()3.字符流:Reader和Writer是字符流的顶层⽗类,字符流能够处理Unicode字符集中的所有字符。
Java编程语言中的IO编程与实际应用
![Java编程语言中的IO编程与实际应用](https://img.taocdn.com/s3/m/67d9c08dc67da26925c52cc58bd63186bceb9200.png)
Java编程语言中的IO编程与实际应用在计算机编程中,IO(Input/Output)编程是必不可少的一部分,它涉及到计算机内部的输入输出操作。
Java编程语言也提供了一套完善的IO编程体系,可以更加方便地进行文件的读写和网络通信。
本文将就Java编程语言中的IO编程进行详细介绍,并结合实际应用讲解其具体用法。
I. Java IO编程体系Java的IO编程体系由四个流(stream)类别组成:字节流(byte streams)、字符流(character streams)、标准IO流(Standard I/O streams)以及对象流(Object streams)。
其中,字节流操作的是原始的8位数据,而字符流则操作Unicode字符。
标准IO流包括了Java系统所提供的三个流对象:System.in、System.out和System.err。
而对象流则用于对Java对象进行序列化和反序列化操作。
字节流由InputStream和OutputStream两个抽象类组成,它们可以用于读写字节数据,比如音频、视频、图像等二进制文件。
字符流由Reader和Writer两个抽象类组成,它们可以用于读写Unicode字符,比如文本文件和XML文件。
标准IO流则包括了System.in、System.out和System.err三个类,它们分别代表标准输入、标准输出和标准错误输出。
对象流则分别由ObjectInputStream和ObjectOutputStream两个类组成,它们可以用于序列化和反序列化Java对象。
通过对象流,我们可以将Java对象保存到磁盘中,也可以从磁盘中读取Java对象。
II. Java IO编程实例以下是一些Java IO编程的实例,这些实例主要包括了文件读写、网络通信以及序列化操作。
1. 文件读写Java IO编程可以使用字节流和字符流来读写文件。
下面的代码演示了如何使用字符流来读取文本文件:```javaFileReader reader = new FileReader("filename.txt");BufferedReader br = new BufferedReader(reader);String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();reader.close();```上述代码打开文件filename.txt,并逐行读取其中的文本内容,并输出到控制台上。
第9章:输入和输出流
![第9章:输入和输出流](https://img.taocdn.com/s3/m/69d2c71ea2161479171128fd.png)
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 类是提供缓冲式输出的类。
C++的输入和输出与标准输出流
![C++的输入和输出与标准输出流](https://img.taocdn.com/s3/m/cbe4b6d4b14e852458fb5733.png)
* 掌握:输入输出的含意;文件流以及输入/输出的格式控制;标准输出在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输入时,有时出现的问题是很隐蔽的。
C++——输入、输出和文件
![C++——输入、输出和文件](https://img.taocdn.com/s3/m/1f3cf7ec534de518964bcf84b9d528ea81c72fa4.png)
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类的,因此继承了输⼊⽅法和输出⽅法。
第7章输入输出流
![第7章输入输出流](https://img.taocdn.com/s3/m/af1e9d1987c24028915fc3ba.png)
(3) cout流在内存中对应开辟了一个缓冲区, 用来存放流中的数据,当向cout流插入一个 endl时,不论缓冲区是否已满,都立即输出 流中所有数据,然后插入一个换行符,并刷 新流(清空缓冲区)。 (4) 在iostream中只对“<<”和“>>”运算符 用于标准类型数据的输入输出进行了重载, 但未对用户声明的类型数据的输入输出进行 重载。
7.2 标准输出流
标准输出流是流向标准输出设备(显示器)的 数据。
7.2.1 cout,cerr和clog流
1. cout流对象 cout是console output的缩写,意为在控制 台(终端显示器)的输出。 (1) cout不是C++预定义的关键字,它是 ostream流类的对象,在iostream中定义。 (2) 用“cout<<”输出基本类型的数据时,可 以不必考虑数据是什么类型,系统会判断数 据的类型,并根据其类型选择调用与之匹配 的运算符重载函数。
2. cerr流对象 cerr流对象是标准错误流。cerr流已被指定 为与显示器关联。cerr的作用是向标准错误 设备(standard error device)输出有关出错 信息。cerr流中的信息只能在显示器输出。 当调试程序时,往往不希望程序运行时的出 错信息被送到其他文件,而要求在显示器上 及时输出,这时应该用cerr。cerr流中的信 息是用户根据需要指定的。
例7.5 通过测试cin的真值,判断流对象是否 处于正常状态。
#include <iostream> using namespace std; int main( ) {float grade; cout<<″enter grade:″; while(cin>>grade)//能从cin流读取数据 {if(grade>=85) cout<<grade<<″GOOD!″<<endl; if(grade<60) cout<<grade<<″fail!″<<endl; cout<<″enter grade:″; } cout<<″The end.″<<endl; return 0; }
C++中输入输出流及文件流操作总结
![C++中输入输出流及文件流操作总结](https://img.taocdn.com/s3/m/667f54fe0875f46527d3240c844769eae009a3ac.png)
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中只对"<<"和">>"运算符⽤于标准类型数据的输⼊输出进⾏了重载,但未对⽤户声明的类型数据的输⼊输出进⾏重载。
如果⽤户声明了新的类型,并希望⽤"<<"和">>"运算符对其进⾏输⼊输出,按照重运算符重载来做。
输入流与输出流
![输入流与输出流](https://img.taocdn.com/s3/m/1d5e3d4fc77da26924c5b08f.png)
第八章 输入与输出流
键盘 程序
数据文件
屏幕 数据文件
综上所述,程序是数据处理中心。 无论是从键盘上读取数据或者从数据文件中读取数据都是由程序决定的。 把程序中的数据输出到屏幕上或者输出到数据文件中都是由程序决定的。
2
第八章 输入与输出流
8.1 流的概念
❖ 输入与输出流(I/O流) (1)输入流:把键盘上输入的数据或者是把数据文件中的数据 读入正在运行的程序中。(网络) (2)输出流:把正在运行的程序中的数据输出到屏幕上或者 输出到数据文件中。
5
第八章 输入与输出流
8.1 流的概念
❖ 字符流类:专门用于字符数据 ❖ 字节流类:用于一般目的
6
10.1 File类
首先讨论10.1.3节的内容,如何使用File类创建对象。对象可以是文件对象, 也可以是目录对象。
(1) 使用一个存在的文件创建一个文件对象;10.1.3 File f=new File("Example10_1.java"); 当前目录下已经存在文件: Example10_1.java
write方法的格式如下: public void write(byte b[]); public void write(byte b[],int off,int len);
作为字节流输入对象的文件,采用read方法按节读入到程序中;
作为字节流输出对象的文件,采用write方法按字节把程序的数据输出到字节 流输出对象的文件中;
10
第八章 输入与输出流
§10.1.4 使用Runtime 类运行可执行文件
◆用Runtime 类声明一个对象( Runtime类在ng包) Runtime ec;
◆ 然后使用该类的getRuntime()静态方法创建这个对象: ec=Runtime.getRuntime();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
–
– –
System.in :用于程序的输入;
System.out:用于一般输出;
对应外设为键盘
对应外设为屏幕
System.err:用于显示出错信息; 对应外设为屏幕
•
System 类的所有属性都是静态static的,调用时以类名System为前缀。
上述3个流对象均为静态属性。
基本I/O之例
//从键盘输入字符,然后在屏幕上显示输入结果
字符输出流:Writer
• Writer是一个字符流,它是一个抽象类,所 以要使用它,也必须通过其子类来实例化 它后才能使用它。 • Writer类的常用方法----查看API文档
• 示例1:HelloWorld-----(按步骤完成) • 向一个文本文件中通过字符输出流写入数据 • public static void main(String[] args) throws Exception { • File file = new File("hellowolrd.txt"); // 声明一个File对象 • Writer writer = null; // 声明一个Write对象 • writer = new FileWriter(file, true); // 通过FileWriter类来实例化 Writer类的对象并以追加的形式写入 • • String str = "字符串形式写入Helloworld"; // 声明一个要写入的字符串 • writer.write(str); // 写入文本文件中 • writer.flush(); // 刷新 • writer.close(); // 关闭字符输出流 • }
import java.io.*;
public class standardIO{ public static void main(String[] args) throws IOException { //IO操作必须捕获IO异常 char c; System.out.println("输入任一字符 "); c=(char)System.in.read();
用字节流写文件
FileOutputStream fout=null; try { fout = new FileOutputStream("e:\\t.txt"); fout.write('c'); fout.write("大家好".getBytes()); fout.flush(); }catch (FileNotFoundException ex) { ex.printStackTrace(); }catch (IOException ex) { ex.printStackTrace(); }finally{ try { fout.close(); } catch (IOException ex) { ex.printStackTrace(); } }
– (3)若需要对字节或字符流信息组织加工为数据,在已建字节流或字 符流对象上构建数据流对象。
– (4)用输入输出流对象类的成员方法进行读写操作。 – (5)关闭流对象。
字符流(Reader类和Writer类)
• 在程序中一个字符r两个专门操作字符 流的类。
System.out.println("输入的字符是 :"+c);
} }
• 如果你要保存的是一张图片或一首mp3,那么用
字节流比较合适,如果你要保存的是一段文字,
那么用字符流更合适。
用字节流读文件
FileInputStream fin=null; try { fin=new FileInputStream("e:\\t.txt"); //建立文件输入流 System.out.println(fin.available());//此方法何用?自己查文档 int i=fin.read(); while(i!=-1){ System.out.print((char)i); i=fin.read(); } } catch (IOException ex) { ex.printStackTrace(); }finally{ try { fin.close(); //关闭流 } catch (IOException ex) { ex.printStackTrace(); } }
Java输入输出处理——流
字符流、标准输入输出流
学习目标
• 理解流的概念和作用 • 理解字节流与字符流的异同 • 掌握常用的输入/输出流类读写文件的使用
输入输出流使用步骤
• 输入输出流操作的一般步骤如下: – (1)使用引入语句引入java.io包:import java.io.*; – (2)根据不同数据源和输入输出任务,建立字节流或字符流对象。
字符流与字节流的区别
• 字节流操作时本身不会用到缓冲区,是文件本身直接操作, 而字节流在操作时就使用到了缓冲区
如果我们在操作字符流的时候,不关闭流,我们写入的数据是无法保存的。 所以在操作字符流的时候一定要记得关闭流
标准输入输出流
• 为了减少程序开发人员,因频繁应用标准的输入输出设备,需要频 繁地建立输入输出流对象的工作量,java系统预先定义好3个流对象, 分别表示标准输出设备、标准输入设备和标准错误设备。他们分别 是:
字符输入流:Reader
• Reader本身也是一个抽象类,同样,如果使 用它,我们需要通过其子类来实例化它才 可以使用它。 • Reader类的常用方法-----API方法
• • • • • • • • • • • • • • • • •
示例2:还是Helloworld 在上面的基础上把文本中的内容读出来,并且显示在控制台上 public static void main(String[] args) throws Exception { File file = new File("hellowolrd.txt"); // 声明一个File对象 Reader reader = null; // 声明一个Reader类的对象 reader = new FileReader(file); // 通过FileReader子类来实例化Reader 对象 char[] c = new char[1024]; // 声明一个字符数组 // // 将内容输出 // int len = reader.read(c); //循环方式一个一个读 int len=0; int temp=0; while((temp=reader.read())!=-1){ c[len]=(char)temp; len++; } reader.close(); // 关闭输入流 System.out.println(new String(c, 0, len)); // 把char数组转换成字符串输出
用字符流写文件
FileWriter fout=null; try { fout = new FileWriter("e:\\t.txt"); fout.write("你好"); } catch (IOException ex) { ex.printStackTrace(); } finally{ try { fout.close(); } catch (IOException ex) { ex.printStackTrace(); } }
用字符流读文件
FileReader fin=null; try { fin = new FileReader("e:\\t.txt"); int c=fin.read(); while(c!=-1){ System.out.print((char)c); c=fin.read(); } } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex){ ex.printStackTrace(); }finally{ try { fin.close(); } catch (IOException ex) { ex.printStackTrace(); }