Java語言I/O編程
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jacktee.blog.51cto.com/189506/34206 |
在說之前先說說關于文件方面的知識:
文件是在計算機内存中以二進制表示的數據在外部存儲介質上的另一种存放形式。文件通常分为二进制文件和文本文件。
二进制文件是包含在 ASCII 及擴展 ASCII 字符中編寫的數據或程序指令的文件。一般是可執行程序、圖形、圖象、聲音等等文件。 文本文件(也稱为ASCII文件):它的每一個字節存放的是可表示為一個字符的ASCII代碼的文件。它是以 “行”為基本結構的一種信息 組織和存儲方式的文件,可用任何文字处理程序阅读的簡單文本文件. Java語言級支持對文件操作,它所需的類在Java.io包中,下面分別來說:
(一)File類
1.一個File類的對象,表示磁盤上的文件或是目錄.
2.File類提供了與平臺無關的方法來對磁盤上的文件或是目錄進行操作.
下面以一個例子說明:
Example 1:
import java.io.*; class FileTest { public static void main(String[] args) throws Exception //I/O操作會拋出異常 { //File f=new File("1.txt"); //f.createNewFile(); f.mkdir(); //創建一個目錄 File f=new File("E:\\Java\\Code\\Test.txt");//轉譯字符,表示 絕對路徑 f.createNewFile(); File fDir=new File(File.separator);//分隔符(這樣會不依賴于系統)在Linux系統下的分隔符是正斜杠. String strFile="Java"+File.separator+"Code"+ File.separator+"Test.txt"; File f=new File(fDir,strFile); f.createNewFile(); //f.delete(); //運行時刪除 f.deleteOnExit();//運行結束后刪除 } }
(二) 流式I/O
1.流(Stream)是字節的源和目的.
2.兩種基本的流是:輸入流(Input Stream)和輸出流(Output Stream).可從中讀出一系列字節的對象稱為輸入流,而能從中寫入一系列字節的對象稱為輸出流.
3.流的分類.
節點流:從特定的地方讀寫的流類.
過濾流:使用節點流作為輸入或輸出,是使用一個已經存在的輸入流或輸出流連接創建的.
(三)InputStream類(抽象基類)
常用方法有:abstract int read()讀取一個字節數據,并返回讀到的數據,如果返回-1表示讀到了輸入流的末尾.
int read(byte []b) 將數據讀入到一個字節數組,同時返回實際讀到的字節數,如果返回-1表示讀到了輸入流的末尾.
int read(byte [] b,int off,int len) 將數據讀入到一個字節數組,同時返回實際讀到的字節數,如果返回-1表示讀到了輸入流的末尾.off指定在數組b中存放數據的起始偏移的位置,len指定讀取的最大字節數.
其他方法:void close() 關閉輸入流,釋放有關這個流的系統資源.
(四)OutputStream類(抽象基類)
常用方法有:
abstract void write(int b) 往輸出流中寫入一個字節.
void write(byte []b) 往輸出流中寫入數組b中的所有字節.
void write(byte []b,int off,int len) 往輸出流中寫入數組b中從偏移量off開始的len個字節的數據.
其他方法:void flush() 刷新輸出流,強制緩沖區的輸出字節被寫出,void close() 關閉輸出流,釋放有關這個流的系統資源.
這里只是寫了常用的方法,還有很多方法也不必死記硬背,到用到的時候可以去查API幫助文檔.
(五)基本的流類:
FileInputStream類和FileOutoutStream類
節點流,用于從文件中讀取或往文件中寫入字節流,如果在構建FileOutputStream時,文件已經存在,則覆蓋這個文件.
BufferedInputStream類和BufferedOutputStream類
過濾流,需要已經存在的節點流來構建,提供帶緩沖的讀寫,提高了讀寫的效率.
DataInputStream類和DataOutputSteam類
過濾流,需要已經存在的節點流來構建,提供帶緩沖的讀寫,提供了讀寫Java中基本數據類型的功能.
PipedInputStream類和PipedOutputStream類
管道流,用于線程間的通信,一個線程的PipedInputStream對象從另一個線程的PipedOutputStream對象讀取數據.要使管道流有用,必須同時構建管道輸入流和管道輸出流.
下面舉例來說明這些類的用法.
Example 2: (這些都綜合在這個例子中看起來比較亂,沒有分開來寫)
import java.io.*;
class StreamTest
{ public static void main(String[] args) throws Exception //為了方便只寫拋出異常 { FileOutputStream fos=new FileOutputStream("test.txt"); fos.write("Welcome to java world!".getBytes()); fos.close(); BufferedOutputStream bos=new BufferedOutputStream(fos); bos.write("http://www.kaifulee.com/".getBytes()); bos.flush(); bos.close(); DataOutputStream dos=new DataOutputStream(bos); byte b=3; int i=78; char ch='a'; float f=4.5f; dos.writeByte(b); dos.writeInt(i); dos.writeChar(ch); dos.writeFloat(f); dos.close(); FileInputStream fis=new FileInputStream("test.txt"); BufferedInputStream bis=new BufferedInputStream(fis); byte[] buf=new byte[100]; int len=fis.read(buf); int len=bis.read(buf); System.out.println(new String(buf,0,len)); fis.close(); bis.close(); DataInputStream dis=new DataInputStream(bis); System.out.println(dis.readByte()); System.out.println(dis.readInt()); System.out.println(dis.readChar()); System.out.println(dis.readFloat()); dis.close(); } } Example 3:(PipedInputStream類和PipedOutputStream類實例)
import java.io.*;
class PipedStreamTest { public static void main(String[] args) { PipedOutputStream pos=new PipedOutputStream(); PipedInputStream pis=new PipedInputStream(); try { pos.connect(pis); new Producer(pos).start(); new Consumer(pis).start(); } catch(Exception e) { e.printStackTrace(); } } } class Producer extends Thread
{ private PipedOutputStream pos; public Producer(PipedOutputStream pos) { this.pos=pos; } public void run() { try { pos.write("Hello,welcome you!".getBytes()); pos.close(); } catch(Exception e) { e.printStackTrace(); } } } class Consumer extends Thread
{ private PipedInputStream pis; public Consumer(PipedInputStream pis) { this.pis=pis; } public void run() { try { byte[] buf=new byte[100]; int len=pis.read(buf); System.out.println(new String(buf,0,len)); pis.close(); } catch(Exception e) { e.printStackTrace(); } } } (六)Writer類和Reader類(抽象類)
1.Java程序語言使用Unicode來表示字符串和字符.
2.這兩個類是用來讀寫字符流的.
下面還是來舉例說明吧
Example 4:
import java.io.*;
class FileStreamTest
{
public static void main(String[] args) throws Exception
{
FileOutputStream fos=new FileOutputStream("1.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos); BufferedWriter bw=new BufferedWriter(osw); bw.write("http://www.baidu.com/"); bw.close(); FileInputStream fis=new FileInputStream("1.txt"); InputStreamReader isr=new InputStreamReader(fis); BufferedReader br=new BufferedReader(isr); System.out.println(br.readLine()); br.close(); InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); String strLine; while((strLine=br.readLine())!=null) { System.out.println(strLine); } br.close(); }
}
由于個人水平所限,可能以上會有很多的錯誤,希望朋友們多指正,僅此謝過.
本文出自 “弘毅” 博客,请务必保留此出处http://jacktee.blog.51cto.com/189506/34206 本文出自 51CTO.COM技术博客 |


jacktee
博客统计信息
热门文章
最新评论
友情链接