Java--IO流

一:IO流

1.基本原理:

数据流(Stream)是指数据通信的通道。

2.分类:

按流向分:

输入流:程序从数据源读取数据的流

输出流:程序向数据源写入数据的流

按数据传输单位分:

字节流:以字节为单位传输数据的流

字符流:以字符为单位传输数据的流

按功能分:

节点流:用于直接操作目标设备的流

处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。

 

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer 

3.IO流四个抽象类的重要方法: 

InputStream:  read(xx)读取字节系列方法 

OutputStream: write(xx) 写入字节系列方法 

Reader:  read(xx)读取字符系列方法 

Writer:write(xx)写入字符系列方法 

4.文件字节流与文件字符流

文件字节流:FileInputStream和FileOutputStream

文件字符流:FileReader和FileWriter

1) FileInputStream类

构造方法

FileInputStream(File file)

FileInputStream(String name)

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

read(byte[] b)   读取一定数量的字节从输入流并存入缓冲区阵列 b。

read(byte[] b, int off, int len) 读到 len字节从输入流读入字节数组数据。

close()              关闭此输入流并释放与流关联的任何系统资源。

例题:字节流读取文件内容

package stream;
import java.io.*;
public class FileInputStreamDemo {
	public static void main(String[] args) {
		File f=new File("c:"+File.separator+"test.txt");
		InputStream input=null;
		try {
			input=new FileInputStream(f);
			/**
			 * 每次读取一个字节数据
			int data=0;
			while((data=input.read())!=-1){
				byte b=(byte)data;
				byte[] array=new byte[1];
				array[0]=b;
				String str=new String(array);
				System.out.print(str);
			}**/
			byte[] b=new byte[1024];   // 自定义缓冲区(“卡车”)
			int len=input.read(b);   // 读取数据到byte[]数组中,返回读入到byte[]数组中的字节数
			System.out.println("读取的内容是:"+new String(b,0,len));
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			try {
				input.close();   // 关闭流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

运行结果:

2) FileOutputStream类

构造方法

FileOutputStream (File file)

FileOutputStream(String name)

FileOutputStream(String name,boolean append)

1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容

2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

close()             关闭此输出流并释放与此流关联的任何系统资源。

flush()             刷新输出流,使缓存数据被写出来。

write(byte[] b)   b.length字节从指定的字节数组的输出流。

write(byte[] b, int off, int len)     len字节指定字节数组中的偏移 off开始到输出流。write(int b)       将指定的字节写入该输出流中。

例题:字节流向文件中写入内容

package stream;
import java.io.*;
public class FileOutputStreamDemo {
	public static void main(String[] args) {
		File f=new File("c:"+File.separator+"test.txt");
		OutputStream out=null;
		try {
			out=new FileOutputStream(f,true);   // 开启追加模式
			out.write("中华人民共和国".getBytes());   // 直接写入一个字节数组		
			String data="大宋王朝";
			byte[] b=data.getBytes();
			out.write(b,0,4);   // 使用三参的write(xxx)方法进行写入
			System.out.println(f.length());
			System.out.println("写入成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

运行结果:


3) FileReader类

构造方法

FileReader(File file) 

在给定从中读取数据的 File 的情况下创建一个新FileReader

FileReader(String fileName) 

在给定从中读取数据的文件名的情况下创建一个新 FileReader。

例题:字符流读取文件内容

package stream;
import java.io.*;
public class FileReaderDemo {
	public static void main(String[] args) {
		Reader r=null;
		try {
			r=new FileReader("c:"+File.separator+"test.txt");
			int data=r.read();   // 读取一个字符
			char c=(char)data;   // 转换成字符
			System.out.println("第一次读取:"+c);
			char[] cbuf=new char[1024];   // 自定义缓冲区
			int len=r.read(cbuf);   // 读取数据放入缓冲区中,返回存入缓冲区中的字符个数
			System.out.println("第二次读取:"+new String(cbuf,0,len));
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				r.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
运行结果:

4) FileWriter类

FileWriter(File file)

根据给定的 File 对象构造一个 FileWriter 对

FileWriter(File file, boolean append)

根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(String fileName)

根据给定的文件名构造一个 FileWriter 对象。

FileWriter(String fileName, boolean append)

根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

例题:字符流向文件中写入内容
package stream;
import java.io.*;
public class FileWriterDemo {

	public static void main(String[] args) {
		Writer w=null;
		try {
			w=new FileWriter("c:\\test.txt");
			w.write("你好,Java".toCharArray());   // 写入字符数组
			w.write("ABCDEFG");   // 写入字符串
			w.write('a');   // 写入单个字符
			w.flush();   // 将缓冲区中的写入内容,刷到磁盘上
			System.out.println("写入成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				w.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值