黑马程序员—IO流


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

IO流概括input output的缩写。简单说就是数据的传输方式。

IO流的分类:

根据流向分类:

        输入流——读取数据。

        输出流——写入数据。

根据数据类型分类:

|--字节流

        |--读取数据 输入流        InputStream

                                                FileInputStream

        |--写入数据 输出流        OutputStream

                                                FileOutputStream

|--字符流

        |--读取数据 输入流        Reader

                                                FileReader

         |--写入数据 输出流        Writer

                                                FileWriter

一般按照数据来进行区分。

        既然知道了io流的基本类,如何确定什么时候用字符流或者字节流呢。如果用记事本打开,数据是可以读懂的,就采用字符流,否者,

一概使用字节流。

字符流的操作步骤: 

        1创建字符流输出对象。

        2调用writer方法。

        3关闭流

例:需求,我要往a.txt中写入一句话:hello,io。

步骤:
   A:首先创建一个a.txt文件
   B:创建字符输出流
   C:写数据
  D:释放资源,关闭流

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 我们去使用Writer类,但是,发现它是抽象类,所以找到他的儿子:FileWriter(File file) 
 */
public class FileWriterDemo {
	public static void main(String[] args) throws IOException {
		//FileWriter(File file)
		//首先创建一个a.txt文件
		File file = new File("a.txt");
		file.createNewFile();
		//创建字符输出流
		FileWriter fw = new FileWriter(file);
		//写数据
		//public void write(String str)
		fw.write("hello,io");
		//释放资源,关闭流
		fw.close();
	}
}
上面完成了一个基础的IO流的实现,对一个文本进行写入。如果我们要将一个文本的数据转入到另一个文本中去又该如何进行呢?

 需求:把d盘目录下的a.txt的内容复制到e盘目录下的b.txt中。

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

/*
 * 
 * 数据源:
 * 		d:\\a.txt -- 读取数据 -- 字符输入流 -- FileReader
 * 目的地:
 * 		e:\\b.txt -- 写入数据 -- 字符输出流 -- FileWriter
 */
public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		//封装数据源
		FileReader fr = new FileReader("d:\\a.txt");
		//封装目的地
		FileWriter fw = new FileWriter("e:\\b.txt");
		
		//读写操作
		int ch = 0;
		while((ch=fr.read())!=-1){
			fw.write(ch);
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

上面是对数据进行写入性的操作,如果我们需要对数据进行读取并显示在控制台呢?

下面是代码的实现。

import java.io.FileReader;
import java.io.IOException;

/*
 * 需求:把d盘目录下的a.txt文件中的内容,读取并显示在控制台。
 */
public class FileReaderTest {
	public static void main(String[] args) throws IOException {
		// 字符输入流
		FileReader fr = new FileReader("d:\\a.txt");	
		//读取数据
		int ch = 0;
		while((ch=fr.read())!=-1){
			System.out.print((char)ch);
		}		
		//释放资源
		fr.close();
	}
}

字符流在文件copy中分为两类:

A基本流:

FileReader

int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组

FileWriter:
write(int ch):一次写一个字符
write(char[] chs ,int index, int len):一次写一个字符数组的一部分

B高效流: 

BufferedReader

int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组

特殊:
String readLine():一次读取一行数据

BufferedWriter:
write(int ch):一次写一个字符
write(char[] chs ,int index, int len):一次写一个字符数组的一部分

特殊:
newLine():写一个换行符

下面简单对高效流做下演绎

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

/*
 * 我们前面在使用数组读写数据的时候,是为了提高效率。
 * 而数组的大小是由我们自己定义,既然这样都能提高效率,那么,
 * java在设计类的时候,它本身也应该考虑到了这样的问题,就是
 * 自己定义一个缓冲区,将来读写数据。
 * 带缓冲区的流对象:
 * 	字符流:
 * 		BufferedReader:带缓冲的读取数据
 * 		BufferedWriter:带缓冲的写入数据
 * 
 * 	字节流:
 * 		BufferedInputStream:
 * 		BufferedOutputStream:
 * 
 * BufferedWriter功能:
 * 		BufferedWriter(Writer out)
 * 为什么构造参数居然是一个Writer,而不是File或者String类型的?
 * 		缓冲流它仅仅提供缓冲效果,基本的读写操作还得靠基本的流对象进行操作。
 * 
 * 基本流:就是能直接操作文件的流对象。
 * 高级流:站在基本流的基础之上,提供了其他功能的流对象。他们本身不具备直接读写文件的操作。
 */
public class BufferStreamDemo {
	public static void main(String[] args) throws IOException {
		// write();
		read();
	}

	private static void read() throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("w.txt"));
	
		//方式1
//		int ch = 0;
//		while((ch=br.read())!=-1){
//			System.out.print((char)ch);
//		}
		
		//方式2
		char[] chs = new char[1024];
		int len = 0;
		while((len=br.read(chs))!=-1){
			System.out.print(new String(chs,0,len));
		}
		
		//关闭流对象
		br.close();
	}

	// 写数据操作
	private static void write() throws IOException {
		// 创建流对象
		// Writer w = new FileWriter("w.txt");
		// BufferedWriter bw = new BufferedWriter(w);
		BufferedWriter bw = new BufferedWriter(new FileWriter("w.txt"));

		// 调用write功能
		bw.write("hello");
		bw.flush();

		// 关闭流对象
		bw.close();
	}
}

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值