• OutputStream类(直接操作byte数组)

该类是字节输出流的抽象类,定义了输出流的各种操作方法。如下图是OutputStream的层次结构:

  • ByteArrayOutputStream:字节数组流,可以捕获内存缓冲区的数据,转换为字节数组。该类有两个构造方法:

new ByteArrayOutputStream();

new ByteArrayOutputStream(int size);    //size表示初始化字节数组缓冲区的大小

  1. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  2. bos.write('q');
  3. bos.write('a'); //将字节写入该字符数组
  4. bos.reset(); //重置该字节数组,即将如上写入的'q' 'a'字节清空
  5. byte[] b = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n'};
  6. bos.write(b, 1, 7); //从b数组的第一个下标连续写入长度为7个字符
  7. try {
  8. FileOutputStream fs = new FileOutputStream("SourceFile/employee");
  9. bos.writeTo(fs); //将字符数组写入文档
  10. fs.close();
  11. bos.flush();
  12. bos.close();
  13. } catch (FileNotFoundException e) {
  14. // TODO Auto-generated catch block
  15. e.printStackTrace();
  16. } catch (IOException e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  • FileOutputStream:以字节流的方式将二进制数据或者字符数据输出到文件中,该类有5个构造方法,我们在代码中介绍了2和4的用法:
  1. new FileOutputStream(File);
  2. new FileOutputStream(FileDescriptor);    //FileDescriptor.out将内容输出到控制台
  3. new FileOutputStream(String);              //String为文件路径
  4. new FileOutputStream(File, boolean);     //boolean为true时,则不覆盖文件,在文件的末尾添加内容,false则覆盖文件
  5. new FileOutputStream(String, boolean); //同上
  1. try {
  2. FileOutputStream fs1 = new FileOutputStream(FileDescriptor.out);
  3. FileOutputStream fs2 = new FileOutputStream(new File("SourceFile/employee"), true); //在该文件的末尾添加内容
  4. fs1.write("https://www.cnblogs.com/zhanglei93/".getBytes()); //write()方法可以写入byte数组、int
  5. fs1.close();
  6. fs2.write("https://www.cnblogs.com/zhanglei93/".getBytes());
  7. fs2.flush(); //清空缓存里的数据,并通知底层去进行实际的写操作
  8. fs2.close();
  9. } catch (FileNotFoundException e) {
  10. // TODO Auto-generated catch block
  11. e.printStackTrace();
  12. }
  13. catch (IOException e) {
  14. // TODO Auto-generated catch block
  15. e.printStackTrace();
  16. }
  • BufferedOutputStream是一个缓冲数据输出流接口,类中有一个byte数组,调用write()函数时,首先向这个数组中写入数据,然后当某些时刻(数组写满等)会将这些数组写入到流之中,该类有两个构造方法:

new BufferedOutputStream(OutputStream)

new BufferedOutputStream(OutputStream,int)   //int的值规定了byte数组的大小

  1. try {
  2. FileOutputStream fs = new FileOutputStream("SourceFile/employee");
  3. BufferedOutputStream bos = new BufferedOutputStream(fs);
  4. bos.write("https://www.cnblogs.com/zhanglei93/".getBytes()); //write()方法可以写入byte数组、int
  5. fs.close();
  6. bos.flush();
  7. bos.close();
  8. } catch (FileNotFoundException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. } catch (IOException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  • PrintStream可以方便的输出各种类型的数据,该类主要用于操作字节流,且该类的方法不抛出IOException。该类有8个构造方法:

new PrintStream(File);

new PrintStream(OutputStream);

new PrintStream(String);    //文件路径及名称

new PrintStream(File, String);   //String  编码格式

new PrintStream(OutputStream, boolean);   //是否自动刷新

new PrintStream(OutputStream, boolean, String);    //是否自动刷新、编码格式

new PrintStream(String, String);   //文件路径及名称、编码格式

关于该类的详细说明见:http://www.cnblogs.com/skywang12345/p/io_16.html

  • Writer类(首先进行decode、encode)

该类是字符输出流的抽象类,定义了输出流的各种操作方法。如下图是Writer的层次结构:

  • BufferedWriter通过创建缓冲数组,将写入内容先存入缓存,该类有2个构造函数:

new BufferedWriter(Writer)

new BufferedWriter(Writer, int)   //int大小为默认数组的大小

  1. try {
  2. BufferedWriter bw = new BufferedWriter(new FileWriter("SourceFile/employee"));
  3. bw.write("http://www.cnblogs.com/zhanglei93/".toCharArray()); //写入char数组
  4. bw.write("http://www.cnblogs.com/zhanglei93/"); //写入String,还可以写入int
  5. CharSequence csq = "http://www.cnblogs.com/zhanglei93/p/5846592.html";
  6. bw.append(csq, 0, 34);
  7. bw.close();
  8. } catch (IOException e1) {
  9. // TODO Auto-generated catch block
  10. e1.printStackTrace();
  11. }
  • CharArrayWriter创建char缓冲数组,也有两个构造函数:

new CharArrayWriter();

new CharArrayWriter(int);

  1. CharArrayWriter cw = new CharArrayWriter(5);
  2. for(Employee e : employees){
  3. try {
  4. cw.write(e.getName());
  5. cw.append(e.getSalary() + "");
  6. cw.write(e.getDate().toString() + "\r\n");
  7. FileWriter fw = new FileWriter("SourceFile/employee");
  8. cw.writeTo(fw);
  9. fw.close();
  10. cw.close();
  11. } catch (IOException e1) {
  12. // TODO Auto-generated catch block
  13. e1.printStackTrace();
  14. }
  15. }
  • FileWriter该类包含5个构造方法:

new FileWriter(File)

new FileWriter(FileDescriptor)

new FileWriter(String)

new FileWriter(File, boolean)

new FileWriter(String, boolean)

具体的使用方法见:http://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html

  • PrintWriter该类有8种构造方法:

具体见:http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html

  1. PrintWriter pw = null;
  2.  
  3. /**
  4. * PrintWriter(String fileName, String csn)
  5. * 创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。如不执行pw.close()则不刷新文件内容
  6. * @param name
  7. * @param code
  8. * @param employees
  9. */
  10. public void writeData(String name, String code, Employee[] employees){
  11. try {
  12. pw = new PrintWriter(name, code);
  13. writeToFile(pw, employees);
  14. pw.close();
  15. } catch (FileNotFoundException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. } catch (UnsupportedEncodingException e) {
  19. // TODO Auto-generated catch block
  20. e.printStackTrace();
  21. }
  22. }
  23.  
  24. /**
  25. * PrintWriter(Writer out, boolean autoFlush)
  26. * 创建新 PrintWriter, flag = true表示能自动刷新,即不执行pw.close()也会自动刷新内容到文件
  27. * @param write
  28. * @param flag
  29. * @param employees
  30. */
  31. public void writeData(Writer write, boolean flag, Employee[] employees){
  32. pw = new PrintWriter(write, flag);
  33. writeToFile(pw, employees);
  34. pw.close();
  35. }
  36.  
  37. private void writeToFile(PrintWriter pw, Employee[] employees){
  38. pw.println(employees.length);
  39. for(Employee e : employees)
  40. e.writeEmployee(pw);
  41. }

OutputStream 和 Writer的更多相关文章

  1. Java I/O流-总结(InputStream,OutputStream,Reader,Writer)

    Java流总结 一. 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流: ...

  2. Java IO--字节流与字符流OutputStream/InputStream/Writer/Reader

    流的概念 程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件. 字节流与字符流 内容操作就四个类:OutputStream.InputStream.Writer.Reader 字节流 ...

  3. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  4. java流1----InputStream、OutputStream、Reader、Writer

    字节流和字符流 顾名思义,字节流就是操作的是字节,字符流操作的就是字符.其中字节流又可以分为字节输入流(InputStream)和字节输出流(OutputStream).同样的字符流也可以分为字符输入 ...

  5. 013-java中的IO操作-InputStream/Reader、OutputStream/Writer

    一.概述 IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称 ...

  6. IO流05_OutputStream和Writer输出流

    [输出流中的字节流和字符流] [OutPutStream和Writer] [ OutputStream和Writer中包含的方法 ] void write(int c)       将指定的字节/字符 ...

  7. Java I/O---Reader & Writer(字符流)

    1.Reader & Writer 当我们初次看见Reader和Writer类时,可能会以为这是两个用来替代InputStream和OutputStreamt的类,但实际上并非如此. 尽管一些 ...

  8. java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别

      标签: outputstreamwriterreader字符file方法 2015-05-14 23:06 469人阅读 评论(0) 收藏 举报  分类: 孙鑫-java基础(16)  I-O(4 ...

  9. [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)

    一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...

随机推荐

  1. svn服务器搭建及使用(一)

    这里郑重感谢分享作者的辛苦:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html Subversion是优秀的版本控制工 ...

  2. 《Python》IO模型

    一.IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步:一件事情做完再做另一件事情 异步:同时做多件事情 阻塞:sleep.input.join.shutdown.get.acquire ...

  3. session和cokkie的区别与作用

    session在计算机中,尤其是在网络应用中,称为“会话机制”,Session对象存储特定用户会话所需的属性及配置信息,这样,当用户在应用程序的web页之间跳转时,存储在session对象中的变量将不 ...

  4. Android开发 ---Fragment片段布局

    前言 Fragment想必大家不陌生吧,在日常开发中,对于Fragment的使用也很频繁,现在主流的APP中,基本的架构也都是一个主页,然后每个Tab项用Fragment做布局,不同选项做切换,使用起 ...

  5. js实现网页全屏切换(平滑过渡),鼠标滚动切换

    实现效果为页面平滑过渡全屏切换,点击导航和鼠标滚动都可以切换. 效果图: html代码: <!DOCTYPE html> <html> <head lang=" ...

  6. normalization 阅读笔记

    https://zhuanlan.zhihu.com/p/33173246 阅读笔记 1. normalization whiting - PCA 2. Internal Covariate Shif ...

  7. libusb 终于搞好了

  8. 漫步Java------初识java

    一. Java语言概述 语言:是人与人之间用于沟通的一种方式. 例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语. 计算机语言(编程语言): 人与计算机交流的方式.如果人要与计算 ...

  9. 点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth

    变大: 方法一: 利用css属性. 鼠标放上 hover放大几倍. .kecheng_02_cell_content img { /*width: 100px; height: 133px;*/ wi ...

  10. File类操作中的IOException异常

     代码: File file= newFile("demo"+File.separator+"HelloWorld.txt"); file.createNe ...