IO


title: IO流

IO

流的分类

  1. 按照数据的传输方向:以JVM作为参照物

    • 输入流:将数据从外界输入到JVM中

    • 输出流:将数据从JVM中输出到外界

  2. 按照数据的传输单位:

    • 字节流:以字节为单位传输,可以传输任何类型的文件

    • 字符流:以字符为单位传输,只能传输文本文件(.txt .java .html .xml等等,所以可以用记事本直接打开的都属于文本文件)

  3. 按照流的功能:

    • 节点流:具有实际数据传输功能的流

    • 过滤流:可以增强节点的传输能力,增加一些功能

字节流

  • InputStream 字节输入流
  • OutputStream 字节输出流

节点流

  • FileOutputStream OutputStream的子类 文件输出流

    • 创建语法1:OutputStream os = new FileOutputStream(“文件路径”,true/false);

      • 文件路径书写方式
        • 绝对路径:相对电脑本身来说,“盘符名:/文件夹名/文件名” 例如: “C:/user/a.txt”,会去C盘的user中找到a.txt文件,如果文件不存在,将会自动生成一个,但是文件夹必须存在
        • 相对路径:相对项目根目录来说,“文件夹名/文件名” 例如:“file/a.txt”,会去项目的根目录中寻找file文件夹,在file文件夹中寻找a.txt,若文件不存在,则自动生成一个,但是文件夹必须存在
    • 第二个参数可以是true或false

      • true,代表在文件的原有内容上做追加,不会覆盖原有内容
      • false,代表覆盖掉原有内容
      • 如果不写默认为false
  • FileInputStream InputStream子类 文件输入流

    • 创建语法:InputStream is = new FileInputStream(“文件路径”);
      • 注意:文件必须存在,不会自动创建,若不存在,会报异常。

过滤流

  • BufferedInputStream/BufferedOutputStream 缓冲过滤流

    • 作用:内置一个数据缓冲数组,增强数据传输能力,减少访问磁盘次数
    • 注意:会先把数据存入数组缓冲区当中,需要使用bos.flush()方法,将缓冲区的数据刷出来,或者直接调用close()方法
    • 创建语法:
      • BufferedInputStream bis = new BufferedInputStream(输入节点流)
      • BufferedOutputStream bos = new BufferedOutputStream(输出节点流)
  • PrintStream 标准输出流

    • System.out.println();
      • System:java.lang包下的一个类
      • out:System的一个静态方法
      • println():是out的一个方法
  • ObjectInputStram/ObjectOutputStream

    • 增加了8种数据类型数据的传输
    • 传输对象,对象必须实现序列化接口Serializable
      • 对象序列化:将对象转为字节放在流上传输
      • 对象中的所有属性也都要实现Serializable接口
      • 可以使用修饰符transient让某些属性不参加对象序列化,即反序列化

字符流

编码集

  1. 作用:专门用来处理char与String数据,并且可以设置编解码

字符流

  1. 字符流的父类

    • Writer 字符输入流
    • Reader 字符输入流
  2. FileWriter 文件字符输出流

  3. FileReader 文件字符输入流

  4. 过滤流

    • PrintWriter/BufferedReader 缓冲过滤流

      • PrintWriter代替BufferedWriter,因为PrinterWriter更加的强大,功能多,使用方便
    • InputStreamReader/OutputStreamWriter 桥转换流

    • 作用:可以将字节流转换为字符流,并且设置编码格式

    • 构造方法有两个参数:第一参数:节点流 第二个参数:编码格式

  5. File类

    • File对象:代表一个文件或文件夹,通过File类中的方法可以对文件或文件夹本身做处理
    • IO流是对文件内容做处理,File是对文做处理

随堂大练习

1. 题目:找出文件夹day19或day20中所有的java文件,并且复制到另一文件夹中                      
package com.day20.project;

import java.io.*;
//递归找到所有文件夹中的文件
//在判断文件是否以.java结尾
public class TestProject {
	public static void main(String[] args) {
		search("D:\\甲骨文\\code");
	}
    //判断文件函数
	static void search(String str) {
		File code = new File(str);
		File[] file = code.listFiles();
		for(File f:file) {
            //判断是否是文件,是就判断,不是就进入文件夹中
			if(f.isDirectory()) {
				search(f.toString());
			}else {
                //分割字符串,注意.要转义,判断符合就复制文件
				String[] str1 = f.toString().split("\\.");
				if(str1[str1.length-1].equals("java")) {
					copy(f);
					System.out.println(f.getName());
				}
			}
		}
	}
    //复制文件函数
	static void copy(File f) {
        //创建一个文件夹,存放复制的文件
		File file = new File("D:\\甲骨文\\codejava");
		file.mkdir();
        //字符流先读文件
		try (
			FileInputStream fis = new FileInputStream(f);
			InputStreamReader isr = new InputStreamReader(fis,"utf-8");
			BufferedReader br = new BufferedReader(isr);
			//在写入文件
			FileOutputStream fos = new FileOutputStream(file.getAbsolutePath()+"\\"+f.getName());
			OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
			PrintWriter pw = new PrintWriter(osw))
			{
			while(true){
				String s = br.readLine();
				if(s == null) break;
				pw.write(s);
			}
		}catch(Exception e) {
			
		}
	}
}

网络编程

BIO

BIO ServerSocket Socket

NIO

NIO ServerSocketChannel SocketChannel Selector

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值