黑马程序员-----------------IO流

android培训java培训、期待与您交流!

关于流:流是一个抽象的观念,Java中通过流的方式处理输入,输出操作。

  以数据的读取或写入分成了输入流(input stream)、输出流(out stream),Java中通过InputStream、OutputStream、Reader与Writer类

来处理流的输入与输出。

文件的基本操作:利用Reader与Writer类的衍生类创建对象来处理文件的读写操作,Reader类常用的方法有read读取一个字符,read(char[] buf)读取的是流所有数据,Writer类常用的方法write写入到流中,再通过flush方法将流中的数据刷新到文件中,不管是读还是写都要使用close方法关闭流资源。

数据写入文件:要想将数据写入到文件中需要使用Writer类的衍生类FileWriter类,FileWriter类并不是直接继承的Writer,而是继承的OutputStream类,而OutputStream类又继承了Writer类。

public class FileWriterDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileWriter fw = null ;
		try {
			//创建一个FileWriter对象该对象一被初始化就必须有明确被操作的文件,FileWriter对象时需要做异常处理。
			fw =  new FileWriter("FileWriter.txt");
			//调用write方法将数据写入缓冲流中
			fw.write("file input~");
			//调用flush方法将数据刷新到目的地
			fw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			try {
				if(fw!=null)
				//关闭流资源
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

结果:在指定目录下会有一个FileWriter.txt文件,并且文件里面会有file input~

FileWriter fw = new FileWriter("FileWriter.txt");创建一个文件对象,FileWriter.txt文件就会被创建到指定目录下,如果该目录下已有同名文件将被覆盖如果该目录下已有同名文件将被覆盖;调用write方法将数据写入流中,这时数据是存放在流的缓冲区中并没有真正的写入目的地,在调用了flush方法以后,该方法就将缓冲区的数据刷新到目的地。调用close方法关闭流资源,在关闭流资源的时候close方法会先刷新数据在将流资源关闭。

当在FileWriter fw = new FileWriter("FileWriter.txt",true);传递一个true参数时,调用write方法后会续写已有的数据

结果:指定目录下的FileWriter.txt文件里面的内容就会变成file input~file input~

close和flush区别:

flush刷新后,流可以继续使用,close刷新后,会将流关闭。

读取文件数据:文件的读取需要使用FileReader类,这个类是继承了InputStreamReader类,而InputStreamReader又继承了Reader类,因此Reader与InputStreamReader类里面的方法就可以提供给FileReader所创建的对象所使用。

代码演示:

public class FileReaderDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		FileReader fr = null;
		try {
			//创建一个读取流对象,和指定目录下的文件
			fr = new FileReader("FileWriter.txt");
			//read():一次读一个字符,而且会依次自动往下读,返回的是一个数字
			int c = 0;
			//循环输出所有数据
			while((c=fr.read())!=-1)
				System.out.print((char)c);//由于read方法返回的为int类型的数字,这时需要强制转换成字符型
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				//关闭流资源
				if(fr!=null)
					fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

结果:

file input~file input~

由于read方法会抛出IOException异常,利用try{}catch{}finally{}形式处理一下异常,在finally区关闭流资源。

文件搬家:将一个盘文件复制到另外一个盘

步骤:

1.在目的盘创建一个文件,用于存储来源盘的数据。

2.定义读取流和目的盘文件关联。

3.通过不断读写完成数据存储。

4.关闭流资源。

代码演示:

import java.io.*;
public class CopyDemo {
	//定义用于复制函数
	public static void copy()
	{
		FileWriter fw = null;
		FileReader fr = null;
		try {
			//创建数据目的地
			fw = new FileWriter("FileWriter_copy.txt");
			//创建数据来源
			fr = new FileReader("FileWriter.txt");
			//定义一个缓冲容器存放数据,当读完所有数据以后,在写入数据这
			char ch[] = new char[1024];
			//定义一个指针变量
			int len = 0;
			//将所有数据读完存放在容器中
			while((len=fr.read(ch))!=-1)
			{
				//将来源数据写入目的地
				fw.write(ch,0,len);
			}
		} catch (IOException e) {
			
		}finally{
			if(fr!=null)
				try {
					fr.close();//关闭读取流资源
				} catch (IOException e) {
					
				}
			if(fw!=null)
				try {
					fw.close();//关闭写入流资源
				} catch (IOException e) {
				
				}
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		copy();
	}

}

小结:

1.Java以流的形式来处理输入和输出,这样做无论什么形式的输入和输出,只要是针对流处理就可以了。

2.Java中的流是以字节或字符组成的,Writer与Reader类主要是用于操作字符流,而InputStream与OutputStream主要是处理字节流文件。

3.Java中的流以读取和写入的形式,可以将流分为输入流和输出流。

4.在处理流的过程中都是通过创建InputStream、OutputStream、Reader与Writer类来处理输入和输出的。

5.具有缓冲区的文件处理方式,会现将数据存放到缓冲区中,然后一次性完成数据的操作,这样就避免了一个一个操作字节或字符的情况,增强了程序的效率。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值