黑马程序员-Java中IO流知识点总结

来源:互联网 发布:js事件有哪些 编辑:程序博客网 时间:2024/05/21 13:57
一、流的分类
 1、按功能分
 读取流:InputStream Reader
 写出流:OutPutStream Writer
 2、按流的类型分类
        字节流:InputStream OutputStream
        字符流:Reader    Writer

 二、流功能分析
 读取流是从输入设备或数据对象中读取数据到程序,用程序进行处理读入的数据,写出流是把程序处理的数据输出到输出设备上比如硬盘和控制台。字节流读取和写入的数据单位是字节,可以读取和写入任何类型的数据。字符流读取跟写入的数据单位是字符,只能读取和写入文本类型的数据。当需要读取或写入文本型的数据时要用字符流,因为它会比字节流读写字符更方便和高效,相反当数据不是文本型时只能用字节流来读取跟写入。

 三、流中读写方法的示例。(当用到IO流时就有可能出现IO异常,所以需要处理可能的异常)
 字节流:
 FileOutputStream fos = new FileOutputStream("D://xxx.xxx");
 fos.write("dsfdsf".getBytes());//写入字节数组
 fos.close();          //用完后需要关闭流,释放资源。字节流不需要Flush
 FileInputStream fis = new FileInputStream("D://xxx.xxx");
 fis.read();      //读取一个字节
 fis.close();
 字符流:
 FileWriter fw = new FileWriter("D:\\xxx.txt");
 fw.write("sdfsdfsdf");//可以直接写入字符串
 fw.flush();        //写完后需要Flush,才能真正写道输出设备
 fw.close();         //close()时也会Flush。
 FileReader fr = new FileReader("D:\\xxx.txt");
 fr.read(char[] ch);//可以读取一个字符数组的内容
 fr.close();

 四、转换流
 当需要流之间的转换时会用到转换流。
 1、把字节读取流转换成字符读取流
   InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.xxx"));
 2、把字符输出流转化成字节输出流
 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("xx.xxx"));

 五、缓冲流
 需要提高流的读写效率时会用到缓冲流
 1、字节缓冲流
 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("xx"));
 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("xx"));
 2、字符缓冲流
 BufferedReader br = new BufferedReader(new FileReader("xx.txt"));
 BufferedWriter bw = new BufferedWriter(new FileWriter("xx.txt"));
 
 缓冲流对读写功能进行了增强,而且使用缓冲技术提高了读写效率,所以当需要提高程序的读写效率时要使用缓流。

 六、File类的使用
 1、创建
 boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
 和输出流不一样,输出流对象已建立创建文件。而且文件已经存在,会覆盖。
 boolean mkdir()创建文件夹
 boolean mkdirs() 创建多级文件夹
 2、删除。
 boolean delete();删除失败时返回false。如果文件正在被使用,则删除不了返回false。
 void deleteOnExit();在程序退出时删除指定文件。
 3、判断
 boolean exists();文件是否存在。
 isFile():是不是文件
 isDirectory();是不是文件夹
 isHidden();是不是隐藏文件
 isAbsolute();是不是绝对路径
 4、获取信息
 getName();文件名
 getPath();文件路径
 getParent();上一层路径
 getAbsolutePath();绝对路径
 length()文件大小
七、打印流&序列流&ObjectOutputStream()
在整个 IO 包中,打印流是输出信息最方便的类,主要包含字节打印流(PrintStream) 和字符打印流(PrintWriter) . 打印流提供了非常方便的打印功能,可以打印任何的数据类型,例如:小数、整数、字符串等等。



使用打印流打印信息

import java.io.* ;  public class PrintDemo01{      public static void main(String arg[]) throws Exception{          PrintStream ps = null ;     //创建打印流         ps = new PrintStream(new FileOutputStream("D://123.txt")) ;          ps.print("aaaaaa");        ps.println("bbbbbbbb");        ps.print("3333333");         ps.close();    }  };  

序列流示例
Vector<FileInputStream> v = new Vector<FileInputStream>();v.add(new FileInputStream("1.txt"));v.add(new FileInputStream("2.txt"));v.add(new FileInputStream("3.txt"));//合并文件Enumeration<FileInputStream> en = v.elements();SequenceInputStream sis = new SequenceInputStream(en);FileOutputStream fos = new FileOutputStream("4.txt");byte[] buf = new byte[1024];int len = 0;while((len=sis.read(buf))!=-1){fos.write(buf,0,len);}fos.close();sis.close();


对象序列化ObjectOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Person("lisi",30));//person类须要序列化,继承Serializable接口oos.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));Person p = (Person)ois.readObject();System.out.println(p);ois.close();





0 0
原创粉丝点击