1. 程式人生 > >IO、IO序列化

IO、IO序列化

tao 如果 系統資源 AC adl 長度 args flush 而不是

文件:文件可認為是相關記錄或放在一起的數據的集合。文件一般保存在硬盤、U盤、光盤、雲盤的媒介中。

JAVA API:java.io.File類可操作文件

File對象的構建

File file=new File(String pathname);
需要註意的是:String pathname的格式為:e:\\test.txt或e:/test.txt

File類常用的方法:

boolean exists()【判斷文件或目錄是否存在】

boolean isFile()【判斷是否是文件】

boolean isDirectory()【判斷是否是目錄】

String getPath()【返回此對象表示的文件的相對路徑名】

String getAbsolutePath()【返回此對象表示的文件的相對路徑名】

String getName()【返回此對象表示的文件或目錄的名稱】

booblean delete()【刪除此對象指定的文件或目錄】

booblean creatNewFile()【創建名稱的空文件,不創建文件夾】

long length()【返回文件的長度,單位為字節】

創建文件的方法:

public void create(File file) {
 
        if (!file.exists()) {
 
            try {
 
                file.createNewFile();
 
                System.out.println(
"文件已創建!"); } catch (IOException e) { e.printStackTrace(); } } }

刪除文件的方法:

 public void delete(File file) {
 
        if (file.exists()) {
 
            file.delete();
 
            System.out.println("文件已刪除!");
 
        }
 
    }

顯示文件的方法:

public void showFileInfo(File file) {
 
        if (file.exists()) { // 判斷文件是否存在
 
            if (file.isFile()) { // 如果是文件
 
                System.out.println("名稱:" + file.getName());
 
                System.out.println("相對路徑: " + file.getPath());
 
                System.out.println("絕對路徑: " + file.getAbsolutePath());
 
                System.out.println("文件大小:" + file.length() + " 字節");
 
            }
 
            if (file.isDirectory()) {
 
                System.out.println("此文文件是目錄");
 
            }
 
        } else
 
            System.out.println("文件不存在");
 
    }

流:流是指一連串流動的字符,是以先進先出方式發送信息的通道。

技術分享圖片

常用的文件讀寫類

文本文件的讀寫

字節流方式:FileInputStream、FileOutputStream

字符流方式:BufferedReader、BufferedWriter

二進制文件的讀寫

DataInputStream、DataOutputStream

字節流方式讀寫文本

FileInputStream 讀文本文件

InputStream類常用方法

int read()【從此輸入流中讀取一個數據字節】

int read(byte[] b)【從此輸入流中將最多b.length個字節的數據讀入一個byte數組中。】

int read(byte[] b,int off,int len)【從此輸入流中將最多len個字節的數據讀入一個byte數組中】

void close()【關閉此文件輸入流並釋放與此流有關的所有系統資源】

int available() 【返回下一次對此輸入流調用的方法可以不受阻塞的從此輸入流讀取(或跳過)的估計剩余字節】

子類FileInputStream常用的構造方法

FileInputStream(File file)【通過文件對象創建FileInputStream對象】

FileInputStream(String name)【通過name文件路徑創建FileInputStream對象】

FileOutputStream 寫文本文件

OutputStream類常用方法

void write(int c) 【將指定字節寫入此文件輸出流。】

void write(byte[] buf)【將 b.length 個字節從指定 byte 數組寫入此文件輸出流中。】

void write(byte[] b,int off,int len) 【將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此文件輸出流。】

void close( ) 【關閉此文件輸出流並釋放與此流有關的所有系統資源。】

子類FileOutputStream常用的構造方法

FileOutputStream (File file) 【創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。】

FileOutputStream(String name) 【創建一個向具有指定名稱的文件中寫入數據的輸出文件流。】

FileOutputStream(String name, boolean append) 【創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。如果第二個參數為 true,則將字節寫入文件末尾處,而不是寫入文件開始處。】

需要註意的是:

1、前兩種構造方法在向文件寫數據時將覆蓋文件中原有的內容。

2、創建FileOutputStream實例時,如果相應的文件並不存在,則會自動創建一個空的文件。

3、FileInputStream和FileOutputStream創建的流屬於節點流,直接操縱數據源。

字符流方式讀寫文本文件

BufferedReader讀文本文件

實例:

    //緩沖流的使用
    public static void main(String[] args) throws Exception {
        //BufferedReader讀取文件信息
        //reader類的子類FileReader
        FileReader fr=new FileReader("f:/text.txt");
        BufferedReader br=new BufferedReader(fr);
        //利用緩沖流讀取信息
        String line=br.readLine();//每次讀一行數據
        while(line!=null){
            System.out.println(line);
            line=br.readLine();
        }
        //關閉流
        br.close();
        fr.close();
    }

使用字符流讀取文本文件相關類

Reader

FileReader(節點流)

BufferedReader(處理流)

Reader類常用方法

int read( )

int read(char[] c)

int read(char[] c,int off,int len)

void close( )

子類BufferedReader常用的構造方法

public BufferedReader(Reader in) //in通常使用FlieReader對象

子類BufferedReader特有的方法

public String readLine() //讀取一行信息

BufferedWriter寫文本文件

使用字符流寫文本文件相關類

Writer

FileWriter(節點流)

BufferedWriter(處理流)

Writer類常用方法

void write(String str)

void write(String str,int off,int len)

void close()

void flush()

子類BufferedWriter常用的構造方法

BufferedReader(Writer out) //in通常使用FlieWriter對象

字節流方式讀寫二進制文件

DataInputStream類讀取二進制文件(處理流)

FileInputStream的子類

與FileInputStream類結合使用讀取二進制文件

DataOutputStream類寫二進制文件(處理流)

FileOutputStream的子類

與FileOutputStream類結合使用寫二進制文件

序列化與反序列化的過程:

package com.zx5;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
//--------------------------------序列化的過程-----------------------------------------------
public class Test {
//把對象寫入到磁盤文件,叫做序列化,,,,,反序列化就是把磁盤文件還原
    public static void main1(String[] args) throws Exception {
        //集合都可以序列化
        List<Object> list=new ArrayList<Object>();
        list.add(10);
        list.add("200");
        list.add(23.23);
        OutputStream out=new FileOutputStream("f:/text.txt");
        //objectOutputStream序列化的流
        ObjectOutputStream oos=new ObjectOutputStream(out);
        //寫入對象
        oos.writeObject(list);
        //關閉流
        oos.close();
        out.close();
    }
    //----------------------------------------反序列化------------------------------    
    public static void main(String[] args) throws Exception {
        //反序列化:把二進制文件中的內容恢復成對象
        //字節輸入流對象
        InputStream in=new FileInputStream("f:/text.txt");
        //創建一個ObjectInputStream對象
        ObjectInputStream ois=new ObjectInputStream(in);
        //讀取readObject()
        Object obj=ois.readObject();//讀出對象
        List<Object> list=(List<Object>) obj;
        for (Object object : list) {
            System.out.println(object);
        }
    }
}

需要註意的是:

如果不對錢進行序列化,可用transient進行修飾,如:private transient double money;

IO、IO序列化