IO之字节流

1.IO流概述

IO流:输入输出流(Input/Output)

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

IO流的分类

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

根据数据流向不同分为:输入流和输出流


程序向文件中输入信息那叫输出
程序从文件中读取数据,那叫输入


 IO结构图



2.字节输出流

OutputStream类定义

public abstract class OutputStream extends Object implements Closeable,Flushable

此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。


void close( )关闭此输出流并释放与此流有关的所有系统资源
void flush( )刷新此输出流并强制写出所有缓冲的输出字节
void write(byte[ ] b)将b.length个字节从指定的byte数组写入此输出流
void write(byte[ ] b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入此输出流
abstract void write(int b)将指定的字节写入此输出流

OutputStream类只是一个抽象类,抽象类必须通过子类完成,现在要向文件中输出,使用FileOutputStream类

FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(File file,boolean append)创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutStream(String name,boolean append)创建一个向具有指定name的文件中写入数据的输出文件流


3.字节输出流

InputStream类定义:

public abstract class InputStream extends Object implements Closeable

此抽象类是表示字节输入流的所有类的超类


void close()关闭此输入流并释放与该流关联的所有系统资源
abstract int read()此输入流中读取数据的下一个字符
int read(byte[ ] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数字b中
int read(byte[ ] b,int off,int len)将输入流中最多len个数据字节读入byte数组

FileInputStream 从文件系统中的某个文件中获得输入字节,哪些文件可用取决于主机环境。FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileRead。

FileInputStream(File file)通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定
FileInputStream(String name)通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名name指定

package com.vince.bytestream;

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

public class InputStreamDemo {

	/**
	 * 字节输入流的读取方式三:每次读取指定大小的字节
	 */	
	public static void read3(){
		try {
			File f = new File("d:\\1.txt");
			//构造一个字节输入流对象
			InputStream in = new FileInputStream(f);
			//指定每次要读取的字节数组
			byte[] bytes = new byte[10];
			int len = -1;//每次读取的实际长度
			StringBuilder sb = new StringBuilder();
			while((len = in.read(bytes))!=-1){
				sb.append(new String(bytes,0,len));
			}
			//关闭
			in.close();
			
			//输出 
			System.out.println(sb);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 字节输入流的读取方式二:一次性读取所有字节
	 */	
	public static void read2(){
		try {
			File f = new File("d:\\1.txt");
			//构造一个字节输入流对象
			InputStream in = new FileInputStream(f);
			//根据文件的大小构造字节数组
			byte[] bytes = new byte[(int)f.length()];
			int len = in.read(bytes);
			System.out.println(new String(bytes));
			System.out.println("len="+len);
			//关闭
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 字节输入流的读取方式一:每次读取一个字节
	 */
	public static void read1(){
		
		try {
			//构造一个字节输入流对象
			InputStream in = new FileInputStream("d:\\1.txt");
			int b = -1;//定义一个字节,-1表示没有数据
			while((b=in.read())!=-1){
				System.out.print((char)b);
			}
			//关闭
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
//		read1();
//		read2();
		read3();
	}

}



package com.vince.bytestream;

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

public class OutputStreamDemo {

	/**
	 * 字节输出流的方式二:每次输出指定大小的字节
	 */
	public static void write2() {
		try {
			// 创建一个文件字节输出流对象(参数true表示追加输出)
			OutputStream out = new FileOutputStream("d:\\1.txt", true);

			// String info = "hello,xiaobai";
			String info = "one car come,one car go,two car pengpeng,one car die!";
			byte[] bytes = info.getBytes();
			out.write(bytes);// 输出一个字节数组
			// out.write(bytes,0,5);//输出一个字节数组中的指定范围的字节

			// 关闭流
			out.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 字节输出流的方式一:每次输出一个字节
	 */
	public static void write1() {
		try {
			// 创建一个文件字节输出流对象
			OutputStream out = new FileOutputStream("d:\\1.txt");

			String info = "hello,IO";
			byte[] bytes = info.getBytes();
			for (int i = 0; i < bytes.length; i++) {
				// 向文件中输出
				out.write(bytes[i]);
			}

			// 关闭流
			out.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		// write1();
		write2();
		System.out.println("success");
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值