在java中定義了多個流類:按照流的方向分為輸入流和輸出流;按照處理數據單位的不同分為字節流和字符流;按照處理的功能不同分為節點流和處理流。java中的流很多,但是常用的不多。最常用的java流有FileInputStream、FileOutputStream、FileReader、FileWriter。從input和output我們可以知道這四個流中誰是輸入流誰是輸出流,以Stream為后綴的為節點流,以Reader為后綴的為處理流。所謂處理流就是指在節點流或處理流上在套接一個流,節點流就好比是一個水管,處理流是比套在節點流這個水管上的更粗的水管。在處理流中最常用的還有BufferedReader和BufferedWriter。下面通過例子來看看這幾個流的功能:這幾個例子的注釋非常詳細,所以我就不多介紹了。
先看一個有關文件的例子:
package com.dr.inoutput;

import java.io.File;
import java.io.IOException;


public class Demo0
{
public static void main(String args[]) throws IOException

{
// File f=new File("e:"+File.separator+"aa"+File.separator+"abc.txt");//在任何系統狀態下建立文件句柄
// File f=new File("e:\\aa\\abc.txt");//在windows系統下建立文件句柄
File f=new File("e:/aa/abc.txt");//適用于Unix系統
f.createNewFile();//創建文件
System.out.println(f.getName());//得到文件的名稱
System.out.println(f.getAbsolutePath());//得到文件的絕對路徑
System.out.println(f.isFile());//判斷文件是不是標準文件
System.out.println(f.isDirectory());//判斷文件是不是目錄

/**//*
* 判斷文件是否存在,如果存在則刪除,如果不存在則新建
*/
if(f.exists())

{
f.delete();
}
else

{


f.createNewFile();
}
}

}


看一個有關FileInputStream例子:
package com.dr.inoutput;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


public class Demo5
{
public static void main(String args[])

{
File f=new File("e:\\aa\\abc.txt");//將要從哪個文件中讀取數據就將哪個文件建立句柄
InputStream input=null;//創建輸入流(這個輸入流必須放在try括號的外面)

try
{
input=new FileInputStream(f);//將輸入流指向要讀取的文件

} catch (FileNotFoundException e)
{
e.printStackTrace();
}
byte str[]=new byte[1024];//創建字節數組,用來盛放從輸入流讀取的信息
int x=0;
int count=0;
for(int i=0;i<str.length;i++)

{

try
{
if((x=input.read())!=-1)//判斷是否到文件尾,如果到文件尾就返回-1

{
str[i]=(byte)x;//因為x的值是int類型所以要進行數據轉換
count++;//用來計算讀入了多少個字節,以便下面進行操作
}
else

{
break;//如果到達文件尾就返回退出循環
}

} catch (IOException e)
{
e.printStackTrace();
}
}

try
{
input.close();//關閉輸入流

} catch (IOException e)
{
e.printStackTrace();
}
System.out.println(new String(str,0,count));//將字節數組轉換成字符串輸出
}

}


關于FileOutputStream例子
package com.dr.inoutput;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;


public class Demo4
{
public static void main(String args[]) throws FileNotFoundException

{
File f=new File("e:\\aa\\abc.txt");//向那個文件中寫入數據就顯得到這個文件的句柄
OutputStream out=new FileOutputStream(f);//新建一個通向f文件的輸出流
String xinxi="Hello 你好*****";//要輸出的信息
byte b[]=xinxi.getBytes();//將要輸出的信息轉換成字節數組

try
{
out.write(b);//將信息寫入文件中

} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

try
{
out.close();//關閉輸出流

} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


關于FileReader的例子
package com.dr.inoutput;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;


public class Demo7
{
public static void main(String args[])

{
File f=new File("e://aa//abcd.txt");//從哪個文件讀入數據,就獲得該文件的句柄
Reader in=null;//創建輸入流

try
{
in=new FileReader(f);//將輸入流指向要從哪個文件讀入數據的我文件

} catch (FileNotFoundException e)
{
e.printStackTrace();
}
//不能輸出漢字
byte[] str=new byte[1024];//建立字節數組用來存放讀入的數據
int x=0;
int count=0;
for(int i=0;i<str.length;i++)

{

try
{
if((x=in.read())!=-1)//判斷是否到文件尾,如果到文件尾就返回-1

{
str[i]=(byte)x;
count++;
}
else

{
break;
}

} catch (IOException e)
{
e.printStackTrace();
}
}

try
{
in.close();

} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(count);
System.out.println(new String(str,0,count));
//可以輸出漢字
// char[] chr=new char[1024];
// int x1=0;
// try {
// x1=in.read(chr);
// } catch (IOException e) {
// e.printStackTrace();
// }
// System.out.println(new String(chr,0,x1));
// System.out.println(x1);
// try {
// in.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}

}


關于FileWriter的例子
package com.dr.inoutput;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;


public class Demo6
{
public static void main(String args[])

{
File f=new File("e:\\aa\\abcd.txt");//將要向哪個文件輸出信息就獲得哪個文件的句柄
String str="Hello 你好***";//要向文件輸出的字符串信息

char[] chr=
{'a','b','c','d'};//向文件輸出的字符數組信息
Writer out=null;//創建輸出流通道

try
{
out=new FileWriter(f);//將輸出流通道指向要輸出的文件

} catch (IOException e)
{
e.printStackTrace();
}

try
{
out.write(str);//將字符串數組的信息寫到文件中
out.write(str,2,4);//將字符串數組的一部分信息寫到文件中
out.write(chr);//將字符數組的信息寫到文件中

} catch (IOException e)
{
e.printStackTrace();
}

try
{
out.close();//關閉輸出流

} catch (IOException e)
{
e.printStackTrace();
}
}

}


關于BufferedReader的例子
package com.dr.inoutput1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Demo1
{
public static void main(String args[])

{
BufferedReader buf=null;//創建緩沖輸入流,可以接受漢字
buf=new BufferedReader(new InputStreamReader(System.in));//將緩沖輸入流通道指向控制臺
String str=null;//盛放從控制臺接受到的信息
System.out.println("請輸入內容:");

try
{
str=buf.readLine();
buf.close();//關閉輸出流

} catch (IOException e)
{
e.printStackTrace();
}
System.out.println("輸出內容:"+str);
}

}


java流有很多常用的也就這幾種。仔細想想其實他們有一個共點:
獲得文件句柄
建立通道
讀\寫數據
關閉通道