IO流

IO流

IO

流就是数据的传递

数据在两设备件的传输称为流,流的本质是数据传输
分类
在这里插入图片描述

抽象类

在这里插入图片描述
文件流:InputStream 字节输入流`

package Day18;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 
 * 
 */

public class FileInputStream1 {

	public static void main(String[] args) throws IOException {
		//输入/读取:必须先找到这个文件
		//绝对位置:当前文件系统的根目录为准
		//相对位置:当前文件所在目录为准
        //当前目录./   上级目录../  再上级../../   以此类推
		//ecplise当前目录是D:\workspace20210322\JavaSE(src所在目录)
		
		//创建字节输入流对象
		//相对位置
		//导包,有异常抛出异常
		FileInputStream file=new FileInputStream("./src/Day18/leetcode.java");
		//绝对位置
		//从D盘C盘等开始
		FileInputStream file1=new FileInputStream("D:\\workspace20210322\\JavaSE\\src\\Day18\\leetcode.java");
		//read读取的是下一个字节,如果到达文件末尾,返回-1,默认光标在顶端,读一下
		//然后向下移动一位,并返回下一位的值
		int i1=file.read();
		int i2=file.read();
		int i3=file.read();
		int i4=file.read();
		int i5=file.read();
		//强制类型转换到char类型
		System.out.println((char)i1);
		System.out.println((char)i2);
		System.out.println((char)i3);
		System.out.println((char)i4);
		System.out.println((char)i5);
		//代码重复太多,可以循环读取
		int a=0;
		//while循环读取,因为到最后输出-1,所以条件是-1
		while ((a=file.read())!=-1) {
			//转换成char输出
			//文字是乱码因为是char
			System.out.print((char)a);
		}
				
		

	}

}

解决异常

package Day18;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 
 */

public class FileInputStream2 {

	public static void main(String[] args) {
		//提升变量到main方法里,否则finally访问不到
		//局部变量没有默认值,并且try有不执行情况,到不了finally,所以赋值null
		FileInputStream file=null;
		try {
			 file=new FileInputStream("./src/Day18/leetcode.java");
			//循环读取,直到不等于-1时输出
			int a=0;							
					while((a=file.read())!=-1) {
						//强制类型转换为char
						System.out.print((char)a);
					}			
		}catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关闭资源
			try {
				//防止因为未找到文件导致空指针异常
				if(file!=null) {
					//null是自己设置的,所以为空的时候关闭
					file.close();
				}
			}catch(IOException e){
					e.printStackTrace();
				}
			}
			
	

}
	}
package Day18;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 方法重载
 *              read():读取下一个字节的值并返回,如果到达文件末尾返回-1
 *              read(byte[] bytes):可以传入一个字节数组,返回当前读取到的字节个数,如果到文件末尾,返回-1
 *              
 * 
 */

public class FileInputStream3 {

	public static void main(String[] args) throws IOException  {
		//放到try括号里,代码简洁
		try(FileInputStream file=new FileInputStream("./src/Day18/leetcode.java");) 
		{
			//循环读取
			//传入字节数组
			byte[] bytes=new byte[1000];
			int a=0;
			while((a=file.read(bytes))!=-1) {
				//不能直接把数组转换为字符串,否则多种情况会导致数据不准确
				//数组太长,长过文件中字节数的话,多出的部分会变成一堆小方格
				//数组太短的话第二次读不完,会导致数据冗余
				//最好读多少转换多少,方法返回值就是当前次读取个数
				
				//转换成String后读取bytes从0位到最后一位刚刚好
				System.out.println(new String(bytes,0,a));
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

OutputStream 字节输出流

package Day18;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 输出流,如果目标文件不存在,会自动创造该文件,但是不会创建目录,目录不存在会报错
 * 
 * 1.打开流 2.写出(追加写入/覆盖写入) 3.刷缓存 4.关闭
 * 
 * 构造方法:
 *        FileOutputStream(String):只需要传递需要写出的文件路径,默认覆盖写出
 *        
 *        FileOutputStream(String,boolean):只需要传递写出的文件路径
 *        boolean如果是true,追加写出,如果是false,覆盖写出
 *        
 *写出方法:
 *         write(int b)写出一个字节
 *         write(byte[] bytes):写出一个数组内容
 *         write(byte[] bytes ,int off ,int length):写出数组中一部分,起始值和个数
 *         
 * API
 *      getBytes()        
 * 
 */

public class FileOutputStream01 {

	public static void main(String[] args) throws IOException {
		//创建对象,默认覆盖写出
		//FileOutputStream file=new FileOutputStream("./src/Day18/leetcode.java");
		
		//追加写出,后面写true
		FileOutputStream file=new FileOutputStream("D:/天亮教育/day_18_IO/123.txt");
		
		//写出单个内容
		//A
		file.write(65);
		//创建一个数组
		byte[] bytes= {12,23,34,45};
		//输出整个数组
		file.write(bytes);
		//写出一部分
		file.write(bytes, 0, 2);
		//写出字符串
		String str="李未琦";
		//转换并写入
		bytes=str.getBytes();
		file.write(bytes);
		//刷缓存
		file.flush();
		//关闭
		file.close();
		
	}

}

**Reader **

package Day18;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * FileReader:字符输入流,可以解决输入数据汉字的乱码问题
 * 
 * 一般用于纯文本文件
 * 
 */

public class FileReader1 {

	public static void main(String[] args)  {
		try (FileReader file=new FileReader("./src/Day18/leetcode.java");)
		{
			//读数据
			char[] chars = new char[100];
			int temp = 0;
			while ( (temp = file.read(chars)) != -1 ) {
				System.out.print(new String(chars,0,temp));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Writer

package Day18;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符输出流,和字节输出流一样
 * 写出方法是字符数组 和 字符串
 * 
 */

public class FileWriter1 {

	public static void main(String[] args) {
		try (FileWriter file=new FileWriter("D:/天亮教育/day_18_IO/123.txt");)
		{
			//字符数组和字符串
			file.write("李未琦");
			//换行符
			file.write("\n");
			file.write("又一个李未琦");
			//刷缓存
			file.flush();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值