JAVA的IO流入门

导读

java程序中,对于数据的输入/输出操作以的方式进行的。流是内存中一组有序数据序列。Java将数据从源读入到内存当中,形成了流,然后这些流可以写到目的地。

Java中流按功能分为:节点流(原始流)和处理流(包裹流)

处理流是在节点流的基础上提供了更加强大的读写功能,处理流不能独立存在,必须依附于结点流。

Java中流按处理数据的不同分为字节流和字符流

字节流:以字节为单位来处理数据的,字节流数据为8位,一般用于对二进制的数据的读写,例如声音,图像等。

字符流:以字符为单位来处理数据的,一般用于读写文本文件的。


字节流:字节流的基类是抽象类 InputStream OutpuStream InputStream类是表示字节输入流的所有类的超类OutputStream类是字节所有输出流的超类。

字符流:字符流的基类是抽象类ReaderWriter


字符处理流

package com.test.java;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class IoStreamChar {
	public static void main(String[] args) {
		File f1 = new File("E:\\test\\account.txt");
		File f2 = new File("E:\\test\\aaa.txt");		
		try{
			FileReader fi = new FileReader(f1);
			FileWriter fo = new FileWriter(f2);
			int m;
			while((m=fi.read())!=-1)
				fo.write((char)m);
			fi.close();
			fo.close();
		}
		catch(Exception e){
			System.out.println("there is a error when reading or writing file.");
		}
	}
}


缓冲流:BufferedReader、BufferedWriter。BufferedReaderBufferedWriter是针对字符的缓冲输入输出流,不能独立读写数据必须包装字符流进行读写。可以通过内存缓冲区来提高输入输出速度。

public class SysIn2 {
	public static void main(String[] args) {
		try {
			String encoding="GBK";
            File file=new File("E:\\test\\aaa.txt");
            if(file.isFile() && file.exists()){ 
                InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);
                BufferedReader bReader = new BufferedReader(read);
                String lineTxt = null;
                String array = "";
                while((lineTxt = bReader.readLine()) != null){   
                    array += lineTxt;
                }
                read.close();
                System.out.println(array);
                } else {
                System.out.println("can't find the file");
                }
            } catch (Exception e) {// readLine() method must handle java.io.IOException Exception 
            	System.out.println("run error"+e.getMessage());
            	e.printStackTrace();
            	}
		}
}


转换流:将字节流转换成字符流。InputStreamReaderInputStreamWriter。InputStreamReader是字节流通向字符流的桥梁,它使用指定的 charset 读取字节并将其解码为字符。

package com.test.java;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Transfermethod {
	public static void main(String[] args) {	
		try{
			File f = new File("E:\\test\\aaa.txt");
			OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(f));
			InputStreamReader  isr = new InputStreamReader(new FileInputStream(f));
			BufferedReader br= new BufferedReader(isr);
			BufferedWriter bw = new BufferedWriter(osw);
			bw.write("this is a test program");
			bw.flush();
			String str;
			while((str= br.readLine())!=null){
				System.out.println(str);
			}
			br.close();
			bw.close();
		}
		catch(IOException e){
			System.out.println(e.getMessage());
		}
	}
}



字节处理流

缓冲流: BufferedInputStreamBufferedOutputStream是缓冲字节流,它们通过减少读写I/O设备次数来加快输入输出速度:通过带缓冲区的输出流写数据时,数据先保存在缓冲区中,积累到一定程度才会真正写到输出流中。缓冲区通常用字节数组实现,实际上是指一块内存空间。flush()方法强制把缓冲区内的数据写到输出流中。应该关闭输入/输出流。

数据流:DataInputStream,DateOutputStream 可以按照与平台无关的方式从流中读取基本类型(int,charlong)的数据。

                FileInputStreamFileOutputStream 只能读写字节,如果我们要读写intdouble或者字符串类型就要使用数据流进行包装。数据流不能独立读写。

package com.test.java;
import java.io.*;
public class Test {
	public static void main(String[] args){
		File f1 = new File("E:\\test\\account.txt");
		File f2 = new File("E:\\test\\aaa.txt");
		
		try{
			FileInputStream fi = new FileInputStream(f1);
			FileOutputStream fo = new FileOutputStream(f2);
			int m;
			while((m=fi.read())!=-1)
				fo.write(m);
			fi.close();
			fo.close();
		}
		catch(Exception e){
			System.out.println("there is a error when reading or writing file.");
		}				
	}	
}


特殊字节流

System类是Java语言中一个功能强大、非常有用的类,它提供了标准输入/输出及运行时的系统信息。从System类不能创建对象,也就是说,System类的所有属性和方法都是静态的,引用时要以System作为前缀。System.in其实也是一个字节输入流,继承自InputStream

System.in称为标准输入流,用于程序输入,通常读取用户从键盘输入的信息;

System.out称为标准输出流,用于程序输出,通常向用户显示信息;

System.err称为标准错误流,用于向用户显示出错信息。

package com.test.java;
import java.io.IOException;
public class SysIn {
	public static void main(String[] args) {
		System.out.println("please input a data:");
		try{
			int i = System.in.read();
			System.out.println("the data is:"+(char)i);
		}
		catch(IOException e){
			e.printStackTrace();
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值