Java IO(输入输出)流

我的网站:欢迎来访问嗷

IO流

分类

方向:输入流,输出流

单位:字节流,字符流

代码中具体分类

输入流:

字节:InputStream

字符: Reader

输出流:

字节:OutputStream

字符: Write

输入输出都是抽象类,无法直接创建

输入用FileInputStream类实现

输出用FileoutputStream类实现

字节输入流FileInputStream

读取输入流的三种方式

Demo
package com.ifueen.classtest.fileinputstream;

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

import com.sun.org.apache.bcel.internal.generic.NEW;

public class FileInputStreamTest {
	/*
	 * 输入流
	 * */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileInputStream file = new FileInputStream("my.txt");
		
		//第一种读取
		/*int c = file.read();;			//定义变量接收每次读取的值
		while (c!=-1) {			//判断是否还有字符
			System.out.print((char)c);			//打印输出
			c = file.read();
		}*/
		
		//第二种读取
		byte [] arr = new byte[2];			//定义数组来决定每次读取的元素
		
		/*int num=file.read(arr);
		while (num!=-1) {
			String string = new String(arr,0,num);
			System.out.print(string);
			num=file.read(arr);
		}*/
		
		//第三种读取
		
		byte [] arr1 = new byte[4];
		int read = file.read(arr1, 0, 4);
		while (read!=-1) {
			System.out.print(new String(arr1));
			read = file.read(arr1, 0, 4);
		}
		
	}
	
}

字节输出流FileOutputStream

输出的几种方式

Demo
package com.ifueen.classtest.fileoutputstream;

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

public class FileOutputStreamTest {
	/*
	 * 输出流
	 * */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//第一种输出
		FileOutputStream output = new FileOutputStream("sb.txt");
		//output.write(5986);
		
		//第二种输出
		byte [] arr = {15,36,89,66,15,69};
		//output.write(arr);
		
		//第三种:输出为中文
		
		String str = "乌斯怀亚的灯塔";
		byte[] bytes = str.getBytes();			//利用方法转换为byte数组
		output.write(bytes);
		for (byte b : bytes) {
			System.out.println(b);
		}
		
		//第四种:不覆盖以前内容
		FileOutputStream output1 = new FileOutputStream("sb.txt",true);
		String str1 = ",亮着...亮着...";
		byte[] bytes1 = str1.getBytes();			//利用方法转换为byte数组
		output.write(bytes1);
		
	}

}

字符输入流FileReader

Demo
package com.ifueen.classtest.reader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class ReaderTest {
	/*
	 * 读取字符流
	 * */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//第一种方式
		FileReader reader = new FileReader("sb.txt");
		//int read = reader.read();
		//System.out.println(read);
		
		//第二种方式
		char[] arr = new char[3];
		int n;
		while((n=reader.read(arr,0,3))!=-1){
			System.out.print(new String(arr,0,n));
		}

	}

}

字符输出流FileWriter

Demo
package com.ifueen.classtest.writer;

import java.io.FileWriter;

public class WriterTest {
	/*
	 * 字符输出流
	 * */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		FileWriter fileWriter = new FileWriter("能不能给我吃一口.txt");
		String str = "就不能给我吃一口吗";
		char[] cs = str.toCharArray();
		fileWriter.write(cs);
		fileWriter.flush();			//刷新缓冲区
		fileWriter.close();			//关闭输出流
		
		
		//不覆盖内容的输出
		FileWriter fileWriter1 = new FileWriter("能不能给我吃一口.txt",true);
		String str1 = ",我再也快乐不起来了";
		char[] cs1 = str1.toCharArray();
		fileWriter1.write(cs1);
		fileWriter1.flush();			//刷新缓冲区
		fileWriter1.close();			//关闭输出流
	}

}

编码问题

编码和解码的时候编码集不一致

编码:按照某种编码集去存储数据

解码:按照某种编码集去读取数据

乱码问题:

1.读取中文数据的时候,只取了部分字节

2.编码和解码的解码集不一致,最常用的是UTF-8

3.有些编码集本身就不支持中文ISO

转换流

字节输入流转换为字符流 InputStreamReader

字符输入流转换为字节流 OutputStreamWriter

异常的处理

​ 传统的方式 try{
​ 可能出现异常的代码
​ }catch(Exception e){
​ 对异常进行处理
​ }finally{
​ 最终执行的代码
​ }
​ 先开后关
jdk1.7 对于需要关闭的流新的方式
​ try(需要关闭的资源){
​ }catch(Exception e){
​ 对异常进行处理
​ }

jdk1.7写法Demo
package com.ifueen.classtest.exception;

import java.io.FileInputStream;
import java.io.FileOutputStream;import com.sun.org.apache.bcel.internal.generic.NEW;

public class ExceptionDemo {
	/*
	 * 异常Demo
	 * */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try(	FileInputStream inputStream = new FileInputStream("sb.txt");		//这里存放需要关闭的代码
				FileOutputStream outputStream = new FileOutputStream("sb.txt")){
			//这里存放可能会出错的代码
			byte [] arr = new byte[50];
			int read = inputStream.read(arr);
			while (read!=-1) {
				System.out.println(new String(arr,0,read));
				read = inputStream.read(arr);
			}
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值