Java IO流字节流类

一、什么是IO?
IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。

二、什么是流?
流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。

流的特性:
1.先进先出:最先写入输出流的数据最先被输入流读取到。

2.顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。

3.只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

三、 IO流分类
1.按数据流的方向:输入流、输出流
2.按处理数据单位:字节流、字符流
3.按功能:节点流、处理流

四、字节流:
文件读写中,读取文件是输入流,写文件是输出流

1.字节输入流(InputStream–抽象类):
(1)子类FileInputStream类的构造方法:

  • FileInputStream(File file)
  • FileInputStream(String name)

(2)读取数据的方法:

  • public int read():一次读取一个字节
  • public int read(byte[] b):一次读取一个字节数组

(3)字节输入流读取数据的操作步骤:

  • 创建字节输入流对象 ,并指定文件路径,不指定文件路径默认在项目路径。如果该路径没有该文件,便会报出找不到文件的错误

  • 调用read()方法读取数据,并把数据显示在控制台

  • 关闭流对象

package com.jsu.java;  
 
import java.io.*;  

	public class Demo1 {  
	    public static void main(String[] args) {  
	        //1.创建文件对象  
	        File file = new File("D:\\filedemo\\demo.java");  
	        System.out.println("文件长度:" + file.length() + "字节");  
	        FileInputStream fis = null;  
	        try {  
	            //2.通过子类来实例化FileInputStream对象  
	            fis = new FileInputStream(file);  
	            //3.从流中读取若干字节并处理  
	            byte[] bbuf = new byte[1024];  
	            int hasData;//读取的字节数  
	            while ((hasData = fis.read(bbuf)) > 0){//表示hasData没有到文件尾  
	                System.out.println(new String(bbuf,0, hasData));  
	            }  
	        } catch (IOException e) {  
	//            throw new RuntimeException(e);  
	            e.printStackTrace();  
	        } finally {  
	            //4.关闭输入流  
	            try {  
	                fis.close();  
	            } catch (IOException e) {  
	//                throw new RuntimeException(e);  
	                e.printStackTrace();  
	            }  
	        }  
	    }  
	}  

2.字节输出流(OutputStream–抽象类):

(1)子类FileOutputStream 类的构造方法:

  • FileOutputStream(File file)
  • FileOutputStream(String name)

(2)写入数据的方法:

  • public void write(int b) :写入一个字节
  • public void write(byte[] b):写入一个字节数组
  • public void write(byte[] b,int off,int len):写入一个字节数组的一部分

(3)字节输出流写入数据的操作步骤:

  • 创建字节输出流对象 ,并指定文件路径,不指定文件路径默认在项目路径。如果该路径没有该文件,创建字节输入流对象会将该文件创建出来
  • 用输出流对象点 write() 方法,根据传入的参数确认调用的那个写入的方法,并将参数内容写入流对象指定的文件中
  • 关闭流对象
package com.jsu.java;  
	  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  

	public class Demo2 {  
	    public static void main(String[] args) {  
	        FileOutputStream fos = null;//声明文件字节输出流对象  
	        // OutputStream os=nul1;  
	        //1.建立文件对象  
	        File file=new File("D:\\filedemo\\mytest.txt");  
	        if(!file.exists()) {//如果文件对象不存在  
	            try {  
	                file.createNewFile();//创建新文件  
	            } catch (IOException e) {  
	//                throw new RuntimeException(e);  
	                e.printStackTrace();  
	            }  
	        }  
	        System.out.println("文件长度:" + file.length() + "字节");  
	  
	        try{  
	            //2.实例化输出流对象  
	//            fos=new FileOutputStream(file);  
	            //实现追加功能  
	            fos = new FileOutputStream(file,true);  
	            //os=new FileOutputstream(file);  
	            //2.向输出流写入数据  
	            String str1 = "Knowledge is power";  
	            String str2 = "爱国,敬业,友善";  
	            fos.write(str1.getBytes());  
	            fos.write(str2.getBytes());  
	            String str3 = "保护环境";  
	            byte[] buf = str3.getBytes();//把字符串变成字节数组  
	            for(byte b : buf){  
	                fos.write(b);  
	            }  
	        } catch (IOException e) {  
	//            throw new RuntimeException(e);  
	            e.printStackTrace();  
	        } finally {  
	            //4.关闭输出流  
	            try {  
	                fos.close();  
	            } catch (IOException e) {  
//                throw new RuntimeException(e);  
	                e.printStackTrace();  
	            }  
	        }  
	        }  
	    }  
	    
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值