Java的一些高级特性(七)——Java7中的I/O

首先我们来看看一个简单的Byte Stream操作。程序在循环中每次读取一个字节和写入一个字节,最后完成文件的拷贝操作。注意try...with段和in.read()/out.write()方法:

package com.freesoft.java7newfeature;

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

public class TestByteStream {
	public static final int BUF_SIZE = 1024;
	public static void main(String[] args) {
		try (
				FileInputStream in = new FileInputStream("files/tbs/source.png");
				FileOutputStream out = new FileOutputStream("files/tbs/target.png");){
			int c = 0;
			while((c = in.read()) != -1) {
				out.write(c);
			}
			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

下面我们看看字符流的操作。我们这里使用文本文件来作为源和目标,可以看到reader.read()和writer.write()每次读取和写入都是一个字符:

package com.freesoft.java7newfeature;

import java.io.FileReader;
import java.io.FileWriter;

public class TestCharacterStream {
	public static final int BUF_SIZE = 1024;
	public static void main(String[] args) {
		try (
				FileReader reader = new FileReader("files/tbs/source.txt");
				FileWriter writer = new FileWriter("files/tbs/target.txt");){
			int c = 0;
			while((c = reader.read()) != -1) {
				writer.write(c);
			}
			writer.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

如果我们需要使用缓冲区,我们就需要使用BufferedReader和BufferedWriter(如果是二进制读写则使用BufferedInputStream和BufferedOutputStream,使用了wrap pattern):

package com.freesoft.java7newfeature;

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

public class TestBufferedCharStream {
	public static final int BUF_SIZE = 1024;
	public static void main(String[] args) {
		try (
				BufferedReader reader = new BufferedReader(new FileReader("files/tbs/source.txt"));
				BufferedWriter writer = new BufferedWriter(new FileWriter("files/tbs/target.txt"));){
			int c = 0;
			while((c = reader.read()) != -1) {
				writer.write(c);
			}
			writer.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

最后我们看一下在Java7中如何操作有分隔符的文件,这里使用了一个sanner类:

package com.freesoft.java7newfeature;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;

public class TestTokenizedText {
	public static void main(String[] args) {
		try (
				Scanner s = new Scanner(new BufferedReader(new FileReader("files/tbs/source.txt")));
				){
			// 此处可以使用各种参数,看文件是使用什么形式分割
			s.useDelimiter("\r\n");
			while(s.hasNext()) {
				System.out.println(s.next());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值