您的位置:首页 > 编程语言 > Java开发

Java I/O 学习笔记(4) reader和writer

2015-04-22 17:39 288 查看
package files;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.io.StreamTokenizer;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Arrays;

public class TestReaderWriter {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		testFileReaderWriter();
		testStreamAdapter();
		testStringReaderWriter();
		testCharArrayRW();
		testLineNumberRW();
		testStreamTokenizer();
		testBufferedReader();
	}

	/**
	 * 读取中文会产生乱码,因为系统默认编码是GBK,而文件的格式是UTF-8。一种选择是
	 * 改变系统默认编码为UTF-8,另一种方法见testStreamAdapter()
	 * 
	 * @throws IOException
	 */
	public static void testFileReaderWriter() throws IOException {
		char[] charBuffer = new char[100];
		BufferedReader br = new BufferedReader(new FileReader("./input.txt"));
		br.read(charBuffer);
		System.out.println(charBuffer);
		br.close();

		BufferedWriter bw = new BufferedWriter(new FileWriter("./output.txt"));
		bw.write("Hello world.");
		bw.close();
	}

	public static void testStreamAdapter() throws IOException {
		char[] charBuffer = new char[100];
		BufferedReader br = new BufferedReader(new InputStreamReader(
				new FileInputStream("./input.txt"), "UTF-8"));
		br.read(charBuffer);
		br.close();
		System.out.println(charBuffer);

		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
				new FileOutputStream("./output.txt"), "UTF-8"));
		bw.write("正则表达式。");
		bw.close();
	}

	public static void testStringReaderWriter() throws IOException {
		StringReader sr = new StringReader("正则表达式");
		char[] charBuffer = new char[2];
		while (-1 != sr.read(charBuffer)) {
			System.out.println(Arrays.toString(charBuffer));
		}

		StringWriter sw = new StringWriter();
		sw.write("正则表达式");
		sw.append("。");
		System.out.println(sw.toString());
	}

	public static void testCharArrayRW() throws IOException {
		char[] chars = new char[] { '正', '则', '表', '达', '式' };
		CharArrayReader car = new CharArrayReader(chars);
		char[] charBuffer = new char[2];
		while (-1 != car.read(charBuffer)) {
			System.out.println(Arrays.toString(charBuffer));
		}

		CharArrayWriter caw = new CharArrayWriter();
		caw.write("正则表达式");
		caw.append("。");
		System.out.println(caw.toString());
	}

	public static void testLineNumberRW() throws IOException {
		LineNumberReader lnr = new LineNumberReader(new StringReader(
				"正则\r\n表达\r\n式"));
		char[] charBuffer = new char[2];
		while (-1 != lnr.read(charBuffer)) {
			System.out.println(Arrays.toString(charBuffer));
			System.out.println(lnr.getLineNumber());
		}
	}

	public static void testStreamTokenizer() throws IOException {
		StreamTokenizer sTokenizer = null;
		int wordCount = 0, numberCount = 0;
		sTokenizer = new StreamTokenizer(new FileReader("./input.txt"));

		while (sTokenizer.nextToken() != StreamTokenizer.TT_EOF) {

			if (sTokenizer.ttype == StreamTokenizer.TT_WORD) {
				wordCount++;
				System.out.println(sTokenizer.sval);
			} else if (sTokenizer.ttype == StreamTokenizer.TT_NUMBER) {
				numberCount++;
				System.out.println(sTokenizer.nval);
			}
		}

		System.out.println("Number of words in file: " + wordCount);
		System.out.println("Number of numbers in file: " + numberCount);

	}

	public static void testBufferedReader() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = null;
		while ((s = br.readLine()) != null && s.length() != 0) {
			System.out.println(s);
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: