java基础巩固之IO(一)

   其实本来该学网络编程的,但是感觉好像网络编程也算是IO的一种扩展,只不过是本地计算机内部的IO扩展到更大范围内的IO操作,而IO操作前段时间大致的学习了一下,但是不算系统,只是在博客上大致的学习了主要梗概。今天再来继续深入一点的学习一下,希望更加深的了解IO,更好的为网络编程打基础。

   关于IO这几篇说的主要部分有以下几点:

  •     File类的使用
  •     IO原理和流的分类
  •     文件流(FileInputStream/FileOutputStream和FileReader/FileWriter)
  •     缓冲流(BufferedInputStream/BufferedOutputStream和Buffered/BufferedWriter)

   这一篇先来个大致的了解。主要有File类,流的基本划分,和FileInputStream和FileOutputStream等内容。

   File类:

   这里就说明两点:第一:File可以是文件,也可以是目录。
                                  第二:创建File可以用绝对路径,也可以相对路径。

    例如:

<span style="font-size:14px;">      File f1=new File("D:\\Work\\workspace\\testtemp\\hello.txt");
      File f2=new File("kitty.txt");</span>
 对于File的操作,大致就是创建和删除,重命名等操作,都不涉及到内容,大致的方法如下图:

 

流的划分:

   根据方向:输入流和输出流

  根据单位:字节流和字符流(专门处理文本文件)

  根据角色:节点流(直接作用于文件)和处理流

FileInputStream和FileOutputStream:

   这里包括的步骤是:

  1.   创建File对象
  2.   创建FileInputStream(FileOutputStream)对象
  3.   进行写(读)操作
  4.   关闭流
   这里用一个实现文件拷贝的函数来说明:

<span style="font-size:14px;">     public void CopyFile(String src,String dest)
	{
               //该函数是字节流的处理方式,所以可以是任何格式的文件。
		File f1=new File(src);
		File f2=new File(dest);
		FileInputStream fis=null;
		FileOutputStream fos=null;
		
		try {
			fis=new FileInputStream(f1);//输入流
			fos=new FileOutputStream(f2);//输出流
			byte[] b=new byte[1000];//根据文件大小适当调节
			int len;//判断读取是否结束-1时表示读取结束
			while((len=fis.read(b))!=-1)
			{
				fos.write(b, 0, len);//这里一定注意不是fos.write(b)或者fos.write(b,0,b.length).
			}
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		finally
		{        //一定记得关闭流操作
			if(fos!=null)
			{
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fis!=null)
			{
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}</span>
这里主要提到的一点是   while((len=fis.read(b))!=-1)fos.write(b, 0, len);这里最后一个参数,一定是len,不能缺省的fos.write(b),也不可是b.length。

FileReader和FileWriter:

   这里跟FileOutputStream和FileInputStream基本上就是单位的差别,这个只能处理字符的文件,不能处理其他类型的文件,这里也是一个文件拷贝的函数来比较:

   

<span style="font-size:14px;">public void CopyFileString(String src,String desc)
	{
		File f1=new File(src);
		File f2=new File(desc);
		FileReader fr=null;
		FileWriter fw=null;
		try {
			fr=new FileReader(f1);
			fw=new FileWriter(f2);
			char[] c=new char[20];
			int len;
			while((len=fr.read(c))!=-1)
			{
				fw.write(c, 0, len);
			}
		}  catch (IOException e) {
			e.printStackTrace();
		}
		finally
		{
			if(fw!=null)
			{
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fr!=null)
			{
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值