Java输入输出系统

http://www.javaresearch.org/article/187357.htm


一   java.io包中定义了多个流类型(类或抽象类)来实现输入输出功能.
可以从不同的角度对其分类:
按数据流的方向不同可以分为输入流和输出流(如用于向程序中输入数据,则为输入流)
按处理数据单位不同可以分为字节流和字符流
按功能不同可以分为节点流和处理流(节点流可以从一个特定的数据源(节点)读写数据(如:文件,内存);
处理流是"连接"在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能)

                      字节流               字符流
输入流        InputStream        Reader
输出流        OutputStream    Writer

访问文件:
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:/share/java/HelloWorld.java");
        out = new FileOutputStream("d:/share/java/io/HW.java");
        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("文件已复制");
  }
}

二 缓冲流
缓冲流是"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
JDK提供了四种缓存流(BufferedReader,BufferedWriter,BufferedInputStream,BufferedOutputStream)
参考实例如下:
import java.io.*;
public class TestBufferStream {
  public static void main(String[] args) {
    try {
      BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));
      BufferedReader br = new BufferedReader(new FileReader("d:\\share\\java\\dat2.txt"));
      String s = null;
      for(int i=1;i<=100;i++){
        s = String.valueOf(Math.random());
        bw.write(s);
        bw.newLine();
      }
      bw.flush();
      while((s=br.readLine())!=null){
        System.out.println(s);
      }
      bw.close();
      br.close();
    } catch (IOException e) { e.printStackTrace();}
  }
}

三 转换流
InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换.
InputStreamRead需要和InputStream"套接",OutputStreamWriter需要和OutputStream"套接"
转换流在构造时可以指定其编码集合,例如:
InputStreamrReader isr = new InputStreamReader(System.in, "ISO8859_1");
参考实例如下:
import java.io.*;
public class TestTransForm {
  public static void main(String[] args) {
    try {
      OutputStreamWriter osw = new OutputStreamWriter(
           new FileOutputStream("d:\\bak\\char.txt"));
      osw.write("mircosoftibmsunapplehp");
      System.out.println(osw.getEncoding());
      osw.close();
      osw = new OutputStreamWriter( new FileOutputStream("d:\\bak\\char.txt", true),"ISO8859_1"); // latin-1
      osw.write("mircosoftibmsunapplehp");
      System.out.println(osw.getEncoding());
      osw.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

四 数据流
DataInputStream和DataOutputStream分别继续InputStream和OutputStream,它属于处理流,
需要分别"套接"在InputStream和OutputStream类型的节点流上.构造方法为:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
参考实例如下:
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());
      dos.writeBoolean(true);
      ByteArrayInputStream bais =
          new ByteArrayInputStream(baos.toByteArray());
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      dos.close();  dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

五 Print流
PrintWriter和PrintStream都属于输出流,分别针对字符和字节.
参考实例如下:
import java.util.*;
import java.io.*;
public class TestPrintStream {
  public static void main(String[] args) {
    String s = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try {
      FileWriter fw = new FileWriter("d:\\bak\\logfile.log", true); //Log4J
      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 Date()+"===");
      log.flush();
      log.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

你可能感兴趣的:(java,jdk,log4j,dos)