黑马程序员---IO流简单概述


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

 


1.IO流概述
 流:程序用来读写文件数据这个技术,流技术,输出和输入,IO流技术
IO流技术实现设备之间的数据传输,可以使用流技术读取数据,自己机子的,读取其他计算机,设备硬盘,另一台主机,或者互联网
按照操作数据的不同,分成了字符流和字节流
字符流,专门用于操作文本数据,记事本,Java程序,网页,字符流在读或者写数据的时候,查询本机默认编码表(GBK),有利于操作文本文件,出现于JDK1.1
字节流,可以用来操作任意文件,读写文件的时候,不查询编码表
按照流向分,输出流Output和输入流Input。输出,Java程序写文件,操作数据目的,输入,Java程序读取文件,操作数据源
字符流只能操作文本数据,字节流任意数据,输出就是写文件,输入就是读取件

 

2.8.IO中的继承体系
字符输出流,写文本文件的,抽象基类 java.io.Writer,写文件的,写的方法有哪些:
write(字符数组)  write(字符数组一部分) write(单个字符) write(字符串)


字符输入流,读文本文件的,抽象基类 java.io.Reader,读文件的,读的方法有:
read()单个字符  read(字符数组)  read(字符数组一部分)


字节输出流,写任意文件的,抽象基类 java.io.OutputStream,写文件的,写的方法:
write(单个字节)  write(字节数组) write(字节数组一部分)


字节输入流,读任意文件的,抽象基类 java,io.InputStream,读文件的,读的方法:
read()单个字节  read(字节数组)  read(字节数组一部分)

 

 

3.

写文本文件

字符输出流 Writer,父类不能直接使用,找子类,FileWriter

构造方法 FileWriter(字符串的文件名)

字符流在写数据的时候,write方法写,数据写在了内存中,并没有直接写到目的文件中,内存(缓冲),如果让数据写到目的文件中,字符流要进行缓存区的刷新操作。Writer中的方法flush,刷新流的缓冲,将数据写到目的地,字符流只要刷新的,数据必会走向目的地。

文件的续写,文件的后面追加写入,原有的数据都被保留下来

FileWriter类构造方法中,传递String的文件名,true实现追加写入

 

 

4.读取文本文件
  Reader类,抽象类,找子类,FileReader,构造方法,直接传递字符串的文件名
  调用FileReader父类方法实现读取功能
  读取单个字符的方法  int read() 读取一个字符
 read()方法,每次只能读取一个字符,返回这个字符的码值,没调用一次read()自动向后读取一个字符,如果读取到文件的末尾,返回-1
 注意:文件读取的时候,一次循环不允许出现2次read()
       保证读取的文件必须是GBK编码的(ANSI)
读取字符数组 int read(char[] ch)
每次读取到的字符,装在字符数组中,返回每次读取的有效字符个数

 

 

5.文件的复制,文本文件
 读写原理,一个读,一个写
 FileReader类读取源文件
 FileWriter将读取到的数据源中的文本,写向数据目的文件
 采用读取一个字符,写一个字符的方式

 

6.字符输出流的缓冲区对象
 数组的缓冲,提高了流对象的读写效率,开发出现流对象的缓冲区对象,目的提高流的操作效率。字符输出流的缓冲区 java.io.BufferedWriter
  字符输出流缓冲区对象方法:

构造方法 BufferedWriter(Writer out)传递的是Writer的子类对象。目的:缓冲区对象出现的目的,提高输出流的效率,提高哪一个流,只要传递的是Writer的子类,提高的就是你这个子类的效率。FileWriter

void newLine()写一个换行。\r\n Windows下有效,Linux操作系统\n
newLine()具有跨平台性,安装的JVM版本了,如果安装的JVM是Windows版本的,newLine()方法中写的就是\r\n ,如果安装的是Linux版本的JVM,newLine()方法中的写就是\n

 

 

7.字符输入流的缓冲区对象
 提高字符输入流的读取效率,java.io.BufferedReader,查阅API文档,这个缓冲区可以按行读取。
 字符输入流缓冲区对象的方法:

构造方法 BufferedReader(Reader in),传递是的Reader类的子类对象。目的,提高字符输入流的读取效率,提高哪个流对象,传递Reader子类,FileReader.
String readLine()读取文本一行,返回字符串,读取文件结尾,返回null,读取一行,返回的字符串中,没有\r\n符号,返回是一行有效字符

 

 

8.文本文件复制的第三种方式
  利用字符流缓冲区对象,按行读取,读一行,写一行,写换行,刷新

 

 

package cn.itcast.iostream;
/*
 * read方法,读取文本文件,传递字符数组
 * int read(char[] ch)
 */
import java.io.*;
public class FileReaderDemo1 {
	public static void main(String[] args) throws IOException{
		FileReader fr = new FileReader("c:\\read");
		//定义字符数组,长度1024的倍数
		char[] ch = new char[1024];
		//开始调用父类方法read(ch)返回一个int值
	    //循环调用read方法
		int len = 0 ;
		while((len = fr.read(ch))!=-1){
			//输出的时候,输出数组,输出存储的有效字符个数啊
			System.out.print(new String(ch,0,len));
		}
		
		fr.close();
	}
}
/*
 * int x = fr.read(ch);
		System.out.println("X="+x);//2
		System.out.println(new String(ch));//ab
		
		x = fr.read(ch);
		System.out.println("X="+x);//2
		System.out.println(new String(ch));//cd
		
		x = fr.read(ch);
		System.out.println("X="+x);//1
		System.out.println(new String(ch));//ed
		
		x = fr.read(ch);
		System.out.println("X="+x);//-1
		System.out.println(new String(ch));//ed
 * */


 

 

 

/*
  字符输出流写一个文件
*/
import java.io.*;
class FileWriterDemo 
{
	public static void main(String[] args) throws IOException
	{
		/*
		   抛出IOException
		   创建一个文件,如果文件已经存在覆盖掉原来的
		   IO流不具备创建文件的能力
		   调用Windows中的功能创建的,占用了操作系统的资源
		*/
		FileWriter fw = new FileWriter("write.txt");
		//调用父类的方法write写字符串
		fw.write("abc");
		//调用父类的方法,刷新flush()
		fw.flush();
		fw.write("写个中文试试看");
		fw.flush();
		//IO流,使用完毕后,必须关闭流对象,释放操作系统的资源
		fw.close();
		
	}
}


 

 

 

package cn.itcast.iostream;
/*
 * 复制文本文件:字符流对象完成,读一个字符,写一个字符
 * 实现步骤:
 *   1. FileReader建立对象,包装源文件 c:\a.html
 *   2. FileWriter建立对象,包装目的文件 d:\a.html
 *   3. read方法读取一个字符
 *   4. write方法写一个字符,刷新
 *   5. 关闭资源
 */
import java.io.*;
public class CopyText {
	public static void main(String[] args) {
		//建立两个流对象
		FileReader fr = null;
		FileWriter fw = null;
		try{
			fw = new FileWriter("d:\\w.log");//数据目的
			fr = new FileReader("c:\\w.log");//数据源
			//开始循环读取源文件,读一个字符写一个字符
			int len = 0 ;
			while((len = fr.read())!=-1){
				fw.write(len);
				fw.flush();
			}
		}catch(IOException e){
			//输出异常信息
			e.printStackTrace();
			throw new RuntimeException("复制失败");
		}finally{
			try{
				if(fr!=null)
					fr.close();
			}catch(IOException e){
				throw new RuntimeException("读取源关闭失败");
			}finally{
				try{
					if(fw!=null)
						fw.close();
				}catch(IOException e){
					throw new RuntimeException("文件写入关闭失败");
				}
			}
		}
	}
}




 

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值