首页 > 编程 > Java > 正文

JAVA IO-2 InputStream和OutputStream

2019-11-09 19:51:25
字体:
来源:转载
供稿:网友
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/********************************************************** * 这篇代码是讲解InputStream和OutputStream也就是字节输入输出流, Reader和Writer字符输入输出流的简单应用 *  * windows ES平台 *******************************************************/// 这里先讲前两种public class IO_Demo1 {	* 先把一个容易混淆的点写出来 输入和输出相对应的就是读取和写入,但是这里的读取并不是人读取,而是电脑啊手机啊这些设备读取,	* 也就是IN,就像c/c++里面的stdin,所以所谓的输入,一般目的地都是内存,而写入的目的地, 可以是显示器、文件等等,千万不要搞混了。	* ************************************************************	* inputStream的主要方法 int read(); 	* int read(byte b[]); 	* int read(byte b[], 	* int read(byte[] b, int off, int len); 	* void close(); long skip(long numBytes);	* ************************************** 	* OutputStream的主要方法 	* void write(int n); 	* void write(byte b[]); 	* void write(byte b[], int off, int len); 	* void close(); 	* ************************************** 	* Reader的主要方法	* int read(); 	* int read(char b[]); 	* int read(char b[], int off, int len); 	* void close(); 	* long skip(long numBytes); 	* Writer的主要方法 void	* write(int n); 	* void write(char b[]); 	* void write(char b[], int off, int len); 	* void close(); 	* 基本方法讲完了,我们就开始讲第二点*********************	* 上面的这4个类,基本上可以算是平时我们所用的输入输出流的基类或者叫做父类,	* 我查阅了一些API,像inputStream的构造方法,是一个无参的构造方法,	* 也就是说不会对读取的文件类型,文件路径进行定义,只定义了一些基本方法,	* 也可以说符合了java的泛型编程的理念。	* 接下来就是代码时间了,我会用以上4个类的子类,去完成代码。	*/	public static void main(String[] args) {		File fileIs = new File("D://Test//aaa.txt");// File的作用就是指定路径,aaa.txt是我事先创建好的空文件		byte b[] = new byte[5];// 这个是用来存放从文件读取的内容		int count = 0;		try {			// 这就是一个inputStream的子类,FileInputStream构造时就需要传入一个File作为参数			FileInputStream fis = new FileInputStream(fileIs);			// 开始读,注意!!读到尾部的条件,read的返回值是-1而不是0			while ((count = fis.read(b)) != -1) {				System.out.PRintln(count);				/*				 * 转换byte成String,用的是String的构造函数 public String(byte bytes[], int				 * offset, int length)				 * 				 * @param bytes The bytes to be decoded into characters				 * 				 * @param offset The index of the first byte to decode				 * 				 * @param length The number of bytes to decode				 */				System.out.println(new String(b, 0, count));			}			fis.close();		} catch (IOException e) {			e.printStackTrace();		}		// 好了,到这里第一个输入流就讲解完成,高级语言的好处就是会减少好多,自行解析字符串的时间,		// 虽然我脑子里还有是好多C的习惯,还是总结一下		// 1、创建File,用来设置文件路径		// 2、将File传给输入流		// 3、循环读取,-1为EOF也就是文件末尾		// 4、关闭流		// -------------------------------------------------------------		// 好了,接下来就开始输出流,我在aaa.txt的目录下建了一个bbb.txt然后把aaa.txt的内容写进去		File fileOs = new File("D://Test//bbb.txt");		// 我这里再复习下File的一些方法		if (fileOs.exists()) {			try {				FileOutputStream fos = new FileOutputStream(fileOs);				fos.write(b);				//我在这里打了断点测试,FileOutputStream没有缓存会立即写入文件,当然也有可能是我太菜了。。。。							} catch (FileNotFoundException e) {				e.printStackTrace();			} catch (IOException e) {				// TODO 自动生成的 catch 块				e.printStackTrace();			} 		} else {			System.out.println("Cannot find File");		}	}}
//结果我都进行了验证,没有问题!!//接下来就是第二Part 字节流,其实真的差不多//还是看代码,我直接用注释解释import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class IO_Demo2 {	public static void main(String[] args) {		//因为与字符流和字节流真的差不多		//注释就没有这么详细,基本都是简单例子大家都看得懂。		//使用的文件还是那两个文件aaa.txt bbb.txt				File filein = new File("D://Test//aaa.txt");		File fileout = new File("D://Test//bbb.txt");		char[] buf = new char[5];		int count = 0;				try {			FileReader fr = new FileReader(filein);//FileReader就是字符流			FileWriter fw = new FileWriter(fileout);			while((count = fr.read(buf)) != -1)//读取			{				fw.write(buf, 0, count);//写入			}			//这里就要注意了,虽然说程序结束,流会自动关闭,但是FileWriter和FileReader是有缓存的,			//在close的过程中,他会刷新缓存。并且我并没有在这里找到flush这个函数,也有可能是没有。。不确定。。呵呵呵			fr.close();			fw.close();		} catch (FileNotFoundException e) {			e.printStackTrace();		} catch (IOException e) {			// TODO 自动生成的 catch 块			e.printStackTrace();		}			}}
//最后,就是缓冲流BufferedReader和BufferedWriter//他的用法也很简单,我先把构造方法写下来,大家一看就明白了//BufferedReader(Reader in);//BufferedWriter(Writer out);//然后还是看代码比较容易理解
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class IO_Demo3 {//我这次测试,一行一行的读。这种方便的读写,就是BufferedReader的优势	public static void main(String[] args) {		File filein = new File("D://Test//aaa.txt");		File fileout = new File("D://Test//bbb.txt");		String tmpStr = null;		try {			FileReader fr = new FileReader(filein);			FileWriter fw = new FileWriter(fileout);//注意这是第一层			BufferedReader bfr = new BufferedReader(fr);			BufferedWriter bfw = new BufferedWriter(fw);//这是第二层			//其实buffered系列的构造函数,参数要求传入的是底层的Reader和Writer			//这里再次点一下泛型的概念						while((tmpStr = bfr.readLine()) != null)//我每次就读一行			{				bfw.write(tmpStr);				bfw.newLine();//换行				bfw.flush();//强制刷新			}						bfr.close();			bfw.close();			fr.close();			fw.close();//从外层到内层一层一层关,养成好习惯					} catch (FileNotFoundException e) {			// TODO 自动生成的 catch 块			e.printStackTrace();		} catch (IOException e) {			// TODO 自动生成的 catch 块			e.printStackTrace();		}			}}到这里我就把基本的IOStream写完了,方便自己之后查询。如果有大神看到有错误的地方 欢迎拍砖。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表