输入输出流大全

时间:2021-07-12 00:35:56

如果通过一个字节流把文本文件的内容输出到显示器上,当输出汉字时就会出现乱码

/*
	2009年7月3日10:41:46
	本程序证明了:
		如果通过一个字节流把文本文件的内容输出到显示器上,当输出汉字时就会出现乱码
*/

import java.io.*;

public class TestIO_2
{
	public static void main(String[] args) throws Exception
	{
		FileInputStream fr = new FileInputStream("D:/share/S5/di-20 流/TestIO.java");
		int ch;
		int cnt = 0;
		
		ch = fr.read();
		while (-1 != ch)
		{
			++cnt;
			System.out.printf("%c", (char)ch);
			ch = fr.read();
		}
		System.out.printf("该文件字符的个数是:%d\n", cnt);
		fr.close();
	}
}
二。利用 BufferedReader 和 BufferedWriter 完成文本文件的复制
/*
	利用 BufferedReader 和 BufferedWriter 完成文本文件的复制
*/

import java.io.*;

public class TestBufferedReaderWriterCopy
{
	public static void main(String[] args)
	{
		BufferedReader br = null;
		BufferedWriter bw = null;
		
		try
		{
			br = new BufferedReader(
						new FileReader("D:\\share\\S5\\di-20 流\\TestBufferedReaderWriterCopy.java")
					);
			bw = new BufferedWriter(
						new FileWriter("d:/share/Writer.txt")
					);
			String str = null;
			
			while (null != (str=br.readLine()))  //br.readLine()读取一行字符,但会将读取的换行符自动丢弃,即返回的String对象中并不包括换行符
			{
				bw.write(str);
				bw.newLine();  //写入一个换行符  这行不能省
			}
			bw.flush();
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
			System.exit(-1);
		}
		catch (IOException e)
		{
			e.printStackTrace();
			System.exit(-1);
		}
		finally
		{
			try
			{
				bw.close();
				br.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
				System.exit(-1);
			}
		}
	}
}

三。

/*
	2009年7月3日10:42:43
	通过字符流完成文本文件的复制
	
*/

import java.io.*;

public class TestFileReaderWriterCopy
{
	public static void main(String[] args) throws Exception
	{
		FileReader fr = new FileReader("D:\\share\\S5\\di-20 流\\TestFileReaderWriterCopy.java");
		FileWriter fw = new FileWriter("d:/zhangsan.haha");
		int ch;
		
		ch = fr.read();
		while (-1 != ch)
		{
			fw.write(ch);
			ch = fr.read();
		}		
		fw.flush();
		
		fr.close();
		fw.close();
	}
}


/*
	2009年7月3日10:43:18
	本程序证明了:
		通过字符流无法完成非文本文件的复制
		或者说:
			字符流只能处理文本文件
			不能处理非文本文件
	
*/

import java.io.*;

public class TestFileReaderWriterCopy_2
{
	public static void main(String[] args) throws Exception
	{
		FileReader fr = new FileReader("E:\\IBM教学\\java\\lesson_io\\妹妹来看我.mp3");
		FileWriter fw = new FileWriter("d:/zhangsan.haha");
		int ch;
		
		ch = fr.read();
		while (-1 != ch)
		{
			fw.write(ch);
			ch = fr.read();
		}		
		fw.flush();
		
		fr.close();
		fw.close();
	}
}

/*
	2009年7月3日10:44:37
	本程序证明了:
		通过字节流可以完成音频格式文件的复制
		实际上我们通过字节流可以完成任意格式文件的复制
		
		但本程序有个缺点:
			没有缓冲区, 处理速度慢
			
		可以参考对比"TestInputStreamOutputStreamCopy_3.java"
*/


import java.io.*;


public class TestInputStreamOutputStreamCopy
{
	public static void main(String[] args) throws Exception
	{
		FileInputStream fr = new FileInputStream("E:\\IBM教学\\java\\lesson_io\\妹妹来看我.mp3");
		FileOutputStream fw = new FileOutputStream("d:/zhangsan.haha");
		int ch;
		
		ch = fr.read();
		while (-1 != ch)
		{
			fw.write(ch);
			ch = fr.read();
		}		
		fw.flush();
		
		fr.close();
		fw.close();
	}
}

/*
	2009年7月3日10:45:49
	本程序证明了:
		带缓冲区的字节流处理文件的速度要快于不带缓冲区的字节流处理文件的速度
		
		可以参考对比"TestInputStreamOutputStreamCopy.java"
*/

import java.io.*;

public class TestInputStreamOutputStreamCopy_3
{
	public static void main(String[] args) throws Exception
	{
		BufferedInputStream bis = new BufferedInputStream( new FileInputStream("E:\\IBM教学\\java\\lesson_io\\妹妹来看我.mp3"));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/zhangsan.haha"));
		byte[] buf = new byte[1024];
		int len;
		
		len = bis.read(buf);
		while (-1 != len)
		{
			bos.write(buf, 0, len);
			len = bis.read(buf);
		}		
		bos.flush();
		
		bos.close();
		bis.close();
	}
}