java--標準輸入輸出流

来源:https://www.cnblogs.com/selfdef/archive/2019/06/23/11073920.html
-Advertisement-
Play Games

對象操作流 可以用於讀寫任意類型的對象 ObjectOutputStream :對象輸出字元流 WriteObject ObjectInputStream :對象輸入字元流 ReadObject 註意: 使用對象輸出流寫出對象,只能使用對象輸入流來讀取對象 只能將支持java.io.Serializ ...


//讀取鍵盤錄入的數據寫到a.txt
//方式一
private static void method() throws IOException {
    //創建輸入流對象
    InputStream is = System.in;
    Reader r = new InputStreamReader(is);
    //創建輸出流對象
    FileWriter fw = new FileWriter("a.txt");
    
    //讀取數據
    byte[] bys = new byte[1024];
    int len;
    while((len = is.read(bys))!=-1)
    {
        fw.write(new String(bys, 0, len));
        fw.flush();
    }
    fw.close();
    is.close();
}

//方式二
private static void method2() throws IOException {
    //創建輸入流對象
    InputStream is = System.in;
    Reader r = new InputStreamReader(is);
    //創建輸出流對象
    FileWriter fw = new FileWriter("a.txt");
    
    //讀取數據
    char[] chs = new char[1024];
    int len;
    while((len = r.read(chs))!=-1)
    {
        fw.write(chs, 0 , len);
        fw.flush();
    }
    fw.close();
    r.close();
}


// 將文件中的數據輸出到控制台
    BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    
    //OutputStream os = System.out;
    //Writer w = new OutputStreamWriter(System.out);
    //BufferedWriter bw = new BufferedWriter(w);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    String line;
    while((line = br.readLine())!=null)
    {
        bw.write(line);
        bw.newLine();
    }
    bw.close();
    br.close();
//使用列印流複製文本文件
private static void method3() throws FileNotFoundException, IOException {
    //創建輸入流對象
    BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    //創建列印流對象
    PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);  // 此處true,是自動刷新
    String line;
    while((line = br.readLine())!=null)
    {
        pw.println(line);
    }
    pw.close();
    br.close();
    }


//使用位元組流進行文件的複製(複製二進位文件)

private static void method() throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream("這裡是一個文件名");
    FileOutputStream fos = new FileOutputStream("另一個問件名");
    
// 一次讀一個位元組
//      int by;
//      while((by = fis.read() ) !=-1){
//          fos.write(by);
//      }
    
    // 一次讀取一個字元數組
    int len;
    byte[] bys = new byte[1024];
    while((len = fis.read(bys))!=1){
        fos.write(len);
    }
    
    fis.close();
    fos.close();
}

對象操作流

可以用於讀寫任意類型的對象
ObjectOutputStream :對象輸出字元流
WriteObject
ObjectInputStream :對象輸入字元流
ReadObject
註意:
使用對象輸出流寫出對象,只能使用對象輸入流來讀取對象
只能將支持java.io.Serializable 介面的對象寫入流中
Serializable:序列號,是一個標識介面,只起表示作用,沒有方法
當一個類的對象需要進行IO流進行讀寫的時候,這個類必須實現此介面

//eg:創建用於文件讀寫的學生類對象
public class Student implements Serializable{
    private static final long serialVersionUID = -4114259825335049236L;  // 固定序列號
    String name;
    int age;
    
    public Student(String name,int age) {
        this.age = age;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
}




//將學生對象寫入文件
private static void method() throws IOException, FileNotFoundException {
    //創建對象輸出流的對象
    //FileOutputStream fos = new FileOutputStream("a.txt"); // 位元組輸出流
    //ObjectOutputStream oos = new ObjectOutputStream(fos);
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
    
    //創建學生對象
    Student s = new Student("zhangsan", 18);
    Student s2 = new Student("lisi",19);
    
    //寫出學生對象
    oos.writeObject(s);
    oos.writeObject(s2);
    
    //釋放資源
    oos.close();
}



//將文件中的學生對象讀取出來
    private static void method2() throws IOException, FileNotFoundException, ClassNotFoundException {
        //創建對象輸入流的對象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
    /*  //讀取對象  
        java.lang.Object obj = ois.readObject();
        System.out.println(obj);
        
        java.lang.Object obj2 = ois.readObject();
        System.out.println(obj2);
        
        java.lang.Object obj3 = ois.readObject();
        System.out.println(obj3);*/
        
        try{
            while(true)
            {
                java.lang.Object obj = ois.readObject();
                System.out.println(obj);
            }
        } catch(EOFException e){
            System.out.println("讀到了文件的末尾");
        }
        //釋放資源
        ois.close();
    }




// 另一種方式寫入
private static void method3() throws IOException, FileNotFoundException {
    // 另一種寫入對象文件的方式(將所有對象寫入到集合對象中)
    //創建對象輸出流對象
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt"));
    //創建集合對象
    ArrayList<Student> list = new ArrayList<Student>();
    //添加學生對象
    list.add(new Student("wangwu", 19));
    list.add(new Student("zhaoliu", 20));
    //寫出集合對象
    oos.writeObject(list);
    
    //釋放資源
    oos.close();
}


//另一種讀取方式
private static void method4() throws IOException, FileNotFoundException, ClassNotFoundException {
    //創建對象輸出流對象
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.txt"));
    //讀取數據
    java.lang.Object obj = ois.readObject();
    //System.out.println(obj);
    // 向下轉型,獲取具體的子類對象
    ArrayList<Student> list = (ArrayList<Student>) obj;
    for(Student stu:list)
    {
        System.out.println(stu);
    }
    
    //釋放資源
    ois.close();
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新聞 "Azure Notebook概覽" "SpecFlow 3就在這裡了!" "使用新的Try .NET模版創建互動式文檔" "逐漸演化的.NET Core框架" "Dylan與Linebreakers Oslo 2019" 視頻及幻燈片 "F MonoGame平臺游戲系列:平鋪背景" "我愛F ...
  • metaclass 的超越變形特性有什麼用? 來看yaml的實例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' def __init__(self, name, hp, ac, attacks): self.n ...
  • django 路由系統 [TOC] 路由是什麼? Django 1.11版本 URLConf官方文檔 基本格式: 示例: 參考官方文檔 2.0版本中re_path和1.11版本的url是一樣的用法。 正則表達式 詳解 補充說明 分組 命名分組 (建議使用命名分組) 小結 指定預設值 include其 ...
  • 6.23 自我總結 1.描述符\_\_get\_\_,\_\_set\_\_,\_\_delete\_\_ 描述符是什麼:描述符本質就是一個新式類,在這個新式類中,至少實現了___\_get\_\_(),\_\_set\_\_(),\_\_delete\_\_()中的一個,這也被稱為描述符協議 __ ...
  • JFxUtils "項目地址" 介紹 這是一個JFX的工具庫,Intent可以簡單地實現打開一個新視窗並傳遞數據,DialogBuilder可以簡單地生成對話框,MyUtils有些常用的功能 使用 與`JavaFxTemplate JavaFxTemplate`模板 JavaFxTemplate模版 ...
  • 6.23 自我總結 面向對象的高階 1.isinstance/type/issubclass 1.type 顯示對象的類,但是不會顯示他的父類 2.isinstance 會顯示的對象的類,也會去找對象的父類,填寫參數是對象,類isinstance(對象,類)如果對象屬於後面的類會報Ture,反之Fa ...
  • 摘要: 主頁面的搭建(導航條下麵的區域) 個人站點 側邊欄分類展示 側邊欄標簽展示 側邊欄日期歸檔 文章詳情頁 文章內容 文章點贊點踩 文章評論 側邊欄分類展示 側邊欄標簽展示 側邊欄日期歸檔 文章內容 文章點贊點踩 文章評論 一、主頁面home.html的搭建(進一步完善) home.html頁面 ...
  • 單線程執行 python的內置模塊提供了兩個內置模塊:thread和threading,thread是源生模塊,threading是擴展模塊,在thread的基礎上進行了封裝及改進。所以只需要使用threading這個模塊就能完成併發的測試 實例 創建並啟動一個單線程 執行結果 其實單線程的執行結果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...