`
bingzhen66
  • 浏览: 37030 次
文章分类
社区版块
存档分类
最新评论

46.黑马程序员-IO流

 
阅读更多

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

1、概述
  • IO流用来处理设备之间的数据传输。
  • java对数据的操作是通过流的方式,用于操作流的对象都在IO包中。
  • 流按操作数据分为:字符流、字节流。早期都是字节流,数据的最终形式是字节。
  • 文本的频繁使用出现了字符流。编码映射表使字节转为字符,字符流在内部融合了编码表
  • 流按流向分为:输入流、输出流。日常操作电脑是读写。
2、常用基类
  • 字节流的抽象基类:InputStream,OutputStream。
  • 字符流的抽象基类:Reader,Writer。
  • 字节流和字符流的子类结尾都是父类名,如FileInputStream,FileReader。
3、字符流
  • Reader,Writer
    • 构造方法修饰符是protected,只能子类使用、访问。
    • 抽象类,含有部分抽象方法。
  • 操作文件的子类FileWriter
    • FileWriter所有构造函数,必须有要操作的文件参数,如果存在则覆盖。
    • 使用会抛出异常:IOException。
  • 示例代码
    • import java.io.*;
      class  FileWriterDemo2
      {
      	public static void main(String[] args) 
      	{
      
      		FileWriter fw = null;//单独拿出来是因为流的建立和关闭不在一个代码块中。
      
      		
      		try
      		{
      			fw =new FileWriter("c:\\demo.txt");
      			fw.write("第一次写入");
      			
      		}
      		catch (IOException e)
      		{
      			System.out.println(e.toString());
      		}
      		finally
      		{
      			try
      			{
      				if (fw != null)//这里判断流对象是否指向空,原因是初始化未完成。不判断会造成空指针异常。
      				{
      					//close要放在finally中,并且也要try。多个流需要分别关。
      					fw.close();
      				}
      				
      			}
      			catch (IOException e)
      			{
      				System.out.println(e.toString());
      			}
      			
      		}
      
      		
      	}
      }
      

  • 数据的续写
    • 再建立FileWriter对象时,传递参数 FileWriter("[路径]+文件名",true),true参数代表不覆盖已有文件并在文件末尾处数据续写,如不存在才创建。
    • windows中回车符由 \r\n组成,只有\r或者\n,windows无法识别。显示为小黑方格。
  • 数据的读取read(char[]cbuf)(常用)
    • int read(char[]cbuf)
      将字符读入数组。

    • int read(char[]cbuf)返回读取到的元素个数。
    • 这个方法通过移动指针读取元素,每次使用这个方法指针都偏移到下一位元素。读取的最大数取决于数组长度,连续调用这个方法可以读取完所有元素。但是有个缺陷,最后一次读取如果元素只覆盖前面少数元素,后面元素还是原来的。例如abcdefg一次读3个,第一次abc,第二次def,第三次gef。
    • 解决上面的问题可以使用String(char[]value, intoffset, intcount)方法,通过返回值,读取返回的元素个数。如果返回值是-1,读取结束。
    • /*
      练习:读取一个.java文件,并打印在控制台上。
      */
      import java.io.*;
      class  FileReaderTest
      {
      	public static void main(String[] args) throws IOException
      	{
      		FileReader fr = new FileReader("c:\\Demo.txt");
      
      		char[] buf = new char[1024];
      
      		int num = 0;
      		while ((num=fr.read(buf))!=-1)
      		{
      			//注意这里不要用println,它会导致打印完缓冲区内容后换行。
      			System.out.print(new String(buf,0,num));
      		}
      		
      	}
      }

  • 复制粘贴一个文件 ,例子C盘复制到D盘
    • 方法一:
    • /*
      练习:复制文件,将C盘文件复制到D盘。
      原理:
      其实就是将C盘下的文件数据存储到D盘的一个文件中。
      步骤:
      1,在D盘创建一个文件,用于存储C盘文件的数据。
      2,定义读取流和C盘文件关联。
      3,通过不断的读取完成数据存储。
      4,关闭资源。
      */
      import java.io.*; 
      class CopyText
      {
      	public static void main(String[] args) throws IOException
      	{
      		copy_2();
      	}
      
      	public static void copy_2()
      	{
      		FileWriter fw = null;
      		FileReader fr = null;
      		try
      		{
      			fw = new FileWriter("D:\\Demo_copy.txt");//目的
      			fr = new FileReader("c:\\Demo.txt");//源
      			char[] buf = new char[1024];
      			
      			int len = 0;
      			while ((len = fr.read(buf)!=-1))
      			{
      				fw.write(buf,0,len);
      			}
      		}
      		catch (IOException e)
      		{
      			throw new RuntimeException("读写失败");//读写失败就抛异常。
      		}
      		finally
      		{
      			if(fr!=null)//判断流是否为空,防止建流的时候抛了异常。
      				try
      				{
      					fr.close();
      				}
      				catch (IOException e)
      				{
      				}
      			if(fw!=null)//判断流是否为空,防止建流的时候抛了异常。
      				try
      				{
      					fw.close();
      				}
      				catch (IOException e)
      				{
      				}
      		}
      	}
      
      	public static void cop_1() throws IOException
      	{
      		//创建目的.
      		FileWriter fw = new FileWriter("D:\\Demo_copy.txt");
      
      		//创建源与已有文件关联。
      		FileReader fr = new FileReader("c:\\Demo.txt");
      
      		int ch = 0;
      		while ((ch = fr.read())!=-1)
      		{
      			fw.write(ch);//在fr里读一个字符,就写到fw里一个。
      		}
      		fw.close();
      		fr.close();
      		
      	}
      //		System.out.println("Hello World!");
      }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics