Java程序设计基础 第10章输入输出系统
合集下载
Java面向对象程序设计(第二版)第10章_Java的输入与输出流解读

源
目的 地
注意,流是有方向性的,输入流只能从中读取数据,而不能往一个输入流 中写数据。同样的,也不能从一个输出流中读数据。
10.3标准输入/输出流
System类管理标准输入/输出流和错误流。它提供了标 准输入流Syetem.in,标准输出流System.out,以及错误 流System.err。通过System类的基本属性in,可以获得 一个InputStream对象,其语句为: InputStream is=System.in; 它是一个标准输入流,一般接收键盘的响应,得到键盘 所传递来的数据。 System.out 是标准输出流,一般用于向显示设备(一般 是显示器)输出数据。它是Java.io包中PrintStream类的 一个对象,其println()、print()和write()方法用于输出数 据。 和System.out一样,System.err也是一个PrintStream对 象,用于向显示设备输出错误信息。
10.3标准输入/输出流(续)
例10.2从键盘读入若干字符,然后转换为字符串并在显示器上显示出来。 //Jpro10_2.java import java.io.*; public class Jpro10_2 { public static void main(String[] args) { InputStream is = System.in; try { byte[] bs = new byte[512]; int len = is.read(bs); String str=new String(bs); System.out.println("输入的内容:" +str); is.close(); } catch (IOException e){ e.printStackTrace(); } } }
目的 地
注意,流是有方向性的,输入流只能从中读取数据,而不能往一个输入流 中写数据。同样的,也不能从一个输出流中读数据。
10.3标准输入/输出流
System类管理标准输入/输出流和错误流。它提供了标 准输入流Syetem.in,标准输出流System.out,以及错误 流System.err。通过System类的基本属性in,可以获得 一个InputStream对象,其语句为: InputStream is=System.in; 它是一个标准输入流,一般接收键盘的响应,得到键盘 所传递来的数据。 System.out 是标准输出流,一般用于向显示设备(一般 是显示器)输出数据。它是Java.io包中PrintStream类的 一个对象,其println()、print()和write()方法用于输出数 据。 和System.out一样,System.err也是一个PrintStream对 象,用于向显示设备输出错误信息。
10.3标准输入/输出流(续)
例10.2从键盘读入若干字符,然后转换为字符串并在显示器上显示出来。 //Jpro10_2.java import java.io.*; public class Jpro10_2 { public static void main(String[] args) { InputStream is = System.in; try { byte[] bs = new byte[512]; int len = is.read(bs); String str=new String(bs); System.out.println("输入的内容:" +str); is.close(); } catch (IOException e){ e.printStackTrace(); } } }
Java程序设计教程第10章 IO输入输出流

10.1.5 实例:使用read方法读取文件内容
• 代码见书10-3从磁盘上“C:\ java测试及练习”文件夹下 ,读取“aaa.txt”文件中的内容,并按数组中的位置,来 分别显示每个字符在数组中的信息,包括:位置、对应 ASCII码、字符。
• • • • FileInputStream readfile = new FileInputStream("aaa.txt"); //创建文件输入流,将其指向当前目录下aaa.txt文件 b = readfile.read(buff,0,2500); //使用read()方法读取输入流文件内容,并存储于buff字节数组
代ቤተ መጻሕፍቲ ባይዱ如下
• • • • • • • • • • • • • • • • • • • • • • • • public static void main(String[] args) { int b; byte buffer[]=new byte[2500]; try { File f=new File("C:\\ java测试及练习\\"," InputStreamTest.java"); //创建File对象file,用来获取磁盘中文件 FileInputStream file=new FileInputStream(f); //创建一个文件输入流,用来指向之前的文件对象f b=file.read(buffer,0,2500); //使用read()方法读取文件中的内容,并保存在字节数组buffer中 try { String str=new String(buffer,0,b,"Default"); //创建字符串str,用来转换并存储字节数组中内容 System.out.println(str); //输入字符串str } catch(UnsupportedEncodingException e) {System.out.println("the encoding was not found:"+e);} } catch(IOException e) {System.out.println("File read Error");} }
Java输入输出

标准流
语言包ng中的System类管理标准输入/输出流和错 误流. System.in,从InputStream中继承而来,用于从标准输入 设备中获取输入数据(通常是键盘). System.out,从PrintStream中继承而来,把输出送到缺 省的显示设备(通常是显示器). System.err,也是从PrintStream中继承而来,把错误信 息送到缺省的显示设备(通常是显示器). 每当main方法被执行时,就自动生成上述三个对象.
文件的最后修改日期,长度;删除文件
f.mkdir(), f.list():创建一个目录;列出目录下所有的文件
Demo:创建文件对象
import java.io.*; public class examFile1{ public static void main(String args[]){ File dirObject = new File("e:\\mydir"); File fileObject1 = new File("onefirst.txt"); File fileObject2 = new File("e:\\mydir","firstFile.txt"); System.out.println(fileObject2); try { dirObject.mkdir(); }catch(SecurityException e){ } try { fileObject2.createNewFile(); fileObject1.createNewFile(); } catch(IOException e){ } } }
RandomAccessFile:提供对本地文件系统中文件的随机 访问支持.
Java简明教程第2版 第10章 Java输入输出流

Java简明教程(第二版)
第10章 Java输入/输出流
第5页
主要内容
10.1 引言 10.2 流的概念 10.3 文件 10.4 字节流 10.5 字符流 10.6 本章小结 10.7 思考和练习
Java简明教程(第二版)
第10章 Java输入/输出流
第6页
10.2 流的概念
Java用流的概念来描述输入输出。Java提供的输
Java简明教程(第二版)
第10章 Java输入/输出流
第15页
扩充的标准输入
Java采用双字节存储字符,是为了将字符与汉字 统一起来,方便处理。字符流即指双字节流。标 准输入提供的read()方法显然不够方便,因为它 是以单个字节或字节数组的方式来获取输入的, 而通常需要用户输入的数据却是其他类型的,如 字符串、int、double等。怎么办呢?Java采用 了一种称为Decorator(包装)的设计模式来对标准 输入进行了功能扩充,具体什么是Decorator设 计模式,这里不做介绍,大家只要知道它是用来 给原对象扩充功能(即再次加工)用的就可以了。
第10章 Java输入/输出流
本章概述 本章的学习目标 主要内容
Java简明教程(第二版)
第10章 Java输入/输出流
第1页
本章概述
输入和输出是人机交互的重要手段,Java 提供了基于流的基本I/O(输入/输出)系统。 Java在java.io包中定义了定义了实现各种 功能的I/O流类。本章将研究java.io包提供 的对I/O操作的支持。包括字节流和字符流 、文件的读写、处理I/O异常等内容。通过
//设置
Java简明教程(第二版)
第10章 Java输入/输出流
第21页
java中的输入流与输出流

3 标准错误
运行或编译Java程序时,各种错误 信息输出到标准错误设备,即显示器。 在Java中,标准错误设备用System.err表 示 。 System.err 属 于 PrintStream 类 对 象 。
10.3 文件操作
在程序中要对磁盘文件或目录进行操作, 首先要对文件或目录建立连接,为此Java提供 了File类。File类也位于java.io包中,但不是流 类,而是专门用来管理磁盘文件和目录。
OutputStream子类的继承关系
Reader类(字符流)
int read( ) long skip( ) void mark( ) void close( ) void reset( )
Reader类的主要方法
Reader BufferedReader InputStreamReader FileReader
1 建立File对象(三)
File(File dir, String name) 此构造方法中的参数dir表示一个磁盘目录对应 的File对象,参数name表示文件名或目录名。
例如,为文件c:\java\oldfile.txt建立File对象file 可以采用以下语句: File dir1=new File(“c:\\java\\oldfile.txt”) File file1=new(dir1,”oldfile.txt”)
注:使用文件输入流读取文件要处理I/O异常,也可以抛 出异常throw IOException
Java实例—以字节流方式写入文件
import java.io.*; public class File2{ public static void main(String[] args) throws IOException{ char ch; File file1=new File("c:\\jdk1.3\\example\\newFile.txt"); try{ FileOutputStream fout= new FileOutputStream(file1); System.out.println("输入任一字符串,以?结束"); ch= (char) System.in.read(); while (ch !='?'){
java输入输出PPT课件

举例:AppNumInOut.java
DataInOut.java
.
15
桥梁类
桥梁:InputStreamReader类和 OutputStreamWriter类
InputStream InputStreamReader Reader
OutputStream OutputStreamWriter Writer
如果流带有缓冲区,数据不会直接到达通道另一端,会暂 时保存在缓存区当中,当数据超过缓冲区,才会到达通道 另一端。或者使用flush()方法,强迫数据通过流通道。
流的串联是堆栈方式的,显示地调用栈顶流的flush()方法, 程序会依次调用所有串联流的flush()方法。调用close()方 法关闭流,显示地关闭栈顶流即可。对于输出流,close() 方法会自动调用flush()方法。
5}
6}
7}
//运行程序TestCommandLine.java
java TestCommandLine lisa "bily" "Mr Brown"
//输出结果:
args[0] = lisa
args[1] = bily
args[2] = Mr Brown
.
16
Scanner
Jdk 5 Java.util.Scanner 可以直接封装System.in 提供函数直接获得输入数据
.
17
命令行参数(向主函数输入)
Java Application 使用命令行来启动执行,命令行参 数可以向主函数传递参数。
▪ 在启动Java应用程序时可以一次性地向应用程序 中传递0~多个参数----命令行参数
出length-1,会有异常。.
Java输入与输出PPT教案学习

File类
(2)File(String path,String filename) 该构造方法根据指定的父路径字符串和子路 径字符串(包括文件名称)创建File类的实例对象。 语法:
new File(path, filename);
path:父路径字符串。 filename:子路径字符串,不能为空。
第24页/共66页
InputStreamReader类
(1)InputStreamReader(InputStream in) 该构造方法使用默认字符集创建InputStreamReader 类的实例对象。 语法如下:
new InputStreamReader(in);
in:字节流类的实例对象。
第25页/共66页
读取一些字符到char[]数组内,并返回所读入的字符的 数量。若已到达流结尾,则返回-1
将当前输入流重新定位到最后一次调用mark() 方法时 的位置
跳过参数n指定的字符数量,并返回所跳过字符的数量
关闭该流并释放与之关联的所有资源。在关闭该流后, 再调用 read()、ready()、mark()、reset() 或 skip() 将抛出异常
Abasract read()
功能描述 返回当前输入流的数据读取方法可以读取的有效字 节数量 从输入数据流中读取字节并存入数组b中
从输入数据流读取len个字节,并存入数组bytes中
将当前输入流重新定位到最后一次调用mark() 方 法时的位置 在输入数据流中加入标记 测试输入流中是否支持标记 关闭当前输入流,并释放任何与之关联的系统资源 从当前数据流中读取一个字节。若已到达流结尾, 则返回-1
字符输出流
Writer类是字符输出流的抽象类,所有字符输出流的 实现都是它的子类。Java中字符输出流的继承关系如下图所 示。
Java输入输出系统

详细内容见 详细内容见 软件的 OutputStream 类
Page
17 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
实
例
| 使用FileInputStream类,从文件中以字节流 方式读取全部信息在命令行打印输出
文件
TestFileInputStream.java TestFileInputStream.java
15 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
常用软件
Page
4 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
2 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
目
录
1 2 3 4 5
Java I/O流概述
字节流
字符流
文件处理
Page
17 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
实
例
| 使用FileInputStream类,从文件中以字节流 方式读取全部信息在命令行打印输出
文件
TestFileInputStream.java TestFileInputStream.java
15 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
常用软件
Page
4 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
2 / 44
Lu Qiang, 2011 Hefei University of Technology , School of Computer and Information
Chapter9
Java I/O 系统
目
录
1 2 3 4 5
Java I/O流概述
字节流
字符流
文件处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. Byte流
传输8位的数据就应用 Byte流,Java库中用InputStream(输入)和 OutputStream(输出)类族中的类来实现8位数据的传输,这些类主要用来 传输二进制数据,如声音和图像,ObjectInputStream ObjectOutputStreamy用来传输对象序列。
如果不用管道流,这个操作过程必须存储两个中间过程,即经过第一 次reverse()后得到的词表和经过sort()之后的词表。如图所示
Reverse
List of Words
Sort
List of Reversed Words
Reverse
List of Reversed Sorted Words
List of Rhyming Words
3. 关于IO的根类
Reader含有以下读取字符和字符数组的方法:
int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) 而InputStream定义了读取byte型数据的方法如下: int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length)
而如果用管道流,把一个方法的输出作为另一个方法的输入,就不需 要中间的存储文件了,当然这时必须用多个线程同时运行,即 revers(),sort()和reverse()一起工作,并且把中间的存储文件用
管道流来代替。如图所示。
Reverse
Sort
List of Words
Reverse
List of Rhyming Words
第10章 输入输出系统
学习重点:
?输入输出的总体结构 ?流的概念 ?构建不同的流
第10章 输入输出系统
10.1 输入输出流的概述 10.2 各种流的使用
10.2.1 文件流 10.2.2 管道流 10.2.3 连接文件 10.2.4 过滤流 10.2.5 对象的序列化 10.2.6 随机访问 10.3 练习题
LineNumberReader
FileReader PushbackReader
Writer
Bufferedwriter CharArraywriter OutputStreamReader
FilterWriter PipedWriter StringWriter FilterWriter
FileWriter
Writer方法如下:
int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length) OutputStream方法如下: int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length)
例10.1 使用File Reader和File writer的文件复制
这个例子就是把partnovel.txt的内容传输到target.txt中,这两个 文件都在本机的e:\files中。 ? 程序代码
例10.2 使用InputStream和OutputStream的文件复制
? 程序代码
? 两个方法复制同样一段文件内容,每次读取的内容是不一样的, FileReader每次读取的是一个字符(charactor),而屏幕中显示的是这个 字符的编码(0到65 535之间的一个整数)。而FileInputStream每次读取的 是一个字节(byte),而屏幕中显示的是这个字节的编码(0~255之间的一 个整数)。
4. 各种流ห้องสมุดไป่ตู้介
表10.1列出了java.io包中的各种流和它们的功能。注意,这些流都能传输 char和byte,两种不同的数据类型。
? 表10.1
10.2 各种流的使用
10.2.1 文件流
文件流(File streams)是用来传输当前系统下的某个文件中的一些内容 的,它应该是最简单的一种流,它可以是以下几种流类的对象: FileReader,FileWriter,FileInputStream和FileOutputStream。
1. Character流
Character流以Reader(对应输入)和Writer(对应输出)两个类族来实现, 其中Reader和Writer是输入和输出族的根类
Reader
BufferedReader CharArrayReader InputStreamReader
FilterReader PipedReader StringReader
10.1 输入输出流的概述
Java的输入和输出多以流的方式进行的,它的特点是数据的发送 和获取都是延数据序列顺序进行的,每个数据必须等待它前面的数 据发送或读入后才能被读写。
? 当需要读入数据时,程序先从数据的来源(文件、网络等)打开一个流, 然后从这个流中顺序读取数据
? 当要输出数据时,程序打开一个流,通过这个流向输出目标顺序写入数 据
例10.3 对词汇的韵排序
这个例子中一共定义了3个类,主要的流程结构定义在RhymingWords 类
中,它是这个程序的主类,另外,我们还定义了ReverseThread和 SortThread两个线程,它们的工作就是分别执行上图中指出的reverse和 sort的动作,
(1) ReverseThread的作用是执行将单词的字母顺序逆转过来的 动作,源代码如下:
10.2.2 管道流
管道流(Pipe Streams)是把一个线程的输出作为另一个线程的输 入。实现它的是PipedReader、PipedWriter、PipedInputStream和 PipedOutputStream。
管道流(Pipe Streams)的作用
如果定义了一个类,用来实现对一组词的操作,其中的一个操作是按它 们的韵(词尾)排序,方法是先把这些词的字序逆转(reverse()),然后把逆转 后的词排序(sort()),最后再逆转每个词(reverse()),这样就得到这些词的 韵的排序。