IO流分类

按照数据流方向不同,分为 输入流,输出流

按照处理单位的不同,分为 字节流,字符流

按照功能的不同,可以分为 节点流,处理流

常用处理流:

缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter

转换流:字节流转换为字符流 InputStreamReader,OutputStreamWriter

数据流:DataInputStream,DataOutputStream 可以直接写入java中的数据类型writeInt(0 writeLong等等

Print流:PrintWriter(字符流) PrintStream(字节流) 不抛异常,自动flush();

print流常用代码:

 /**
  * 通过printstream写入到本地文件
  */

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintIO {
 public static void main(String[] args) {
  PrintStream ps = null;
  try {
   FileOutputStream fos = new FileOutputStream("C:\\a.txt");
   ps = new PrintStream(fos);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.setOut(ps);
  System.out.println("dddddd");
 }
}

 /**
  * 通过命令行传一个文件路径,打印出文件的内容
  */

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class PrintIO {
 public static void main(String[] args) {
  String filePath = args[0];
  list(filePath, System.out);
 }
 private static void list(String filePath, PrintStream out) {
  try {
   BufferedReader br = new BufferedReader(new FileReader(filePath));
   String s = null;
   while ((s = br.readLine()) != null) {
    out.println(s);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }}}

 /**
  * 一个简单接受键盘输入的的日志类
  */

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Date;

public class PrintIO {
  public static void main(String[] args) {
  // 定义一个缓冲流从键盘接受信息(标准输入流,字符流),通过转换流转换成字节流
  String s = null;
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  // 定义一个输出流,把输入的信息写入到文件
  try {
   FileWriter fw = new FileWriter("c:\\log.txt");
   // 定义一个PrintWriter工具流来帮忙
   PrintWriter log = new PrintWriter(fw);
   // 使用一个while循环,来多次输入信息,输入exit则输入结束
   while ((s = br.readLine()) != null) {
    if (s.equalsIgnoreCase("exit")) {
     break;
    }
    log.println("----------------------------------------");
    System.out.println(s.toUpperCase());
    log.println(s.toUpperCase());
    log.flush();
   }
   log.println("====" + new Date() + " ====");
   log.flush();
   log.close();
   System.out.println("输入结束");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }}}

Object流:直接将Object写入或者读出 既序列化

transient关键字

serializable接口

extenalizable接口:手动控制序列化,是serializable的子接口,其中有readExtenal方法和writeExternal方法要实现

 

示例:

 

/**
 * 一个简单的java object流示例
 */
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

 

public class PrintIO {
 public static void main(String[] args) {
  T t=new T();
  //定义一个基本的输出流
  try {
   //对象写入硬盘
   FileOutputStream fos=new FileOutputStream("c:\\saveObject");
   //创建一个基于fos的对象输出流
   ObjectOutputStream oos=new ObjectOutputStream(fos);
   oos.writeObject(t);
   //对象从硬盘读取
   FileInputStream fis=new FileInputStream("c:\\saveObject");
   //创建一个基于fis的对象输入流
   ObjectInputStream ois=new ObjectInputStream(fis);
   T t2=(T)ois.readObject();
   System.out.println(t2);
  } catch (Exception e) {
   e.printStackTrace();
  } }}
class T implements Serializable{
 int a=1;
 int b=2;
 transient int c=3;
 @Override
 public String toString(){
  return "a="+a+"\tb="+b+"\tc="+c;
 }}

 

posted on 2012-08-15 18:25  Death_Fat  阅读(182)  评论(0)    收藏  举报