IO的简单认识

IO流:借助于流技术在不同的设备之间进行数据传输
流的划分:

	按方向划分:
		输入流:读数据
		输出流:写数据

	按类型划分然后流的方向划分:
		字节流:
				字节输入流:InputStream
				字节输出流:OutputStream
		字符流
				字符输入流:Reader
				字符输出流:Writer
		操作"文本文件"---->优先采用字符流,但是字符流是字节流之后出现,先使用字节流!

字节流:

字节输入输出流
	字节输入流:InputStream:抽象类,不能实例化
			xxxInputStream:都是上面的子类
			举例:FileInputStream :文件字节输入流
	字节输出流:OutputStream:抽象类,不能实例化
			xxxOutputStream:都上面的子类
			举例:FileOutputStream:文件字节输出流

字节输出流的使用步骤:

1)创建字节输出流对象
	FileOutputStream(File file)  :将指定File对象作为参数传递构造出文件字节输出流对象
	FileOutputStream(String pathname) :将指定的文件的路径作为参数传递创建文件字节输出流对象

2)写数据	
		write()给输出的文件中写数据
3)释放资源
		close()

FileOutputStream:操作文件的字节输出流中有:

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

文件字节输出流中的构造方法:

public FileOutputStream(File file,boolean append)throws FileNotFoundException
public FileOutputStream(String pathname)
   参数1:File对象表示的路径抽象形式
   参数2:如果true,在文件的字节末尾追加数据

文件字节输入流的使用步骤:

 1)创建文件字节输入流对象 
 	public FileInputStream(File file) throws FileNotFoundException
 	public FileInputStream(String pathname) throws FileNotFoundException(推荐)
 
 2)读数据
 	abstract  int read() :一次读取一个字节
 3)释放资源
   	close()
   	
 		
 public int read()   一次读取一个字节
 int read(byte[] b) :一次读取一个字节数组,这个的执行效率远远高于第一种读的方式!
 
	InputStream:抽象类------>FileInputStream子类
字节缓冲输入流
BufferedInputStream(InputStream in) :构造一个字符缓冲输入流对象,默认的缓冲区大小(足够大)
BufferedInputStream(InputStream in, int size) :指定一个缓冲区大小,构造一个缓冲输入流对象!

成员方法:
读取数据:

		一次读取一个字节:public int read()
		一次读取一个字节数组:public int read(bytes[] bytes)
字节缓冲输出流:

作用:仅仅是提供一个缓冲区而已,不能直接操作文件

public BufferedOutputStream(OutputStream out):构造一个缓冲区流对象,默认的缓冲区大小(足够大了)

					byte[] buf = new byte[8192];足够大
					

public BufferedOutputStream(OutputStream out,int size):构造一个缓冲区流对象,指定缓冲区大小

成员方法

void write(byte[] b, int off, int len) :写字节数组的一部分
void write(byte[] b)  :写一个字节数组
 void write(int b) :写一个字节
 
 该类流针对文件的操作,还是需要去使用最基本的字节输出流操作
 
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("xxx.xxx"))
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"))

字符流:

OutputStreamWriter/InputStreamReader

字符流通向字节流的桥梁

OutputStreamWriter(OutputStream out) :使用平台默认编码集进行编码同时构造出字符转换输出流对象(推荐)
OutputStreamWriter(OutputStream out, Charset cs) 使用指定的字符集进行编码同时构造出字符转换输出流对象

成员方法:继承父类的Writer的方法

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) :写字符串的一部分
public void flush():刷新流对象 ,在关闭字符流之前,先刷新流
     刷新之后还可以在写数据,建议在关闭之前,先刷新(防止出现数据没有写入到流中)
 close():关闭该流对象相关的资源,回收这些系统资源,关闭了就不能再给流中在数据了
提供转换流子类(具体的便捷类) FileReader(String pathname)  FileWrier(String pathname)

这里只对字节流进行举例,字节缓冲流的用法一样

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {

	public static void main(String[] args) throws IOException {
		//创建FileOutputStream对象
		FileOutputStream fos = new FileOutputStream("hello.txt");
		//写入数据,三中类型
		/*
		 *  public abstract  void write(int b) :写入一个字节数据
    		public void write(byte[] b) :写一个字节数组
			public void write(byte[] b, int off, int len):写一个字节数组的一部分
		 * */
		fos.write("hello word\r\n".getBytes());
		//字节
		fos.write('A');
		//换行
		fos.write("\r\n".getBytes());
		byte[]  bytes = {99,100,101,102,103,104};
		fos.write(bytes, 1, 4);
		//释放资源,关闭流
		fos.close();
		FileInputStream fis = new FileInputStream("hello.txt");
		//读取数据,一次一个字节
		int by = 0;
		while((by=fis.read())!=-1) {
			System.out.print((char)by);
		}
		//一次读取一个字节数组
		byte [] byt = new byte [1024];
		int len = 0;
		while((len=fis.read(byt))!=-1) {
			System.out.println(new String(byt,0,len));
			//释放资源,关闭流
			fis.close();
			
		}
	}

}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
//复制"hello.txt"文件的内容到"Javaee.txt"文件中
public class Test2 {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("hello.txt");
		FileOutputStream fos = new FileOutputStream("Javaee.txt");
		//一次复制一个字节
		int by = 0;
		while((by=fis.read())!=-1) {
			fos.write(by);
		}
		//一次复制一个字节数组
		byte[] bytes = new byte[1024];
		int len = 0;
		while((len = fis.read(bytes))!=-1) {
			fos.write(bytes,0,len);
		}
		//释放资源
		fis.close();
		fos.close();
	}

}

字符缓冲流(字符高效流)

BufferedWriter
BufferedReader
BufferedXXX都只是提供缓冲区,对文件读写操作还要依赖于对应的基本字符流...	
BufferedReader:字符缓冲输入流

构造方法:

BufferedReader(Reader in) :默认的字符缓冲区输入流对象
BufferedReader(Reader in, int sz)  :指定的大小的字符缓冲输入流对象

成员方法:

public int read():读取单个字符
public int read(char[] chs):读取一个字符数组

特有功能:

public String readLine():一次读取一行内容

键盘录入数据

	1)main:早期的方式
	2)JDK5提供了Scanner类:键盘录入
		Sacnner(InputStream in)
		InputStream in = System.in;
		Scanner sc = new Scanner(System.in) ;
	3)BufferedReader(Reader r)
字符缓冲输出流
BufferedWriter(Writer out) :创建一个字符缓冲输出流对象 默认的缓冲区大小(默认值足够大了)
BufferedWriter(Writer out, int sz):创建一个字符缓冲输出流对象,指定的缓冲区大小

成员方法:

public void flush() 
write(int ch):写单个字符
write(char[] chs):写字符数组
write(char[] chs,int offerset,int length) :写字符数组的一部分
write(String str) 写字符串

特有功能:

public void newLine()throws IOException :写入行的分隔符 

这里正对字符缓冲流进行举例(一次读取一行属于字符缓冲输出流的特有功能)
字符流读写复制的三种方法

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class CopyTest {
	
	public static void main(String[] args) throws IOException {
		
		copyFile();
		copyFile2();
		copyFile3();
	}
	
	//利用BufferedReader/BufferedWriter的特有功能
	private static void copyFile3()  throws IOException{
		
		//封装源文件
		BufferedReader br = new BufferedReader(
				new FileReader("Hello.java"));
		//封装目的
		BufferedWriter bw = new BufferedWriter(
				new FileWriter("Copy.java"));
		
		//读写复制:
//		BufferedReader readLine()一次读取一行
		String line = null ;
		while((line=br.readLine())!=null) {
			//读一行,写一行
			bw.write(line);
			bw.newLine(); //写行分隔符
			bw.flush();
		}
		//释放资源
		bw.close();
		br.close();
	}

	//一次读取一个字符数组
	private static void copyFile2()  throws IOException{
		//封装源文件
		BufferedReader br = new BufferedReader(
				new FileReader("Hello.java"));
		//封装目的
		BufferedWriter bw = new BufferedWriter(
				new FileWriter("Copy.java"));
		
		char[] chs = new char[1024] ;
		int len = 0 ;
		while((len=br.read(chs))!=-1) {
			bw.write(chs, 0, len);
			bw.flush();
		}
		
		bw.close();
		br.close();
	}

	private static void copyFile() throws IOException {
		//封装源文件
		BufferedReader br = new BufferedReader(
				new FileReader("Hello.java"));
		//封装目的
		BufferedWriter bw = new BufferedWriter(
				new FileWriter("Copy.java"));
		
		//一次读一个字符
		int ch = 0 ;
		while((ch=br.read())!=-1) {
			bw.write(ch);
			bw.flush();
		}
		bw.close();
		br.close();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值