首页 > 代码库 > 复习java基础第六天(IO)

复习java基础第六天(IO)

一:File 类

• 输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。 
• 输出:将程序(内存)数据输出到磁盘、光盘等存储设备中
• Java 的 IO 流主要包括输入、输出两种 IO 流,每种输入、输出流有可分为字节流和字符流两大类:
– 字节流以字节为单位来处理输入、输出操作
– 字符流以字符为单位来处理输入、输出操作
注意:输入、输出是以程序为参照。
• File 类代表与平台无关的文件和目录。
• File  能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
  如果需要访问文件内容本身,则需要使用输入/输出流。
部分操作File的方法:
练习代码:
package com.shellway.io;import java.io.File;import java.io.IOException;import org.junit.Test;public class IOtest {	@Test	public void test() throws IOException{		File file = new File("helloo.txt");		//获取文件的名称		String fileName = file.getName();		System.out.println(fileName);		//获取文件的绝对路径		String filePath = file.getAbsolutePath();		System.out.println(filePath);		//为文件重命名,不仅文件名变了且原来的文件路径跟着下面的路径变	//	file.renameTo(new File("D:\\test\\day03\\helloo.txt"));		String path = file.getPath();		System.out.println(path);		//文件检测相关方法		System.out.println(file.exists());		File dir = new File("shellway");		System.out.println(dir.isDirectory());		System.out.println(dir.isFile());		//获取文件的常规信息		System.out.println(file.length());//单位为字节,一个汉字为两个字节,换行会加两个字节        //文件的相关操作		File file2 = new File("adc.txt");		file2.createNewFile();//创建一个空的文件		File file3 = new File("adc");		file3.mkdir();//创建一个空的目录		file2.delete();//删除一个文件	}}

1、IO流的分类

• 按流向分:
– 输入流
– 输出流
• 按处理的单位:
– 字节流(8 位的字节)
– 字符流(16 位的字节)
• 按流的角色
– 节点流:可以从一个特定的 IO 设备读/写数据的流
– 处理流:对一个已存在的流进行连接和封装,通过封装后的流来实现数据读/写操作
 
2、IO流体系:
 
二、InputStream & Reader
• InputStream 和 Reader 是所有输入流的基类。
• InputStream(典型实现:FileInputStream):
– int read()
– int read(byte[] b)
– int read(byte[] b, int off, int len)
• Reader(典型实现:FileReader):
– int read()
– int read(char [] c)
– int read(char [] c, int off, int len)
• 程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。
练习代码:
 1 package com.shellway.io; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.Reader; 9 import org.junit.Test;10 public class IOtest {11     /**12      * 测试字符输入流13      * @throws IOException 14      */15     @Test16     public void testReader() throws IOException {17          Reader reader = new FileReader("helloo.txt");18          char []buffer = new char[10];19          int len = 0;20          while((len = reader.read(buffer)) != -1){21              for(int i = 0;i < len;i++){22                  System.out.print(buffer[i]);23              }24          }25          reader.close();26     }27     /**28      * 测试字节输入流29      * @throws IOException30      */31     @Test32     public void testInputStream() throws IOException {33         //1、创建一个字符输入流34         InputStream in = new FileInputStream("helloo.txt");35         //2、读取文件内容36         //2、1一次读取一个字符,效率很低,不建议这样读,-1表示读到文件的结尾37         int result = in.read();38         while(result!=-1){39         System.out.print((char)result);40          result = in.read();41         }42         //2、2一次读取一组字符,43         byte []buffer = new byte[10];44         int length = 0;45         while((length = in.read(buffer))!=-1){46             for(int i = 0;i<length;i++){   //注意不能加“=”号47                 System.out.print((char)buffer[i]);48             }49         //2、3把内容读取到字节数组的部分连续的元素中50         byte  []result1 = new byte[1024*10];51         //10为字节数组的开始部分,第三个为实际长度。52         in.read(result1, 10, in.available());53         }54         //3、关闭字符流55         in.close();56     }57 }
测试字符、字节输入流