IO操作

java作为一种高级程序设计语言为我们屏蔽了许多与机器相关的细节,IO操作便是其中之一。java中的IO流主要分为两大类,字节流和字符流。字节流的父类是InputStream和OutputStream,继承它们的有, ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStreamAudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream等。
与InputStream和OutputStream相对应的类是Reader和Writer,它们下面又有 BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReaderBufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter等类继承。
java的IO流操作很好的运用了装饰者模式,下面就贴上运用IO流实现复制文件和打印文件输出的小例子。
package me.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// String commend = sc.nextLine();
		System.out.println("waiting for input");
		try {
			handler(sc.nextLine());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void handler(String commend) throws IOException {

		String[] parsed = commend.split(" ");

		if ("copy".equals(parsed[0])) {
			copy(parsed);
		}
		if ("cat".equals(parsed[0])) {
			cat(parsed);
		}
		if ("cat2".equals(parsed[0])) {
			cat2(parsed);
		}

	}

	public static void cat2(String[] parsed) {
		File file = new File(parsed[1]);
		FileInputStream fis = null;
		InputStreamReader isr = null;
		OutputStreamWriter opw = new OutputStreamWriter(System.out);

		try {
			fis = new FileInputStream(file);
			isr = new InputStreamReader(fis, "utf-8");
			char[] temp = new char[1024];
			int flag;

			while (-1 != (flag = isr.read(temp))) {
				opw.write(temp, 0, flag);
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				fis.close();
				isr.close();
				opw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	public static void cat(String[] parsed) {
		File file = new File(parsed[1]);
		FileInputStream fis = null;
		InputStreamReader isr = null;

		try {
			fis = new FileInputStream(file);
			isr = new InputStreamReader(fis, "utf-8");
			char[] temp = new char[1024];
			int flag;
			StringBuilder sb = new StringBuilder();
			while (-1 != (flag = isr.read(temp))) {
				sb.append(temp, 0, flag);
			}
			System.out.print(sb);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				fis.close();
				isr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	public static void copy(String[] parsed) throws IOException {
		File source = new File(parsed[1]);
		File target = new File(parsed[2]);
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(source);
			fos = new FileOutputStream(target);
			byte[] temp = new byte[1024];
			int flag;
			while (-1 != (flag = fis.read(temp))) {
				fos.write(temp, 0, flag);
			}

		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (null != fis) {
				fis.close();
			}
			if (null != fos) {
				fos.close();
			}
		}

	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值