Java 之 I/O流
1.流
a.分类:①字节流:InputStream、OutputStream
②字符流:Reader、Writer
b.选择:①判断是 输入 还是 输出 (站在程序的立场上)
②判断是 字节 还是 字符 (决定粗细)
c.注意:①字节管道是最根本的
②字符管道专门传输文本数据
c.应用:①序列化
②反序列化
2.文件拷贝——最重要的一段手工书写的代码
package com.lovo.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class TestStream { public static void main(String[] args) { //功能:将D:/test.avi 拷贝到 F:/wudi.avi FileInputStream fis = null; FileOutputStream fos = null; try { //1、建立管道 fis = new FileInputStream("D:/test.avi"); fos = new FileOutputStream("F:/wudi.avi"); //2、操作管道 //方法一: // int b = 0; // while((b = fis.read()) != -1){ // fos.write(b); // } //方法二: byte[] b = new byte[1024]; int length = 0;//记录读取了多少个有效字节数 while((length = fis.read(b)) != -1){ fos.write(b,0,length); fos.flush();//强制刷出缓冲区的内容 } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ //3、关闭管道 if(fis != null){ try { fis.close(); } catch (IOException e) { // TODO Auto-generated block e.printStackTrace(); } } if(fos != null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
3.序列化与反序列化
a.定义:①序列化:将内存中的对象以二进制流的形式输出
②反序列化:将输入的二进制对象流转换为内存中的对象 (第二种产生对象的方式)
b.Serializable关键字:
①定义:可序列化接口
②作用:标记性接口,只有实现了Serializable接口的类才能被序列化
③注意:集合对象都实现了接口Serializable,也可以进行直接进行序列化和反序列化
c.transient关键字:
transient关键字修饰的属性,其值不参与序列化
4.File 类
a.作用:来表示操作系统的文件或文件夹对象
b.方法:
①申明:
File f = new File("F:/dddd.data");
②其他:
String path1 = file.getAbsolutePath(); //获取绝对路径 String path2 = file.getPath(); //获取相对路径 long space = file.length(); //获取文件大小 long time = file.lastModified(); //最后修改时间(毫秒数) System.out.println(file.isHidden()); //判断是否是隐藏文件 System.out.println(file.canWrite()); //判断是否是能被修改 System.out.println(dir.isFile()); //判断是否是文件 System.out.println(file.isDirectory()); //判断是否是文件夹
c.文件分隔符——File.pathSeparator
String path = "D:" + File.pathSeparator +"ffdfd" + File.pathSeparator + "fdfdf";
d.文件夹对象的常用方法:
①得到文件夹下面的所有子文件或子文件夹的名字
String[] subFileNames = dir.list();
②得到文件夹下面的所有子文件或子文件夹的File对象
File[] subFiles = dir.listFiles();