1. 程式人生 > >Java基礎之IO流(位元組流、字元流、記憶體流、帶快取的流、序列化和反序列化)

Java基礎之IO流(位元組流、字元流、記憶體流、帶快取的流、序列化和反序列化)

  1. File類:File類提供了對檔案的操作,可以通過字串或URI來構建一個File類物件。通過物件,可以實現檔案的建立(createNewFile)、刪除(delete)、獲得檔名(getName)、獲得父目錄物件(getParentFile)、獲得父目錄名稱(getParent)、獲得完整路徑(getPath)等。File類提供了靜態方法listRoots,返回所有的碟符(也是File物件),getTotalSpace方法會返回該目錄所剩餘的容量空間。
    f.list方法會返回f下所有的File物件的名稱(也就是f目錄下所有的檔案以及資料夾的名稱)。這個方法可以傳遞一個FileNameFilter(介面)的例項物件。這樣會根據要求列出符合條件的檔名。
    f.listFiles方法返回f下的所有File物件。也可以傳遞一個實現FileFilter介面的例項物件作為引數。這樣會根據要求列出符合條件的File物件。
public class Maintest {
    public static void main(String[] args) {
        File file=new File("e:\\aaa");
        String[] fileName=file.list(new FilenameFilter() {//匿名內部類
            @Override public boolean accept(File dir, String name) {
                return name.endsWith(".txt")?true:false;//將以.txt結尾的羅列出來
            }
        });
        for (String f:fileName) {
            System.out.println(f);
        }
        File[] f=file.listFiles(new FileFilter() {
            @Override public boolean accept(File pathname) {
                return pathname.isDirectory()?true:false;//將資料夾羅列出來
            }
        });
        for(File fi:f)
        {
            System.out.println(fi.getName());
        }
    }
}

執行結果:

123.txt
456.txt
999.txt
aaa.txt
abc.txt
ccc.txt
dataoutputstream.txt
object.txt
bbb
新建資料夾

2.位元組流:InputStream和OutputStream是位元組流的父類,是抽象的,不能建立物件。
(1).FileInputStream和FileOutputStream實現了這兩個類。按位元組讀寫。可以通過字串或File物件來構建這兩個流。輸出流output提供的時write方法,輸入流input提供了read方法,該方法返回讀到的位元組數。沒讀到返回-1。
(2).FilterOutputStream和FilterInputStream繼承了OutputStream和InputStream類,沒有新增任何方法,只是擴充套件了父類。這兩個類的內部含有一個父類的引用。
(3).DataInputStream和DataOutStream分別繼承了以上兩個類。實現了DataInput和DataOutput這兩個介面。這兩個類可以讀寫基本資料型別。
(4).BufferedInputStream和BufferedOutputStream也是FilterInputStream和FileterOutputStream的子類。沒有增加方法,但是帶了快取,效能高,支援流標記。
(5).PrintStream類可以方便輸出,也是繼承FilterOutputStream類,可以直接用字串來構建。提供print(ln)方法,直接將內容列印到檔案中。
(6).記憶體流:ByteArrayInputStream和ByteArrayOutputStream可以將位元組讀寫到記憶體中。

3.字元流:Reader和Writer是字元流的基類,其實是以位元組流為基礎的。Reader完成了從位元組到字元的解碼過程,Writer完成了從字元到位元組的編碼過程。
(1).OutputStreamWriter和InputStreamReader繼承了字元流的基類。構建字元流的時候要用到位元組流。
(2).帶快取的字元流: BufferedWriter和BufferedReader,構建時要用到Writer和Reader。新增了newLine(換一行)和readLine(讀一行)的方法。

FileOutputStream fo=new FileOutputStream("e:\\aaa.txt");
Writer writer=new OutputStreamWriter (fo);
BufferedWriter bw=new BufferedWriter(writer);

也可以通過FileReader和FileWriter來構建

FileReader fr=new FileReader("e:\\aaa.txt");
BufferedReader br=new BufferedReader(fr);

(3).PrintWriter和PrintStream相類似,為了方便輸出。但PrintStream是位元組流,PrintWriter是字元流。

4.序列化與反序列化:實現Serializable介面(表示介面,空的)的類支援序列化。transient修飾的成員不參與序列化。序列化過程:

public class Maintest {
    public static void main(String[] args) throws Exception{
    	//序列化過程
        OutputStream f=new FileOutputStream("e:\\aaa\\abcd.txt");
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(f);
        objectOutputStream.writeObject(new Student("zhangsan",20));
        System.out.println("OK");
        //反序列化過程
        InputStream fi=new FileInputStream("e:\\aaa\\abcd.txt");
        ObjectInputStream objectInputStream=new ObjectInputStream(fi);
        System.out.println((Student)objectInputStream.readObject());
    }
}

執行結果:

OK
Student{name='zhangsan', age=20}

相關推薦

Java基礎IO操作

Java基礎之IO操作(二) 一、BufferedInputStream public static void main(String[] args) { File src = new File("abc.txt"); //2、選擇流 InputStream is =null;

Java基礎IO操作

Java基礎之IO操作(一) 一、FileInputStream 第一個程式,理解操作步驟 public static void main(String[] args) { //1、建立源 File src = new File("abc.txt"); //2、

Java基礎IO位元組字元記憶體快取序列序列

File類:File類提供了對檔案的操作,可以通過字串或URI來構建一個File類物件。通過物件,可以實現檔案的建立(createNewFile)、刪除(delete)、獲得檔名(getName)、獲得父目錄物件(getParentFile)、獲得父目錄名稱(

java基礎IO

目標 構造方法 play pub io流 ted ima str 有一個 java基礎之IO流(一)之字節流   IO流體系太大,涉及到的各種流對象,我覺得很有必要總結一下。   那什麽是IO流,IO代表Input、Output,而流就是原始數據源與目標媒介的數據傳輸的一種

Java基礎IO小結

      Java程式中對於資料的輸入和輸出操作是以流的方式進行的。一個流可以被定義為一個數據序列。我們可以理解為:流是用來讀寫資料的。Java語言提供的java.io包可以很方便的讓我們對資料進行輸入和輸出操作。本文將和大家分享學習Java IO流的相關基礎知識。 一、

黑馬程式設計師--JAVA基礎IO

一 IO流的三種分類方式:  1.按照流向來分:                輸入流:只能從中讀取位元組資料,不能向其寫出資料                      輸出流:只能向其寫入位元組資料,不能從中讀取資料  2.按照流所處理的資料型別劃分:可分為: 位元組流:用於處理位元組

java IO 位元組字元操作總結三字元序列序列

這一篇我講介紹一下字元流。什麼是字元流,就是若干個位元組組成一個字元。(為什麼說是若干個,不能確定嗎)這裡就來說說原因和編碼問題。 首先說說字元編碼的問題,比較常用的編碼有gbk,utf-8等。 a、.編碼問題(看前面所描述的)。 1、gbk 編碼中文佔用2個位元組,英文

java基礎IO及遞歸理解

示例代碼 font hid 再次 調用方法 反斜杠 filter amp 遞歸 一、IO流(簡單理解是input/output流,數據流內存到磁盤或者從磁盤到內存等) 二、File類(就是操作文件和文件夾的) 1、FIleFile類構造方法 註意:通過構造方法創建的f

Java基礎反射應用如何獲取物件的構造方法屬性以及基本方法

反射實戰:新建Student類,利用反射原理輸出Student的構造方法,屬性,普通方法,引數列表等等資訊。 反射資料:查詢java_API之:java.lang.reflect包下。 Student類: package com.briup.ch24; public class St

Java基礎反射例項例項Account與修改屬性

要求:    設計Account類,並且新增屬性id、name、balance,新增get和set方法與存取錢的方法。    設計ReflectAccountTest類,例項化Account物件,存如100元,與取1000元的結果顯示。 &nb

黑馬程式設計師----Java基礎IO包中其它類

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

java基礎引數傳遞值傳遞

一、值傳遞/*程式在執行過程中,引數傳遞問題: 1.傳遞資料是基本資料型別 2.傳遞資料是引用資料型別 */1.以下程式是傳遞基本資料型別 public class ClassTest04 { public static void m1(int i){ i++;

Java基礎List集合包含JUC學習程序

Java中重要的集合包主要有Collection和map 複習collectioon,主要是List,Queue和Set List 首先要知道List是一個介面,繼承自collection 其中定義了是元素有序並且可以重複的集合,被稱為序列,並且List允許存放

Java基礎IO

Java I/O 流是一組有順序的,有起點和終點的位元組集合。是對裝置檔案間資料傳輸的總稱和抽象。 在IO中涉及的裝置檔案包括檔案、控制檯、網路連結等,這其中又根據流的方向可以將兩端的裝置檔案分為資料來源物件和接收端物件 資料來源物件:有能力產出資料 接收端物件:

JAVA基礎常用類SystemDataCalendarMath

System類: Math類 更多的Math類方法,請自行查詢API並選擇使用。 Data類: Data類獲取當前的時間值; 時間格式化類(SimpleDateFormat()) 定義: SimpleDate

Java基礎自增++自減--運算子

回顧一下相關知識:  · 自增(++):將變數的值加1,分字首式(如++i)和字尾式(如i++)。字首式是先加1再使用;字尾式是先使用再加1。  · 自減(--):將變數的值減1,分字首式(如--i)和字尾式(如i--)。字首式是先減1再使用;字尾式是先使用再減1。  一、

Java基礎加解密 SHA安全雜湊演算法

介紹:安全雜湊演算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。該演算法的思想是接收一段明文,

Java基礎----異常處理1.7以上

什麼是異常 異常是在程式執行過程中發生的,中斷程式正常執行流程的事件.Exception是exceptional event的簡稱java程式語言用異常來處理錯誤和其他異常事件。 處理過程 當在一個方法執行過程中發生一個異常,這個方法會建立一個異常物件,並把發這個物件

Java-裝飾-物件 - 序列序列

ObjectInputStream(反序列化) & ObjectOutputStream(序列化) 1.先寫出後讀取 2.讀取的順序必須保持一致 3.不是所有的物件都能序列化,要加上serializable接口才行 當不想對物件中的某個屬性序列化時,在屬性中新增transie

python基礎繼承組合應用對象序列序列,選課系統綜合示例

sel 初始 否則 通用 __init__ period 類型 反序列化 信息 繼承+組合應用示例 1 class Date: #定義時間類,包含姓名、年、月、日,用於返回生日 2 def __init__(self,name,year,mon,day):