Java学习六-输入输出流

流的分类

  • 按数据流的方向不同可以分为输入流和输出流
  • 按照处理数据单位不同可以分为字节流和字符流
  • 按照功能不同可以分为节点流和处理流

输入输出流
输入输出是相对的,比如程序读取文件,站在程序角度叫输入,站在文件角度叫输出。(一般来说都是站在程序角度来看的)

字节字符流
字节流:最原始的一个流,读出来的数据就是010101这种最底层的数据表示形式,只不过它是按照字节来读的,一个字节(Byte)是8位(bit)读的时候不是一个位一个位的来读,而是一个字节一个字节来读。

字符流:字符流是一个字符一个字符地往外读取数据。一个字符是2个字节。

节点流处理流
简介:
在这里插入图片描述
节点流类型
在这里插入图片描述
处理流类型
在这里插入图片描述

节点流

输入流

InputStream

我们看到的具体的某一些管道,凡是以InputStream结尾的管道,都是以字节的形式向我们的程序输入数据。
继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字(8bit);下图中深色为节点流,浅色为处理流。

在这里插入图片描述

常用方法
//读取一个字节并以整数的形式返回(0~255)
//如果返回-1就说明已经到了输入流的末尾
int read() throws IOException

//读取一系列字节并存储到一个数组buffer
//返回实际读取的字节数,如果读取前已到输入流的末尾,则返回-1
int read(byte[] buffer) throws IOException

//读取length个字节
//并存储到一个字节数组buffer,从offset位置开始,使用长度位length.也就是只用buffer的一部分
//返回实际读取的字节数,如果读取前以到输入流的末尾返回-1.
int read(byte[] buffer,int offset,int length) throws IOException

//关闭流释放内存资源
void close() throws IOException

//跳过n个字节不读,返回实际跳过的字节数
long skip(long n) throws IOException
简单测试

测试的时候注意txt文件格式要选UTF-8。

package JZO;

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

public class IOTest {
   
	public static void main(String args[]) {
   
		int b = 0;// 使用变量b来装调用read()方法时返回的整数
		FileInputStream fi = null;
		FileInputStream fi1 = null;
		FileReader fr = null;
		/*  InputStream流里面的read()方法读取内容时是一个字节一个字节地读取的
			FileReader流里面的read()方法是一个字符一个字符地读取的,这样每次读取出来的都是一个完整的汉字.
		*/  
		try {
   
			fi = new FileInputStream("C:\\Users\\j'j'j\\Desktop\\hi.txt");
			fi1 = new FileInputStream("C:\\Users\\j'j'j\\Desktop\\hi.txt");
			fr = new FileReader("C:\\Users\\j'j'j\\Desktop\\hi.txt");
		} catch (FileNotFoundException e) {
   
			System.out.println("系统找不到指定文件!");
			System.exit(-1);// 系统非正常退出
		}
		
		
		long num = 0;// 使用变量num来记录读取到的次数 
		try {
    
			while((b = fi.read())!=-1) {
    
				fi.skip(1);//跳过一个
				System.out.print(b+"="); 
				System.out.print((char) b+"  "); 
				num++;
			}
			fi.close();// 关闭输入流
			System.out.println();
			System.out.println("总共读取了" + num + "个字节的文件");
		} catch (IOException e1) {
   
			System.out.println("文件读取错误!");
		}
		
		num = 0;
		try {
   
			byte[] bf = new byte[8];
			while((b = fi1.read(bf))!=-1) {
    
				System.out.print(" 读取了"+b+"个字符:");  
				for(byte i:bf) {
   
					System.out.print(i+"|");
				}
				num++;
			} 
			fi.close();// 关闭输入流
			System.out.println();
			System.out.println("总共读取了" + num + "次");
		} catch (IOException e1) {
   
			System.out.println("文件读取错误!");
		}
		
		try {
   
			num = 0;
			while((b = fr.read())!=-1) {
    
				System.out.print(b+"="); 
				System.out.print((char) b+"  "); 
				num++; 
			}
			fr.close();// 关闭输入流
			System.out.println();
			System.out.println("总共读取了" + num + "个字符的文件");
		} catch (IOException e1) {
   
			System.out.println("文件读取错误!");
		}
	}
} 

在这里插入图片描述

FileReader

(FileReader的用法和InputStream几乎一样,知识数据的单位是两个字节)。
在这里插入图片描述

常用方法
//读取一个字节并以整数的形式返回(0~255)
//如果返回-1就说明已经到了输入流的末尾
int read() throws IOException
//读取一系列字节并存储到一个数组buffer
//返回实际读取的字节数,如果读取前已到输入流的末尾,则返回-1
int read(byte[] buffer) throws IOException
//读取length个字节
//并存储到一个字节数组buffer,从只是用buffer的(offset,offset+length-1)这一部分。
//返回实际读取的字节数,如果读取前以到输入流的末尾返回-1.  
int read(byte[] buffer,int offset,int length) throws IOException
//关闭流释放内存资源
void close() throws IOException
//跳过n个字符不读,返回实际跳过的字节数
long skip(long n) throws IOException
测试
public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛阳八中我最棒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值