i字符流

合集下载

《Java基础入门》_课后习题答案大一计算机专业7

《Java基础入门》_课后习题答案大一计算机专业7

《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 流的概念。

C++ofstream与ifstream详细用法

C++ofstream与ifstream详细用法

C++ofstream与ifstream详细⽤法在C++中,有⼀个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的⽂件I/O,stream这个类有两个重要的运算符: 向流输出数据。

⽐如说系统有⼀个默认的标准输出流(cout),⼀般情况下就是指的显⽰器,所以,cout<<"Write Stdout"<<'\n';就表⽰把字符串"Write Stdout"和换⾏字符('\n')输出到标准输出流。

从流中输⼊数据。

⽐如说系统有⼀个默认的标准输⼊流(cin),⼀般情况下就是指的键盘,所以,cin>>x;就表⽰从标准输⼊流中读取⼀个指定类型(即变量x的类型)的数据。

在C++中,对⽂件的操作是通过stream的⼦类fstream(file stream)来实现的,所以,要⽤这种⽅式操作⽂件,就必须加⼊头⽂件fstream.h。

下⾯就把此类的⽂件操作过程⼀⼀道来。

在fstream类中,有⼀个成员函数open(),就是⽤来打开⽂件的,其原型是: void open(const char* filename,int mode,int access);参数: filename: 要打开的⽂件名 mode: 要打开⽂件的⽅式 access: 打开⽂件的属性 打开⽂件的⽅式在类ios(是所有流式I/O类的基类)中定义,常⽤的值如下: ios::app: 以追加的⽅式打开⽂件 ios::ate: ⽂件打开后定位到⽂件尾,ios:app就包含有此属性 ios::binary: 以⼆进制⽅式打开⽂件,缺省的⽅式是⽂本⽅式。

两种⽅式的区别见前⽂ ios::in: ⽂件以输⼊⽅式打开(⽂件数据输⼊到内存) ios::out: ⽂件以输出⽅式打开(内存数据输出到⽂件) ios::nocreate:不建⽴⽂件,所以⽂件不存在时打开失败 ios::noreplace:不覆盖⽂件,所以打开⽂件时如果⽂件存在失败 ios::trunc: 如果⽂件存在,把⽂件长度设为0 可以⽤“或”把以上属性连接起来,如ios::out|ios::binary 打开⽂件的属性取值是: 0:普通⽂件,打开访问 1:只读⽂件 2:隐含⽂件 4:系统⽂件 可以⽤“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开⽂件。

cin的介绍

cin的介绍

1.cin简介cin是C++编程语言中的标准输入流对象,即istream类的对象。

cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。

此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。

这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。

在理解cin功能时,不得不提标准输入缓冲区。

当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。

2. cin的常用读取方法使用cin从标准输入读取数据时,通常用到的方法有cin>>,cin.get,cin.getline。

2.1cin>>的用法cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。

实例程序如下。

#include <iostream>usingnamespace std;int main(){char a;int b;float c;stringcin>>a>>b>>c;cout<<a<<" "<<b<<" "<<c<<" "<<endl;system("pause");return0;}在屏幕中一次输入:a[回车]11[回车]5.56[回车],程序将输出如下结果:注意:(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。

《C++程序设计》电子教案第10章 流类库与输入输出

《C++程序设计》电子教案第10章  流类库与输入输出

C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };

什么是流

什么是流

什么是流?流是一个通用的,灵活的,可编程的Unix系统通讯服务的模块。

流为内核与Unix 系统的其他部分定义字符输入输出的标准接口。

其机制由一组系统调用,内核资源和内核方法组成。

Stream允许你创建一个模块用来提供标准数据通讯服务,并且工作在这个流上。

一个流在用户空间和内核流驱动乊间迚行全双工数据传输。

一个流由3个部分组成:流头,模块,驱动。

流的定义大写的STREAMS指的是stream可编程模块和工具。

小写的stream指的是一个在用户应用程序和驱动乊间的一个全双工的实例。

流是一个数据的传输途径一个流是一个内核的流驱动和用户程序乊间的双向的传输路径。

一个应用程序打开一个流设备就能创建一个流。

流头:流头是流里最接近用户空间的。

它是流和用户空间的接口。

当第一次打开流设备时,流只有流头和流驱动组成(这时没有模块)。

流模块:一个流模块是一组定义了内核级的方法和数据结构。

一个模块以黑箱的方式处理传入的数据。

例如一个模块转换小写的字符为大写的字符,或者加上网络路由信息等。

流模块是被用户应用程序动态的“压”到流里的。

模块及其操作参照第10章。

流设备驱动:一个流设备驱动是一个实现了流接口的字符设备驱动。

流设备驱动在流头和一些模块的下面。

它能够在操作外部设备或内部软驱动。

驱动在内核和设备乊间传送数据。

驱动和内核乊间的调用Solaris DDI/DKI接口。

驱动和内核其他部分的关系在Write Device Dirvers里有解释。

这被驱动的细节参见第9章。

流数据:数据在流里是以消息的栺式传输。

每个流头,流模块,流驱动都有一个读端和一个写端。

当消息从一个模块的读端到下一个模块的读端,这种方式被叫做向上流。

消息从一个模块的写端到另一个模块的写端,被称为向下流。

内核级的消息操作在“消息组件”章节讨论。

消息队列:每个流头,模块和驱动都有属于它们自己的一对队列。

一个是读队列,一个是写队列。

消息在队列中按FIFO的方式有序传输。

10 文件流类

10 文件流类

10.2 标准I/O流
常用函数:
• 设置输入/输出宽度函数:setw(int)
• 设置输出填充字符函数:setfill(int)
• 设置输出精度函数:setprecision(int) • 设置输入/输出整型数数制函数:dec、hex和oct • 取消输入结束符函数:ws • 控制换行操作符:endl • 代表输出单字符‚\0”的操作符:ends
其实,所谓输入输出,是相对于内存而言的。 在C++程序中,数据可以从程序流向屏幕或磁盘文件,也可以从键盘或 磁盘文件流入到程序中。 换一种角度,简单说,I/O流就是一系列写到屏幕或从键盘读出的各种 字符。 从流中获取数据的操作称为提取(或抽取)操作。 向流中添加数据的操作称为插入操作。 如下图所示:
第10单元 输入输出流
基本概念 标准I/O流 文件I/O流
串I/O流
10.1 基本概念
一、为什么要有C++流类库
C语言中的输入输出系统不支持自定义的对象或数据类型。
如有下面的定义:
struct sample {
int i ;
float f; char *ch; }s1; 不能用下面的输出函数来输出以上结构变量s1: printf(“%sample”,s1);
10.2 标准I/O流
【例】 void main( )
{
char str[]="You will be the C++ master !"; cout.write(str,sizeof(str)-1); cout<<endl; cout.write(&str[4],4) <<endl; }

标准IO(farsight部分)

➢ tmpfile()创建一个临时二进制文件(类型wb+),在关闭该文件或 程序结束时将自动删除这种文件。
.
标准I/O库-临时文件example
• 自己实现一个tmpfile()函数。
– 先调用tmpnam()产生一个唯一的路径名。 – 调用fopen()打开。 – 调用unlink()删除。 说明:Linux系统规定,一个文件如果有连接计
标准I/O库-读写流
调用fopen()成功打开流之后,可在三种不同类型的非格 式化I/O中进行选择,对其进行读、写操作:
每次一个字符的I/O。使用fgetc()/fputc()一次读或写一 个字符,如果流是带缓存的,则标准I/O函数处理所有 缓存。
每次一行的I/O。使用fgets()和fputs()一次读或写一行。 每行都以一个新行符终止。当调用fgets()时,应说明能 处理的最大行长。
.
标准I/O库-定位流
• 定位标准I/O流的两种方式
– ftell()和fseek(): 这两个函数自V7以来就存在了, 但是它们都假定文件的位置可以存放在一个长 整型中。
– fgetpos()和fsetpos()。这两个函数是新由ANSI C引入的。它们引进了一个新的抽象数据类型 fpos_t,它记录文件的位置。
– 需要移植到非UNIX系统上运行的应用程序应当 使用fgetpos()和fsetpos()
.
标准I/O库-定位流fseek()/ftell()/rewind()
fseek()/ftell()/rewind()函数原型:
➢ ftell()用于取得当前的文件位置,调用成功则为当前文件位置指示,若 出错则为-1L
.
标准I/O库-临时文件
标准I / O库提供了两个函数以帮助创建临时文件:

Web应用开发技术_11


北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-05
11-19
WS-NE30-3-05
11-4
11.1.1 文件的建立与删除(续) 文件的建立与删除(
• 运行效果
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-05
11-5
11.1.2 显示目录中的文件
取得当前目录 的磁盘目录 取得代表目录 中所有文件 循环显示文件名
运行程序的效果:
北京清华万博网络技术股份有限公司版权所有
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-05
11-11
11.4 使用字符流读写文件
• 字符流以unicode为基础,每次读取两个字节 (16位),因此可以正确显示中文 • 每次读取的两个字节以整数形式表现,它是 一个0到65535之间的数字
北京清华万博网络技术股份有限公司版权所有
public class ClassOne { public int i; public ClassOne() { i=10; } public void add(int j){ i=i+j; } }
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-05
11-18
本章总结
• • • • • • 介绍了Java的I/O系统 讲解如何使用字符流和字节流读写文件 讲解如何使用对象流读写对象 讲解随机访问文件的RandomAccessFile类的使用 详细讲解jspSmartUpload组件的常用方法 讲解如何使用JspSmartUpload组件上传下载文件
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-05

输入输出流(IO流)PPT教学课件


{
File("C:\\1000","Example20_1.java");
File("c:\\1000");
System.out.println("文件Example20_1是可读的
吗:"+f1.canRead());
System.out.println("文件Example20_1的长度:"+f1.length());
2020/12/10
18
11.4 类和类
例子5: 例子6:
2020/12/10
19
11.5 使用文件对话框打开和保存文件
例子7:
2020/12/10
20
11.6 运行可执行文件
使用ng包中的Runtime类可以运行本 地计算机上的可执行文件。
例如:
Runtime ec; ec=Runtime.getRuntim(); ec.exec(String command); 例子8: 运行记事本

2020/12/10
5
11.1 File类
public getParent():获取文件的父目录
public isFile():判断文件是否是一个正常文件而 不是一个目录。
public boolean isDirectory():判断文件是否是 一个目录
public boolean isHidden():判断文件是否是隐 藏文件
处理I/O异常
I/Oexception,并try...catch try{} catch( I/Oexception e){}
2020/12/10
12
11.2 类

第7章 流式输入输出

第7章 流式输入输出
第7章
流式输入输出
第7章 流式输入输出
学习目标
java流式输入/输出原理
java基本I/O流类型 字节流和字符流 节点流和处理流 Java命令行参数和系统属性 标准I/O,文件I/O
第7章 流式输入输出
Java I/O基本原理
为进行数据的输入/输出操作,Java中把不同的输入/输出
Memory Array
Memory String
Pipe
PipedReader
PipedWritຫໍສະໝຸດ rPipedInputStream
PipedOutputStream
第7章 流式输入输出
节点流应用举例--文件复制
import java.io.*; public class Test7_1 { public static void main(String[] args) { try { FileReader input = new FileReader("Test7_1.java"); FileWriter output = new FileWriter("temp.txt"); int read = input.read(); while ( read != -1 ) { output.write(read); read = input.read(); } input.close(); output.close(); } catch (IOException e) { System.out.println(e); } } }
第7章 流式输入输出
I/O 流的链接
第7章 流式输入输出
处理流(Processing Streams)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1_IO流(字符流FileReader)
1.字符流是什么
字符流是可以直接读写字符的IO流
字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符,
需要把字符转为字节再写出.
2.FileReader
* FileReader类的read()方法可以按照字符大小读取

FileReaderfr = new FileReader("aaa.txt"); //创建输入流对
象,关联aaa.txt
intch;
while((ch = fr.read()) != -1) { //将读到的字符
赋值给ch
System.out.println((char)ch); //将读到的字符
强转后打印
}

fr.close(); //关流
2_IO流(字符流FileWriter)
FileWriter类的write()方法可以自动把字符转为字节写出
FileWriterfw = new FileWriter("aaa.txt");
fw.write("aaa");
fw.close();

3_IO流(字符流的拷贝)
FileReaderfr = new FileReader("a.txt");
FileWriterfw = new FileWriter("b.txt");

intch;
while((ch = fr.read()) != -1) {
fw.write(ch);
}

fr.close();
fw.close();
4_IO流(什么情况下使用字符流)
字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写
出时还要把字符转回字节.
程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流
读取的时候是按照字符的大小读取的,不会出现半个中文
写出的时候可以直接将字符串写出,不用转换为字节数组
5_IO流(字符流是否可以拷贝非纯文本的文件)
不可以拷贝非纯文本的文件
因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就
会用?代替,写出的时候会将字符转换成字节写出去
如果是?,直接写出,这样写出之后的文件就乱了,看不了了

6_IO流(自定义字符数组的拷贝)
FileReaderfr = new FileReader("aaa.txt"); //创建字符输入流,
关联aaa.txt
FileWriterfw = new FileWriter("bbb.txt"); //创建字符输出流,关联
bbb.txt

intlen;
char[] arr = new char[1024*8]; //创建字符数组
while((len = fr.read(arr)) != -1) { //将数据读到字符数组

fw.write(arr, 0, len); //从字符数组将数据写
到文件上
}

fr.close(); //关流释放资源
fw.close();
7_IO流(带缓冲的字符流)
BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后
逐个返回给程序, 降低读取文件的次数, 提高效率
BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写
到文件, 降低写文件的次数, 提高效率
BufferedReaderbr = new BufferedReader(new FileReader("aaa.txt"));
//创建字符输入流对象,关联aaa.txt
BufferedWriterbw = new BufferedWriter(new FileWriter("bbb.txt")); //
创建字符输出流对象,关联bbb.txt

intch;
while((ch = br.read()) != -1) { //read一次,会先将缓冲区读满,从缓
冲去中一个一个的返给临时变量ch
bw.write(ch); //write一次,是将数据装到字符数组,
装满后再一起写出去
}

br.close(); //关流
bw.close();
8_IO流(readLine()和newLine()方法)
BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"

BufferedReaderbr = new BufferedReader(new FileReader("aaa.txt"));
BufferedWriterbw = new BufferedWriter(new FileWriter("bbb.txt"));
String line;
while((line = br.readLine()) != null) {
bw.write(line);
//bw.write("\r\n"); //只支持windows系统
bw.newLine(); //跨平台的
}

br.close();
bw.close();

9_IO流(LineNumberReader)
LineNumberReader是BufferedReader的子类, 具有相同的功能, 并且可以统
计行号
调用getLineNumber()方法可以获取当前行号
调用setLineNumber()方法可以设置当前行号
*
LineNumberReaderlnr = new LineNumberReader(new
FileReader("aaa.txt"));
String line;
lnr.setLineNumber(100); //设置行号
while((line = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber() + ":" + line);//获取行号
}

lnr.close();

11_IO流(使用指定的码表读写字符)
FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使
用InputStreamReader(字节流,编码表)
FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使
用OutputStreamWriter(字节流,编码表)

//高效的用指定的编码表读
BufferedReaderbr = new BufferedReader(new InputStreamReader(new
FileInputStream("UTF-8.txt"), "UTF-8"));
//高效的用指定的编码表写
BufferedWriterbw = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream("GBK.txt"), "GBK"));
intch;
while((ch = br.read()) != -1) {
bw.write(ch);
}

bw.close();
br.close();

相关文档
最新文档