首页 > 代码库 > java I/O系统
java I/O系统
http://www.cnblogs.com/hellokitty1/p/4456305.html
java I/O系统
I:Input 输入 O:Output 输出
二:流的分类
按照方向:输入流 输出流
按照最小单位:字节流 (byte) 字符流 (char)
三:
所有的I/O系统操作都由以下步骤构成
1)建立流
2)操作流
3)关闭流
四:文件类
java.io包中的File类提供了管理磁盘文件和目录的基本功能
File类有四种构造方法
最常用的的是 public File(URI uri) URI是资源统一标识符
java.io.File的一些方法,主要还是要查看API文档。
1 package com.lovo; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.Date; 6 7 /** 8 * File类测试 9 * 10 * @author hellokitty11 *12 */13 public class FileTest {14 15 public static void main(String[] args) {16 // 创建File对象17 File file = new File("E:\\jg\\exercise_bak.txt");18 19 // 能否读20 System.out.println("能否读:" + file.canRead());21 22 // 删除23 System.out.println("删除成功:" + file.delete());24 25 // 重新创建文件对象26 file = new File("E:\\jg\\exercise_bak.txt");27 28 // 判断文件是否存在29 System.out.println("是否存在:" + file.exists());30 31 // 目录或文件名称32 System.out.println("名称:" + file.getName());33 34 // 是否目录、文件35 System.out.println("是否目录:" + file.isDirectory());36 System.out.println("是否文件:" + file.isFile());37 38 // 最后一次修改时间39 System.out.println("最后一次修改时间:" + new Date(file.lastModified()));40 41 // 文件大小42 System.out.println("文件大小:" + file.length());43 44 // 重新创建File对象45 file = new File("E:\\jg");46 47 System.out.println("文件目录列表:");48 // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录49 String[] list = file.list();50 for (String string : list) {51 System.out.println(string);52 }5354 55 // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件对象56 File[] files = file.listFiles();57 for (File item : files) {58 if (item.isDirectory()) { // 当前File对象为目录,则遍历该目录下所有子目录与文件59 System.out.println(item.getName() + " 目录下子目录与文件:");60 String[] it = item.list();61 for (String i : it) {62 System.out.println(i);63 }64 System.out.println("*******************************");65 continue;66 }67 68 System.out.println(item.getName() + " 文件");69 }70 71 // 重新创建File对象72 file = new File("E:\\jg\\test\\demo\\test.txt");73 if (!file.exists()) { // 文件不存在74 // 获取文件路径75 File dir = file.getParentFile();76 if (!dir.exists()) { // 目录不存在,则创建路径中所有不存在的目录77 dir.mkdirs();78 }79 80 try {81 // 创建空文件82 System.out.println("文件是否创建成功:" + file.createNewFile());83 } catch (IOException e) {84 e.printStackTrace();85 }86 }87 88 }89 }
五:字节流 byte:用于处理二进制文件
InputStream ----》FileInputStream (读取) OutputStream ---》FileOutputStream (写入)
字节流的输入输出流代码测试
1 package com.lovo; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream;10 11 /**12 * 字节输入输出流测试13 * 14 * @author hellokitty15 *16 */17 public class IOTest {18 19 public static void main(String[] args) {20 StringBuffer buffer = new StringBuffer(); // 字符串缓冲21 22 /* 输入流 */23 InputStream in = null;24 25 try {26 // 1. 打开输入流27 in = new FileInputStream("E:\\jg\\exercise.txt");28 // 2. 读取2930 byte[] b = new byte[1024 * 4];31 int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾32 while(len != -1){33 buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲34 len = in.read(b);35 }36 // System.out.println("读到" + len + "字节的数据");37 System.out.println(buffer.toString());38 } catch (FileNotFoundException e) {39 e.printStackTrace();40 } catch (IOException e) {41 e.printStackTrace();42 } finally {43 // 3. 释放资源,关闭输入流44 if (in != null){45 try {46 in.close();47 } catch (IOException e) {48 e.printStackTrace();49 }50 }51 }52 53 /* 输出流 */54 OutputStream out = null;55 56 try {57 File file = new File("D:\\test\\demo\\test.txt");58 if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录59 file.getParentFile().mkdirs();60 }61 // 1. 打开输出流62 out = new FileOutputStream(file);63 // 2. 写64 out.write(buffer.toString().getBytes());65 } catch (FileNotFoundException e) {66 e.printStackTrace();67 } catch (IOException e) {68 e.printStackTrace();69 } finally {70 // 3. 释放输出流资源71 if (out != null){72 try {73 74 out.close();//已经带有刷新的了75 } catch (IOException e) {76 e.printStackTrace();77 }78 }79 }80 }81 }
六:字符流 char 用于处理文本文件 Reader----》InputStreamReader--->FileReader Write---》OutputStreamWrite---》FileWrite
1 package com.lovo; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 import java.io.Reader; 8 import java.io.Writer; 9 10 /**11 * 字符输入输出流测试12 * 13 * @author14 *15 */16 public class IOTest2 {17 18 public static void main(String[] args) {19 StringBuffer buffer = new StringBuffer();20 21 /* 输入流 */22 Reader reader = null;23 24 try {25 // 1. 打开流26 reader = new FileReader("E:\\jg\\exercise.txt");27 // 2. 读取28 char[] ch = new char[128]; // 缓冲区29 int len;30 do {31 len = reader.read(ch);32 if (len == -1)33 break;34 buffer.append(new String(ch, 0, len));35 } while (len != -1);36 System.out.println(buffer.toString());37 } catch (FileNotFoundException e) {38 e.printStackTrace();39 } catch (IOException e) {40 e.printStackTrace();41 } finally {42 // 3. 释放资源43 if (reader != null) {44 try {45 reader.close();46 } catch (IOException e) {47 e.printStackTrace();48 }49 }50 }51 52 /* 输出流 */53 54 Writer writer = null;55 56 try {57 // 1. 打开流58 writer = new FileWriter("d:\\test.txt");59 // 2. 写入60 writer.write(buffer.toString());61 } catch (IOException e) {62 e.printStackTrace();63 } finally {64 // 3. 释放资源65 if (writer != null) {66 try {67 68 writer.close();69 } catch (IOException e) {70 e.printStackTrace();71 }72 }73 }74 }75 }
七:缓冲流
1 package com.lovo.day2; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 import java.io.InputStream; 11 import java.io.OutputStream; 12 13 public class BufferedTest { 14 15 public static void main(String[] args) { 16 long start = System.currentTimeMillis(); 17 copyByBuffer("E:\\myeclipse-2015-2014-07-11-offline-installer-windows.exe", "d:\\test.exe"); 18 long end = System.currentTimeMillis(); 19 System.out.println("缓冲:" + (end - start)); 20 System.out.println("***************"); 21 start = System.currentTimeMillis(); 22 copy("E:\\myeclipse-2015-2014-07-11-offline-installer-windows.exe", "d:\\test2.exe"); 23 end = System.currentTimeMillis(); 24 System.out.println("不带缓冲:" + (end - start)); 25 } 26 27 private static void copy(String source, String destination){ 28 InputStream in = null; 29 OutputStream out = null; 30 31 File file = new File(destination); 32 if (!file.getParentFile().exists()){ 33 file.getParentFile().mkdirs(); 34 } 35 36 try { 37 // 打开流 38 in = new FileInputStream(source); 39 out = new FileOutputStream(file); 40 // 操作:读写 41 byte[] b = new byte[1024]; 42 int len; 43 44 while(-1 != (len=in.read(b))){ 45 out.write(b, 0, len); 46 } 47 } catch (FileNotFoundException e) { 48 e.printStackTrace(); 49 } catch (IOException e) { 50 e.printStackTrace(); 51 } finally { 52 // 释放资源 53 if (in != null){ 54 try { 55 in.close(); 56 } catch (IOException e) { 57 e.printStackTrace(); 58 } 59 } 60 if(out != null){ 61 try { 62 out.close(); 63 } catch (IOException e) { 64 e.printStackTrace(); 65 } 66 } 67 } 68 } 69 70 private static void copyByBuffer(String source, String destination){ 71 BufferedInputStream in = null; 72 BufferedOutputStream out = null; 73 74 try { 75 // 打开流 76 in = new BufferedInputStream(new FileInputStream(source), 8 * 1024 * 1024); 77 out = new BufferedOutputStream(new FileOutputStream(destination), 8 * 1024 * 1024); 78 // 读写 79 byte[] b = new byte[1024]; 80 int len; 81 82 while(-1 != (len = in.read(b))){ 83 out.write(b, 0, len); 84 } 85 } catch (FileNotFoundException e) { 86 e.printStackTrace(); 87 } catch (IOException e) { 88 e.printStackTrace(); 89 } finally { 90 // 释放资源 91 if (in != null){ 92 try { 93 in.close(); 94 } catch (IOException e) { 95 e.printStackTrace(); 96 } 97 } 98 if (out != null){ 99 try {100 out.close();101 } catch (IOException e) {102 e.printStackTrace();103 }104 }105 }106 } 107 }
有缓冲的比没有缓冲要快些。
未完。。。
java I/O系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。