一: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 @Test 16 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 IOException 30 */ 31 @Test 32 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 }