Download presentation
Presentation is loading. Please wait.
Published by剑 池 Modified 8年之前
1
第一章 第三节 java 的基本语法 第一章 第十三节 输入输出流
2
上节回顾 掌握 java 中异常的概念 掌握 java 异常的分类 掌握 java 异常的捕获和处理
3
本节主要内容 掌握输入 / 输出 (I/O) 流的概念 掌握 File 类 掌握流的分类
4
知识点一: 输入 / 输出 (I/O) 流的概念 在 java 中,对于数据的输入 / 输出操作以 “ 流 ” ( stream )的方式 进行,我们利用流来从硬盘的文件中读数据到你的程序中, 利用 流来写数据到硬盘的文件 站在内存的角度分析 : 往内存里面放信息 ---- 输入 内存里的信息往外写 ---- 输出 即:相对于程序而言,读进来的就叫输入流,写出去的就叫输 出流 注 :Java 所有的 I/O 机制都是基于数据流进行输入输出,这些数据流表示了字符或者字 节数据的流动序列。 Java 的 I/O 流提供了读写数据的标准方法。任何 Java 中表示数据 源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io 是大多数面向数据流的输入 / 输出类的主要软件包
5
知识点二: File File 不属于流,它只是用来屏闭不同文件系统,用来统一 描述文件的实体 BEAN , new File 时给它传入文件名称或 是路径,它就会去根据参数查找对应的文件属性然后封装 成实体 File: java.io.File, 它可以创建和删除一个文件,也可以创 建和删除一个空目录 方法: file.createNewFile(); 创建一个新文件 file.mkdir(); 在当前目录下创建一个目录文件 file.mkdirs(); 在当前目录下,如果父目录不存在, 则创建父目录,然后创建子目录 file.isFile() 和 file.isDirectory() 常用来判断一个目录 或者文件是否存在
6
知识点二: File file.isFile() 和 file.isDirectory() 常用来判断一个目录或者文 件是否存在 file.delete(); 删除一个文件或者目录 file.list(); 得到此抽象路径下的所有目录中的文件和目录的 名称,并将其放在一个 String 的数组中, 注 : File 不能够得到文件中的内容!!!
7
举例一: File file=new File(“test.txt”);// 创建一个 File 对象,此 时磁盘上还没有 test.txt 文件,默认在项目文件夹下,通过 file.createNewFile(); // 该方法用来在磁盘上创建文件,名为 test.txt 举例二: File file=new File(“ 视频 ”); file.mkdir();// 此时将会在当前目录下创建一个 “ 视频 ” 的 文件夹 举例三: File file=new File(“D:/ 视频 ”); file.mkdir();// 此时将会在 D 盘目录下创建一个 “ 视频 ” 的文 件夹 举例四: File file=new File(“D:/ 视频 / 音乐 ”); file.mkdir();// 如果你的 D 盘下没有 “ 视频 ” 文件夹,则音乐 文件夹将不能被创建,怎么办,则使用 file.mkdirs();
8
举例五: 在 C 盘下创建一个 “ 哈哈 ” 文件夹,如果已 经存在该文件夹,则删除它,否则创建它 File file=new File("c:/ 哈哈 "); if(file.isDirectory()){ file.delete(); }else{ file.mkdir(); } 举例六: 获取 “ 哈哈 ” 文件下的所有文件 File file=new File("c:/ 哈哈 "); String[] home=file.list(); for(int i=0;i<home.length;i++){ System.out.println(home[i]); }
9
知识点三:输入 / 输出流 既然 File 不能得到文件的具体内容,那么该如何得到文件的内 容呢?引入输入 / 输出流来解决 在 Java 的中,流分为两大类:字节流和字符流 (1) 字节流:有两个顶层的抽象类 : InputStream (输入流) 和 OutputStream (输出流), 由于他们都是抽象类,抽象类 不能实例化,它俩对应的子类常用的是: FileInputstream 和 FileOutputStream 举例:使用字节流实现文件内容的拷贝 ( 使用已经存在的节点 流来构造,提供带缓冲的读写,提高读写的效率 ) :
10
public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("C:/ 我的手机谷歌账 户.txt");// 获取源文件 BufferedInputStream bis=new BufferedInputStream(fis);// 进入过 滤流:即字节缓冲流,读取资源的效率高 FileOutputStream fos=new FileOutputStream("D:/ 新建 文本文 档.txt");// 放入目标文件中 BufferedOutputStream bos=new BufferedOutputStream(fos);// 进入过滤流:即字节缓冲流 byte[] b=new byte[1024];// 作为缓冲区,大小为 1K int len;// 保存读到的实际字节数 while((len=bis.read(b))!=-1){ bos.write(b, 0, len);// 第一个参数:即得到缓冲区数组,第二个:从 第几个开始,第三个:读取的长度 bos.flush();// 清空缓冲区,一定要写 }
11
(2) 字符流:为什么要引出字符流? 原因:字节流是由字节组成的,字符流是由字符组成的,一个字符 占两个字节。扩展:字节流是最基本的,所有的 InputStream 和 OutputStream 的子类都是, 主要用在处理二进制数据,它是按字节 来处理的 但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟 机的 encode 来处理,也就是要进行字符集的转化 我们知道,在计算机中存放的就是一堆二进制,那它是如何来表示 一个字符,数字,字母等?这就要靠编解码了,字符流就可以用来 解决字符编码的问题,使用它,可以保证解码统一,防止出现乱码。 比如字符 ’A’, 采用 ASCII 码标准码为 0x41 仍然有两个顶层的抽象类 : Reader( 字符输入流 ) 和 Writer (字符 输出流)
12
图例:字符输入流
13
图例:字符输出流
14
举例: // 往 rrr.txt 记事本中写入字符 BufferedWriter bufw = new BufferedWriter(new FileWriter("C:/rrr.txt")); bufw.write("abcde"); bufw.newLine(); bufw.write("fg"); bufw.flush(); bufw.close(); // 从 rrr.txt 中读取字符 BufferedReader bufr = new BufferedReader(new FileReader("C:/rrr.txt")); String line = null; while( null != ( line = bufr.readLine()) ) { System.out.println("read line:" + line); } bufr.close();
Similar presentations