栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day21 IO

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day21 IO

1.IO

1.1 概述

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

I : input 输入

O : output 输出

输入 : 就是把数据输入到内存中

输出 : 就是把内存中的数据写出到外面

1.2 分类

按处理数据类型的不同,分为字节流和字符流

按数据流向的不同,分为输入流和输出流。

按功能的不同,分为节点流和处理流

节点流:直接操作数据源

处理流:对其他流进行处理

1.3 四大抽象类

InputStream : 字节输入

OutputStream : 字节输出

Reader : 字符输入

Writer : 字符输出

1.4 InputStream

void close() : 关闭此输入流并释放与该流关联的所有系统资源

abstract int read() : 从输入流读取下一个数据字节

int read(byte[] b) : 从输入流中读取一定数量的字节并将其存储在缓冲区数组b中

int read(byte[] b, int, off, int len) : 将输入流中最多len个数据字节读入字节数组

1.4.1 read使用方式

read:读取文件中的数据,一次读取一个字节,返回值是读取的字节的值(返回int类型),如果读取到文件末尾(读完了)返回-1

import java.io.FileInputStream; 
public static void main(String[] args) throws  Exception {
		
	FileInputStream fis = new FileInputStream("./src/com/IO_01_FileInputStream_01.java");
int i1=fis.read();
System.out.println((char)i1);

1.4.2 read 重载使用方式

read的重载可以传递一个字节数组,为了提高读取效率

默认一次读取一个字节,如果传递了字节数组,则把数组一次性读满,再回来,然后下次去再读满,一直到读完   read(byte[]) : 一次读取一个数组,返回当前次读取到的个数,如果到达文件末尾,返回-1

public static void main(String[] args)  {
try(FileInputStream fis=new FileInputStream("./src/com/IO_01_FileInputStream_01.java");){

	System.out.println(fis.available());
	byte[]bytes=new byte[1024];

	int count =fis.read(bytes);

	System.out.println(new String(bytes,0,count));

	System.out.println(count);
	
}catch (Exception e){
	e.printStackTrace();
}

1.5 Reader

常用方法:

abstract void close() : 关闭该流

int read() :读取单个字符

int read(char[] cbuf) : 将字符读入数组

abstract int read(char[] cbuf,int off,int len) : 将字符读入数组的某一部分

FileReader 字符输入流,字节输入流是一次读取一个字节,而字符输入流是一次读取一个字符

read() : 读取一个字符,返回该字符的int值,到达文件末尾返回-1

read(char[]) : 读取一个char数组,返回当前次读取的个数,到达末尾返回-1

1.5.1 reader使用方式

public static void main(String[] args) {
	try(FileReader fr=new FileReader("./src/com/IO_01_FileInputStream_01.java")){
		int temp=0;
		while((temp=fr.read())!=-1){
			System.out.print((char)temp);
		}
	} catch (IOException e) {
		
		e.printStackTrace();

1.5.2  reader 重载使用方式

try(FileReader fr=new FileReader("./src/com/IO_01_FileInputStream_01/java"))
{
   char[]chars=new char[512];
   int temp=0;
   while((temp=fr.read(chars)!=-1){
       System.out.println(new String(chars,0,temp));
} 
}catch(Exception e){
e.printStackTrace();
}

1.6 OutputStream

1.6.1 常用方法

void close() : 关闭此输出流并释放与此流有关的所有系统资源

void flush() : 刷新此输出流并强制写出所有缓冲的输出字节

void write(byte[] b ) : 将b.length个字节从指定的字节数组写入此输出流

void write(byte[]b,int off,int len) : 将指定字节数组中从偏移量off开始的len个字节写入此输出流

abstract void write(int b) : 将指定的字节写入此输出流

1.6.2 使用方式

try (FileOutputStream fos = new FileOutputStream("D:/a.txt");
				BufferedOutputStream bos = new BufferedOutputStream(fos);
		) {
			bos.write(97);
			bos.write(98);
			bos.write(99);
			bos.write(100);
			bos.write('n');
			String str = "你好吗";
			byte[] bytes = str.getBytes();
			bos.write(bytes);
			bos.flush();

		} catch (Exception e) {
			e.printStackTrace();
		}

1.7 Writer

1.7.1 常用方法

void write(int c) : 写入单个字符

void write(char[] cbuf) : 写入字符数组

abstract void write(char[] cbuf,int off,int len): 写入字符数组的一部分

void write(String str) : 写入字符串

void write(String str,int off,int len): 写入字符串的某一部分

Writer append(char c) :将指定字符添加到此writer

abstract void flush() : 刷缓存

abstract void close() : 关闭此流,但要先刷新它

1.7.2 使用方法

public static void main(String[] args) {
	try(FileWriter fw=new FileWriter("D:/a.txt");){
		fw.write("你好吗n");
		char[]chars={'a','b','c','d'};
		fw.write(chars);
		fw.flush();
	}
		
	 catch (Exception e) {

		 e.printStackTrace();
	}

1.8 缓冲流

1.8.1 概述

文件输入流 : 字节流: BufferedInputStream  字符流:BufferedReader

文件输出流: 字节流:BufferedOutputStream  字符流: BufferedWriter

主要为了减少物理获取次数,提高效率

1.8.2 BufferedInputStream

long startTime = System.currentTimeMillis();
	try (
			FileInputStream fis = new FileInputStream("D:/a.txt");
			BufferedInputStream bis = new BufferedInputStream(fis);
			){
		byte[] bytes = new byte[1024];
		int temp = 0;
		while((temp=bis.read(bytes)) != -1){
			// System.out.println(new String(bytes,0,temp));
		}
		long endTime = System.currentTimeMillis();
		System.out.println("读取完成,耗时 : "+(endTime-startTime));

	} catch (Exception e) {
		e.printStackTrace();

1.8.3 BufferedOutputStream

try (FileOutputStream fos = new FileOutputStream("D:/a.txt");
				BufferedOutputStream bos = new BufferedOutputStream(fos);
		) {
			bos.write(97);
			bos.write(98);
			bos.write(99);
			bos.write(100);
			bos.write('n');
			String str = "你好吗";
			byte[] bytes = str.getBytes();
			bos.write(bytes);
			bos.flush();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

1.8.4 BufferedReader

		try (FileReader fr = new FileReader("D:/a.txt");
				BufferedReader br = new BufferedReader(fr);) {
			String temp = null;
			// 读取一行
//			readLine():读取一行数据,返回读到的数据,到达文件末尾返回null
//			当不等于null执行
			while ((temp = br.readLine())  != null) {
				System.out.println(temp);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

1.8.5 BufferedWriter

	BufferedWriter bw = null ;
		try {
			 bw = new BufferedWriter(new FileWriter("D:/a.txt"));

			bw.write("你好吗");
			// 换行
			bw.newline();
			bw.write("我很好");
			bw.flush();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (bw != null) {
					bw.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号