Javase基础之IO流笔记

IO流可以分为字符流和字节流:字符流用来操作与字符相关的读写,字符流的默认编码为GBK,字符流底层其实就是用字节流实现的。(如文档)

字节流用来操作与字节相关的读写。(如图片,视频)

注意:一个字符占用两个字节。

IO流有4个抽象基类:字符流(Reader,Writer)

     字节流(InputStream,OutputStream)


字符流的子类:FileReader,FileWriter,BufferedReader,BufferedWriter,InputStreamReader,OutputStreamWriter

FileWriter

方法:writer(String str);

writer(char[]  ch);

flush();//刷新缓冲区,数据没有刷新就不会写到硬盘上。

close();关闭前会先刷新缓冲区。

FileReader

方法:int read()//每次读取一个字符,当读取到末尾没有数据时返回-1.

   int read(char[] buf);//将读取的内容存放到buf字符数组里面,int为读取内容的长度,长度取决于字符数组的大小。JVM虚拟机启动的时候分配的内存默认是64M,所以buf的大小应该控制的差不多。

    close()

代码示例:

/**
 * 需求:将demo.txt里面的内容拷贝到demo_copy.txt文件中。
 */
import java.io.*;
public class CopyDemo {
	public static void main(String[] args) {
		copy1();
	}
	public static void copy1(){
		FileReader fr=null;
		FileWriter fw=null;
		try{
			fr=new FileReader("demo.txt");
			fw=new FileWriter("demo_copy.txt");
			int num=0;
			char[] buf=new char[1024];
			while((num=fr.read(buf))!=-1){
				fw.write(buf,0,num);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(fw!=null)
				try{
					fw.close();
				}catch(IOException e){
					e.printStackTrace();
				}finally{
					if(fr!=null){
						try{
							fr.close();
						}catch(IOException e){
							e.printStackTrace();
						}
					}
				}
		}
	}
}

BufferedWriter:为数据的读写提供缓冲区,

方法:write()

    newLine();//换行操作,提供了一个换行的跨平台操作,Linux对应的换行是\n,而Window对应的换行是\r\n.

   close();此时的关闭操作是关闭Writer的字符流,因此不必在关闭Writer的字符流。

BufferedReader

方法:read()

    String reaLine();//一次性读取一行,原理还是一次都是一个字符.当读到末尾没有数据时返回null;

    close();

转换流:InputStreamReader,OutputStreamWriter

特点:转换流可以指定编码类型。new OutputStreamWriter(System.out,"utf-8");

代码示例:


<pre name="code" class="java">/**
需求:将控制台输入的字符存到trans.txt文件中,当控制台输入over时结束输入。
*/
import java.io.*;
public class transStream {
public static void main(String[] args) {
	BufferedReader bufr=null;
	BufferedWriter bufw=null;
	try {
		bufr=new BufferedReader(new InputStreamReader(System.in));
		bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("trans.txt"),"utf-8"));//指定编码表
		String line=null;
		while((line=bufr.readLine())!=null){
			bufw.write(line.toUpperCase());
			bufw.flush();
			bufw.newLine();
			
			if("over".equals(line))
			{
				break;
			}
			
		}
		
		
	} catch (IOException e) {
		e.printStackTrace();
	}
	finally{
		try {
			bufr.close();
			bufw.close();
			
		} catch (Exception e2) {
	e.printStackTrace();
}}}}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值