《Java程序设计学习指导与习题解答 教学课件 ppt 作者 金百东 刘德山 刘丹 09_输入输出及文件操作》由会员分享,可在线阅读,更多相关《Java程序设计学习指导与习题解答 教学课件 ppt 作者 金百东 刘德山 刘丹 09_输入输出及文件操作(27页珍藏版)》请在金锄头文库上搜索。
1、9 输入输出及文件操作,本章内容,1 输入输出概述 流的层次/ 流的分类 2 字节流类 基本的输入输出示例 FileInputStream和FileOutputstream BufferedInputStream和BufferedOutputStream DataInputStream和DataOutputStream 3字符流类 Reader和Writer FileReader和FileWriter BufferedReader和BufferedWriter 4 文件操作,9.1 输入输出概述,流模型建立在从某个数据源到数据池的数据传输基础上(from source to sink),也就是
2、说把不同的输入/输出源(键盘,文件,网络连接)等抽象表示为“流”。 流编程相关API封装在java.io包中。,9.1 输入输出概述,流的层次,9.1 输入输出概述(续),流的分类 按数据的流向分为输入流和输出流。流是单向的,流提供数据是输入流,向流中写数据是输出流。 按流的数据单位大小分字符流和字节流。 按功能不同可以分为节点流和处理流。,9.2 字节流类(InputStream),字节输入流InputStream是抽象类,定义了字节输入流的框架。 它的最重要的三个方法(输入流提供数据输入): int read() int read(byte buffer) int read(byte bu
3、ffer, int offset, int length) 大部分子类的命名是XxxInputStream,例如FileInputStream,DataInputStream,9.2 字节流类(OutputStream),字节输出流OutputStream是抽象类,定义了字节输出流的功能. 它的最重要的三个方法(提供数据输出): void write(int c) void write(byte buffer) void write(byte buffer, int offset, int length) 大部分子类的命名是XxxOutputStream,例如FileOutputStream,
4、DataOutputStream,示例:,TestInAndOut.java TestInputStreamAndOutputStream.java 文件复制(CopyFile1.java)。 文件复制(CopyFile2.java),9.3 字符流类(Reader & Writer),Reader和Writer类是一切字符流的超类。它们封装的功能大致和InputStream,OutputStream一样,子类命名常为XxxReader,XxxWriter。以下为两个类的主要API方法: int read(); int read(char cbuf); int read(char cbuf,
5、int offset, int length); void write(int c); void write(char cbuf); void write(char cbuf, int offset, int length); void write(String s); void write(String s, int offset, int length);,示例:,重写Copy1.java(CopyFileByChar ) 重写Copy2.java 读具有一定逻辑结构数据文件 。 数组复制(ArrayCopy.java)。,补充:节点流和处理流,节点流(node stream): 可以从/
6、向一个特定的地方(节点)读写数据,例如磁盘或者一块内存。 处理流(processing stream): 是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读/写功能 二者的区分大致可以从构造器参数中或类名称中看出来。,I/O Stream Chaining,标准输入和标准输出,Java提供System类的3个静态属性对应系统的输入和输出. 这3个属性分别对应Inputstream,PrintStream的对象. System.out 提供向“标准输出”写出数据的功能 System.out为 PrintStream类型. System.in 提供从“标准输入”读入数据的功能 Sy
7、stem.in 为InputStream类型. System.err提供向“标准错误输出”写出数据的功能 System.err为 PrintStream类型.,System.out/System.err的println/print方法,println方法可将方法参数输出并换行 print方法将方法参数输出但不换行 print和println方法针对多数数据类型进行了重写 (boolean, char, int, long, float, double以及char, Object和 String). print(Object)和println(Object)方法中调用了参数的toString()
8、方法,再将生成的字符串输出,System.in,为了使用方便,经常将System.in用各种处理流进行封装处理,如: BufferedReader br = new BufferedReader( new InputStreamReader(System.in); br.readLine(); 利用BufferedReader()类的方法读取终端上输入的字符数据,将其转换成int类型数据并进行计算 示例:TestBufferedReader.java,9.4 File类,File类对象提供如下功能: 表示一个文件或目录的路径名称。 可以获得文件的属性信息。 判断是否为目录或文件,是否存在等。
9、文件系统的遍历。 File类对象不提供文件内容的操作。 应该使用相对路径访问文件。 见例子(TestFile.java),9.4 File类(File类的方法),java.io包中定义与数据输入、输出功能有关的类,包括提供文件操作功能的File类 创建File类对象 File f; f = new File(“Test.java“); f = new File(“E:ex“,“Test.java“); 在Java中,将目录也当作文件处理。File类中提供了实现目录管理功能的方法。 File path = new File(“E:ex“); File f = new File(path, “Te
10、st.java“);,9.4 File类(File类的方法),关于文件/目录名操作 String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName) File 测试操作 boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute();,获取常规文件信息操作 long lastModi
11、fied() long length() boolean delete() 目录操作 boolean mkdir() String list() 示例:列出所有文件 ListFile2.java,再说文件输入输出流,文件输入 可使用FileReader类以字符为单位从文件中读入数据 可使用BufferedReader类的readLine方法以行为单位读入一行字符 文件输出 可使用FileWriter类以字符为单位向文件中写出数据 使用PrintWriter类的print和println方法以行为单位写出数据 例 File MyFilenew File(“MyTextFile“); DataIn
12、putStream dinnew DataInputStream(new FileInputStream(MyFile); Data OutputStream dournew DataOutputStream(new FileOutputStream (MyFile);,RandomAccessFile类,RandomAccessFile类提供以随机方式读写文件数据,也定义在java.io包中。 该类定义: public class RandomAccessFile implements DataInput, DataOutput 主要提供各种基本数据类型及字符串数据的随机读写操作。 实现了DataInput,DataOutput接口,可以使用多种方法读取不同格式的数据. 该类还提供了文件指针的定位操作(seek)。 见例子(RAFExample.java)。,总结,