`

java.io常见流

阅读更多

今天学习了下java的IO流,这里做个总结,方便查找。

 

InputStream/OutputSrteam

InputStream是个抽象类,表示字节输入流的所有类的超类。常见的有向文件写入数据。

OutputStream是个抽象类,表示字节输出流的所有类的超类。常见的有从文件写出数据。

继承关系:




  





 

举例:采用FileInputStream/FileOutputStream读写文件。

 

package yingjun.io;

import java.io.*;
//读取文件
public class TestFileInputStream {
  public static void main(String[] args) {
    FileInputStream in = null;//定义一个输入字节流
    try {
      in = new FileInputStream("D:/test/newfilename.txt");
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件"); 
      System.exit(-1);
    }
    
    try {
      long num = 0;
      int b = 0;
      while((b=in.read())!=-1){ //不等于-1就说明没有读到结尾
        System.out.print((char)b); //输出字节
        num++;
      }
      in.close();  
      System.out.println();
      System.out.println("共读取 "+num+" 字节");
    } catch (IOException e1) {
      System.out.println("文件读取错误"); System.exit(-1);
    }
  }
}

 
 

package yingjun.io;

import java.io.*;
//读出文件并写入另一个文件
public class TestFileOutputStream {
  public static void main(String[] args) {
	  int b = 0;
	  FileInputStream in = null;//用于读文件
	  FileOutputStream out = null;//用于向文件写数据
	  try {
	    in = new FileInputStream("D:/test/oldfile.txt");//就像在oldfile这个文件里插入一个管道用于读取里面的内容。
	    out = new FileOutputStream("D:/test/newfile.txt");//就像在newfile这个文件里插入一个管道用于向里面写人内容
	    while((b=in.read())!=-1){
	      out.write(b);
	    }
	    in.close(); 
	    out.close();
	  } catch (FileNotFoundException e2) {
	    System.out.println("找不到指定文件"); System.exit(-1);
	  } catch (IOException e1) {
	    System.out.println("文件复制错误"); System.exit(-1);
	  }
	  System.out.println("文件已经复制");
  }
}

##################################################################

Reader/Writer

 

Reader用于读取字符的抽象类子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

 Writer写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

 

 

 举例:采用FileReader/FileWriter读写文件。

package yingjun.io;

import java.io.*;
//读取文件
public class TestFileReader {
  public static void main(String[] args) {
    FileReader fr = null; 
    int c = 0;
    try {
      fr = new FileReader("D:/test/newfilename.txt");
      while ((c = fr.read()) != -1) {
        System.out.print((char)c);
      }
      fr.close();
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件");
    } catch (IOException e) {
      System.out.println("出错");
    }

  }
}

 

package yingjun.io;

import java.io.*;
//写入文件
public class TestFileWriter {
  public static void main(String[] args) {
    FileWriter fw = null;
    try {
      fw = new FileWriter("D:/test/newfilename.txt");
      for(int c=0;c<=50000;c++){
        fw.write(c);//c表示的是unicode编码,50000基本涵盖了所有国家的文字。
      }
      fw.close();
    } catch (IOException e1) {
    	e1.printStackTrace();
      System.out.println("出错");
      System.exit(-1);
    }
  }
}

  ######################################################################## 

                                                                      常见处理流

 ########################################################################



 

1:缓冲流

 

package yingjun.io;

import java.io.*;
public class TestBufferStream2 {
  //向一个文件里写入数据并且从中读取出
  public static void main(String[] args) {
    try {
      BufferedWriter bw = new BufferedWriter(new FileWriter("D:/test/DateTest.java,true"));//true表示不会删除文件之前所有的内容
      BufferedReader br = new BufferedReader( new FileReader("D:/test/DateTest.java"));
      String s = null;
      for(int i=1;i<=10;i++){
        s = String.valueOf(Math.random()); 
        bw.write(s);
        bw.newLine();
      }
      bw.flush();
      while((s=br.readLine())!=null){  //BufferReader有缓存区的功能,可以读一行
        System.out.println(s);
      }
      bw.close(); 
      br.close();
    } catch (IOException e) {
    	e.printStackTrace();
    }
  }
}

 2:转换流

 

 

package yingjun.io;

import java.io.*;
public class TestTransForm2 {
  public static void main(String args[]) {
    InputStreamReader isr = new InputStreamReader(System.in);//System.in代表键盘输入流
    BufferedReader br = new BufferedReader(isr);//在外面再套接一层
    String s = null;
    try {
      s = br.readLine(); //等待键盘输入直到输入一行
      while(s!=null){
        if(s.equalsIgnoreCase("exit")) break; 
        System.out.println(s.toUpperCase());
        s = br.readLine(); 
      }
      br.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
} 

 3:数据流

 

 

package yingjun.io;

import java.io.*;
public class TestDataStream {
  public static void main(String[] args) {
    ByteArrayOutputStream baos =  new ByteArrayOutputStream(); //定义字节数组流
    DataOutputStream dos = new DataOutputStream(baos);//套接数据类型流
    try {
      dos.writeDouble(Math.random());//写入double类型数据
      dos.writeBoolean(true);
      ByteArrayInputStream bais =  new ByteArrayInputStream(baos.toByteArray());
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());//读取double类型数据
      System.out.println(dis.readBoolean());
      dos.close(); 
      dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

  4:打印流

 

 

package yingjun.io;

import java.io.*;
public class TestPrintStream1 { 
  public static void main(String[] args) {
    PrintStream ps = null;
    try {
      FileOutputStream fos =  new FileOutputStream("D:/test/DateTest.java");
      ps = new PrintStream(fos);
    } catch (IOException e) {
      e.printStackTrace();
    }
    if(ps != null){
      System.setOut(ps);//设定System.out输出到ps(原来是在dos)
    }
    for(char c = 0; c <= 60000; c++){
      System.out.print(c+ " ");//print具有自动的flush功能,所有数据将被写入文件
    }
  }
}

 

package yingjun.io;

import java.text.SimpleDateFormat;
import java.util.*; 
import java.io.*;
//类似log功能
public class TestPrintStream3 {
  public static void main(String[] args) {
    String s = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try {
      FileWriter fw = new FileWriter ("D:/test/log.java", true);//log 
      PrintWriter log = new PrintWriter(fw);
      while ((s = br.readLine())!=null) {
        if(s.equalsIgnoreCase("exit")) break;
        System.out.println(s.toUpperCase());
        log.println("-----");
        log.println(s.toUpperCase()); 
        //log.flush();
      }
      log.println("==="+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date())+"==="); 
      log.flush();
      log.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 5:对象流

 

package yingjun.io;

import java.io.*;

public class TestObjectIO {
	public static void main(String args[]) throws Exception {
		T t = new T();
		t.k = 111;
		FileOutputStream fos = new FileOutputStream("D:/test/DateTest.java");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		oos.writeObject(t);
		oos.flush();
		oos.close();
		FileInputStream fis = new FileInputStream("D:/test/DateTest.java");
		ObjectInputStream ois = new ObjectInputStream(fis);
		T tReaded = (T)ois.readObject();
		System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
	}
}

class T implements Serializable //可以被序列化的(可以把对象写到文件或者网络上传输)
{
	int i = 10;
	int j = 9;
	double d = 2.3;
	transient int k = 15; //transient修饰的成员变量在序列化的时候不考虑
}

 

 

5
5
分享到:
评论
3 楼 wosyingjun 2013-06-13  
rainsilence 写道
虽说整理出来时值得推崇的,但是这个写法。。。最起码流有开就要有关吧。而且应该全部放finally里。

套接流只需要把最外面的那层关了就行。。。
2 楼 annimal 2013-06-13  
学习一下!
1 楼 rainsilence 2013-06-12  
虽说整理出来时值得推崇的,但是这个写法。。。最起码流有开就要有关吧。而且应该全部放finally里。

相关推荐

    JAVA_IO详解_包括讲解IO中各种流及其用法.pdf

    java IO流总结文档。总要总结了 java IO 流的主要基本操作和使用到的类及方法。对于入门比较有用,如果对 IO 流比较了解,就没必要看了。

    Java-IO流/Stream流总结

    Java-IO流/Stream流总结,内容一针见血,没有废话,言简意赅 ...适用场景:Java中的流是随处可见的,涉及文件的操作必须使用IO流,Stream流可以对一些集合进行简便的操作,代码十分优雅,开发中非常常见。

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    该代码源码资源是一个用于讲解Java IO流的示例代码库。它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、...

    Java基础知识点总结.docx

    十六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File类 102 Java.util.Properties 103 介绍IO包中扩展功能的流对象 103 十七、 网络编程 110 网络基础之网络协议篇 111...

    javaio流电子书整理面试必考io流帮助你入职阿里腾讯

    io流常见的面试必考点和基础

    Java输入输出流

    大多数应用程序都需要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络,IO 就是指应用程序对这些设备的数据输入与输出,在程序中,键盘被当作输入文件,显示器被当作输出文件使用。Java 语言定义了许多类...

    JAVA基础,常见java基础问题.rar

    3.IO流分为几种 按功能来分:输入流和输出流 按类型来分:字节流和字符流 字节流是按8位以字节为单位传输,字符流是按16位以字符为单位传输 4.序列化与反序列化 什么是序列化和反序列化? 序列化是指通过...

    Java 基础核心总结 +经典算法大全.rar

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

    Java常见面试题208道.docx

    15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和 Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21....

    java包与接口实验报告

    输入输出包(java.io):用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入。 3)网络包(java.net):支持Internet的TCP/IP协议,用于实现Socket编程;提供了与Internet的接口,支持URL连接,WWW的即时访问...

    java 面试常见问题整理

    泛型 Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符? 常用的通配符有哪些? 你的项目中哪里用到了泛型? 反射 何为反射?...Java 中 IO 流分为几种? 既然有了字节流,为什么还要有字符流?

    Java基础最全笔记文档

    Java基础笔记分为 Java基础篇 和 Java加强篇 ...9. File、方法递归、字符集、IO流(一) 10. IO流(二) 11. 多线程 12. 网络编程 13. 单元测试、反射、注解、动态代理 14. XML、解析、工厂模式和装饰模式

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    与此对应的,则是从IO流中恢复一个Java对象。 Java提供这种保存对象状态的机制,就是序列化。 对象序列化是Java编程中的必备武器 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第4页。 5.2.2 ...

    一文搞定Java的输入输出流等常见流

    文章目录1.IO流分析2.常用的IO流3.FileInputStream4.FileOutputStream5.通过Stream类实现文件复制6.FileReader7.FileWriter8.BufferedReader缓冲流9.DataInputStream和DataOutputStream数据流10.标准输出流...

    Java 基础面试题

    10. Io有哪些流,字节流和字符流的区别 11. String常用api 12. 自动拆装箱发生 13. Collections提供的工具方法 14. String、StringBuffer和StringBuilder区别 15. Map的键和值可以为null吗,为什么 16. 集合...

    java面试常见问题(超详细).pdf

    一、java常见问题 JDK和JRE的区别是什么? Java中的String类是可变的还是不可变的...Java中什么是IO流?它有什么作用? Java中什么是NIO?它有什么作用? Java中什么是Lambda表达式?它有什么作用? Java中什么是Strea

    常见的Java面试题与答案解析.docx

    建立一个包含常见Java面试题的题库,题目涵盖Java基础、多线程、集合框架、IO流、反射等方面,题目数量不少于200道。 ## 2. 面试题随机生成 编写程序,从题库中随机生成一定数量的面试题,以便用户练习。 ## 3. ...

    Java工程师必备面试题【多线程、反射、类加载器、JVM、泛型、异常处理、注解、面向对象编程、集合、IO流、序列化】

    内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics