IO流

一、IO流

1.1 File类

  • 概念:代表物理盘符中的一个文件或文件夹
  • 常用方法:
    • creatNewFile();//创建一个新文件
    • Mkdir();//创建一个新目录
    • Delete();//删除文件或空目录
    • Exists();//判断File对象所代表的对象是否存在
    • getAbsolutePath();//获取文件的绝对路径
    • getPath();//获取文件的相对路径
    • getName();//获取文件名
    • getParent();//获取文件/目录所在的目录
    • canRead();//是否可读
    • canWrite();//是否可写
    • isDirectory();//是否是目录
    • isFile();//是否是文件
    • length();//获取文件的长度
    • listFiles();//列出目录中的所有内容
    • renameTo();//修改文件名

1.2 流

  • 概念:内存与存储设备之间传输数据的通道
  • 流的分类:
    • 按方向:输入流和输出流
    • 按单位:字节流和字符流
    • 按功能:结点流和过滤流

1.2.1 基本字节流

  • 基本字节输入流:InputStream–>FileInputStream
public static void main(String[] args) throws IOException {
	//声明流对象
	InputStream is=null;
	try {
		//1.创建流对象
		is=new  FileInputStream("b.txt");
		//2.用流对象读取文件中内容,一个字节一个字节的读取
		//先读取一次,一个字节一个字节的读取返回的是读取当前字节ASCII码
		int content=is.read();
		//再判断再读取
		while (content!=-1) {
			//每读取一次就输出一次
			System.out.print((char)content);
			
			//接着读取
			content=is.read();
		}
		System.out.println("\n读取完毕");
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//3.关流
		if (is!=null) {
			is.close();
		}
	}
}
  • 基本字节输出流:OutputStream–>FileOutputStream
public static void main(String[] args) throws IOException{
	//声明流对象
	OutputStream os=null;
	try {
		//1.创建流对象
		//os=new FileOutputStream("a.txt");
		
		//创建流对象,第二参数允许在文件末尾追加内容
		os=new FileOutputStream("a.txt", true);
		
		//2.用流对象向文件中写入内容
		os.write("Hello world".getBytes());
		os.write("java".getBytes());
		System.out.println("写入成功");
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//3.关闭流对象
		if (os!=null) {
			os.close();
		}
	}
}

1.2.2 字节缓冲流

  • 字节缓冲输入流:FileInputStream–>BufferedInputStream
public static void main(String[] args) throws IOException {
	//声明流对象
	BufferedInputStream bis=null;
	try {
		//1.创建流对象
		bis=new BufferedInputStream(new FileInputStream("a.txt"));
		//2.用流读取,按数组读取,读取的内容存在数组,返回的是读取的长度
		//准备一个数组
		byte[] b=new byte[10];
		//先读取一次
		int len=bis.read(b);
		//每读取一次判断一次
		while (len!=-1) {
			//每读取一次就将读取内容转换字符串输出
			String content=new String(b, 0, len);
			System.out.println(content);
			
			//接着读取
			len=bis.read(b);
		}
		
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//关闭流
		if (bis!=null) {
			bis.close();
		}
	}
}
  • 字节缓冲输出流:FileOutputStream–>BufferedOutputStream
public static void main(String[] args) throws IOException {
	//声明流对象
	BufferedOutputStream bos=null;
	
	try {
		//1.创建流对象
		//bos=new BufferedOutputStream(new FileOutputStream("a.txt"));
		//原字节输出流的追加功能,带缓冲区的字节流也有
		bos=new BufferedOutputStream(new FileOutputStream("a.txt",true));
		
		//2.用流向文件中写入内容
		bos.write("i like qianfeng,".getBytes());
		bos.write("i like china".getBytes());
		System.out.println("写入成功");
		
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//3.关流
		if (bos!=null) {
			bos.close();
		}
	}
}

1.2.3 基本字符流

  • 基本字符输入流:Reader–>InputStreamReader
  • 基本字符输出流:Writer–>OutpitStreamWriter

1.2.4 字符缓冲流

  • 字符缓冲输入流:BufferedReader
  • 字符缓冲输出流:BufferedWriter

1.2.5 总结

在这里插入图片描述

1.3 独特流

1.3.1 打印流PrintStream

public static void main(String[] args) {
	//声明流对象
	PrintStream ps1=null;
	try {
		//1.创建流对象
		ps1=new PrintStream("d1.txt");
		//2.用流向文件中写入内容
		ps1.append("我爱千锋");
		ps1.printf("%.2f", 3.123234344343);
		ps1.println("我爱北京");
		ps1.print("我爱中国");
		ps1.write("哈哈".getBytes());
		
		//注意:System.out得到就是PrintStream
		System.out.println("写入成功");
		System.out.append("1111");
		System.out.write("dfefe".getBytes());
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//3.关流
		if (ps1!=null) {
			ps1.close();
		}
	}
}

1.3.2 输出重定向

  • 给流重新定义一个方向输出,将原本在控制太台输出的内容转出到文件中
public static void main(String[] args) throws FileNotFoundException {
	//输出重定向
	System.setOut(new PrintStream("f1.txt"));
	//将原本输出到控制台的内容,改变流的方向,输出到文件中
	System.out.println("不忘初心");
	System.out.println("方得始终");
}

1.3.3 输入重定向

  • 给流重新定义一个方向接受数据,将原来控制台录入的数据转到文件中接收
public static void main(String[] args) throws FileNotFoundException {
	//输入重定向
	System.setIn(new FileInputStream("f1.txt"));
	
	Scanner input=new Scanner(System.in);
	System.out.println("接收数据:");
	String s1=input.next();
	String s2=input.next();
	System.out.println("接收的数据为:"+s1);
	System.out.println("接收的数据为:"+s2);
}

1.3.4 对象流

  • 序列化:将对象用输出流写入文件中的过程
  • 反序列化:从文件中读取对象的过程
  • 对象输入流:ObjectInputStream
  • 对象输出流:ObjectOutputStream
  • 实现了java.io.Serializable接口的对象才能被序列化,一般需要固定版本号
    象输出流:ObjectOutputStream
  • 实现了java.io.Serializable接口的对象才能被序列化,一般需要固定版本号
  • 如果序列化类中某个属性不想被序列化,可以设置属性为static或transient
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值