IO篇

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

io概述

 

 

字符流

用来处理字符的基类

 

FileWriter

字符文件输入流。

 

文件的创建写入刷新关闭:

FileWriter fw = new FileWriter("demo.txt");		
		fw.write("abcde");		
		fw.flush();
		fw.close();

文件创建后如果有同名文件会覆盖,关闭流之前自动刷新一次。

 

io异常的处理

 io操作都必须进行io异常的处理

io异常处理示范:

		FileWriter fw = null;//在此初始化fw变量,作用于整个函数。
		try
		{
			fw = new FileWriter("C:\\demo.txt");//设置路径c盘下
			fw.write("abcdefg");

		}
		catch (IOException e)
		{
			System.out.println("catch:"+e.toString());
		}
		finally
		{
			try
			{
				if(fw!=null)//初始化成功才执行,增加程序健壮性。
					fw.close();//关闭流也是io操作,也要进行io异常处理				
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
			
		}		


 

 

 

文件续写:

		//传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
		FileWriter fw = new FileWriter("demo.txt",true);
		fw.write("nihao\r\nxiexie");
		fw.close();

换行:windows:\r\n

            linux:\n


FileReader 

字符文件读取流

 

FileReader fr = new FileReader("demo.txt");

调用读取流对象的read方法。

int read():返回字符的ASC码表值,如果已到达流的末尾,则返回 -1一次读一个字符。连续调用会返回字符文件的下一个字符。

 

int read(char[] buf):传入参数,作为缓冲区的目标数组。返回读取的字符数。

 

字符文件读取的两种方式:

		while(true)
		{
			int ch = fr.read();
			if(ch==-1)
				break;
			System.out.println("ch="+(char)ch);
		}

		char[] buf = new  char[1024];

		int num = 0;

		while((num=fr.read(buf))!=-1)
		{
			System.out.print(new String(buf,0,num));
		}


 

 

字符流的缓冲区

缓冲区目的:为了提高数据读写的效率

 

使用缓冲区存入字符换行刷新:

		FileWriter fw = new FileWriter("buf.txt");
		BufferedWriter bufw = new BufferedWriter(fw);
		bufw.write("abcd"+x);
		bufw.newLine();
		bufw.flush();
		bufw.close();

 

使用缓冲区整行读取字符:

		FileReader fr = new FileReader("buf.txt");
		BufferedReader bufr = new BufferedReader(fr);
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			System.out.print(line);
		}
		bufr.close();


 

装饰设计模式:


当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。

装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。

 

字节流

FileInputStream 

用于读取诸如图像数据之类的原始字节流。

FileOutputStream

 用于写入诸如图像数据之类的原始字节的流。

 字节流写入的特有方法;

		FileInputStream fis = new FileInputStream("fos.txt");
		byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。不用在循环了。
		fis.read(buf);
		System.out.println(new String(buf));
		fis.close();
以上方法要慎用,容易内存溢出。

字节流的缓冲区

 

BufferedInputStream

实现缓冲的输入流

 

BufferedOutputStream

该类实现缓冲的输出流


这里要掌握使用缓冲区对字节文件的复制。

 使用缓冲区拷贝图片:

		BufferedInputStream fin=new BufferedInputStream(new FileInputStream("c:\\shiqi.JPG"));
		BufferedOutputStream fou=new BufferedOutputStream (new FileOutputStream("c:\\shiqi2.JPG"));
		int a=0;
		while((a=fin.read())!=-1)
		{
			fou.write(a);
		}
		fin.close();
		fou.close();


键盘录入

键盘录入:
		InputStream in=System.in;
		StringBuilder sb=new StringBuilder();
		while(true)
		{
			int ch=in.read();
			if(ch=='\r')
				continue;
			if(ch=='\n')
			{
				if("over".equals(sb.toString()))
					break;
				sop(sb.toString().toUpperCase());
				sb.delete(0, sb.length());
			}
			sb.append((char)ch);
			
		}

转换流:

上述代码while循环语句块中的代码类似于BufferedReader的readLine()方法,要使用这个方法,可以把字节流转换成字符流。

		InputStream in=System.in;
		InputStreamReader r=new InputStreamReader(in);
		BufferedReader br=new BufferedReader(r);
		String s=null;
		while((s=br.readLine())!=null)
		{
			if("over".equals(s))
				break;
			sop(s);
		}
		br.close();


io流的操作规律:

通过以上的学习,发现io流的操作是有规律的。
1,有源和目的,如键盘输入——控制台输出,键盘输入——存入文本,读取文件——存入文件(拷贝)。
2,要判定文件的性质:是字节流还是字符流。
3,要清楚所操作的设备,硬盘——硬盘,硬盘——控制台,键盘——控制台,键盘——硬盘。
4,是否要提高效率,是否使用缓冲区。

File类

此类是一个将文件和文件夹封装成对象的类,方便于对文件和文件夹的操作。
File类常见方法:

1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():
isDirectory();
isHidden();
isAbsolute();
4,获取信息。
getName():
getPath():
getParent():
getAbsolutePath() 
long lastModified() 
long length() 

 


 

 

 

 

 

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

详情请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值