java 核心編程——IO流之字元流(三)

来源:http://www.cnblogs.com/wwyx-xi/archive/2017/09/13/7513706.html
-Advertisement-
Play Games

1.字元流 1.1 所有文件的存儲都是位元組的存儲,我們日常在磁碟上保存的其實並不是文件的字元,而是先把字元轉換成位元組,再把這些位元組儲存到磁碟。在讀取文件時,也是一個位元組一個位元組的讀取,然後生成位元組的序列。 1.2 位元組流可以處理任何對象,但是字元流呢,、只用來處理字元或者字元串。可以這樣說,位元組流呢 ...


1.字元流

  1.1 所有文件的存儲都是位元組的存儲,我們日常在磁碟上保存的其實並不是文件的字元,而是先把字元轉換成位元組,再把這些位元組儲存到磁碟。在讀取文件時,也是一個位元組一個位元組的讀取,然後生成位元組的序列。

  1.2 位元組流可以處理任何對象,但是字元流呢,、只用來處理字元或者字元串。可以這樣說,位元組流呢,提供了最基本IO功能,可以處理任何IO操作,但是有一點,不可以直接處理Unicode字元,為什麼呢,因為Unicode字元是一個單元為2個位元組的字元,而位元組流的處理單元為1個位元組,字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元形成的。如果使用位元組流直接處理Unicode字元的話,由於各種編碼實現的不同,就很容易出現亂碼。

  1.3實例上,我們日常處理的很多數據,都是文本,所以我們在位元組流之外呢,又提出了字元流的概念,直接按照Java虛擬機的encode來處理,也就是在輸出流和輸入流之間 進行字元集的轉換。

2.java字元流實現結構

  1.輸入字元流

  2.輸出字元流

  

3.字元流常用類

  3.1 字元數組輸入輸出流(CharArrayReader和CharArrayWriter

package se.io;

import com.sun.org.apache.xpath.internal.operations.String;

import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.IOException;

public class CharArrayTest {

    public static void main(String[] args) {

        char[] chars = new char[3];
        chars[0] = 100;
        chars[1] = 101;
        chars[2] = 102;

        CharArrayReader charArrayReader = new CharArrayReader(chars);
        try {
            char[] buf = new char[1024];
            charArrayReader.read(buf);

            CharArrayWriter charArrayWriter = new CharArrayWriter();
            charArrayWriter.write(buf);

            System.out.println(charArrayWriter.toString());
            charArrayWriter.close();
            charArrayReader.close();

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


    }


}

  3.2文件輸入輸出流(FileWriter和FileReader)

package se.io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileCharTest {

    public static void main(String[] args) {

        try {
            FileReader fileReader = new FileReader("E:\\test\\data.txt");
            char[] chars = new char[1024];
            int i = fileReader.read(chars);

            FileWriter fileWriter = new FileWriter("E:\\test\\filewriter.txt");
            fileWriter.write(chars,0,i);

            fileWriter.close();
            fileReader.close();


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

    }

}

  3.3管道輸入輸出流(PipedReader 和 PipedWriter)

package se.io;

import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;

public class PipedChar {

    public static void main(String[] args) {

        SenderChar senderChar = new SenderChar();
        PipedWriter pipedWriter = senderChar.getWriter();

        ReceiverChar receiverChar = new ReceiverChar();
        PipedReader pipedReader =receiverChar.getReader();
        try {
            pipedWriter.connect(pipedReader);

            senderChar.start();
            receiverChar.start();

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

    }
}


//創建發送者類
class SenderChar extends Thread{
    private PipedWriter writer = new PipedWriter();

    public PipedWriter getWriter() {
        return writer;
    }

    public void run(){

        String s = new String("hello,world");
        try {
            writer.write(s);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}
//創建接受者
class ReceiverChar extends  Thread{

    private PipedReader reader = new PipedReader();

    public PipedReader getReader() {
        return reader;
    }

    public  void run(){

        String s= null;
        char[] chars = new char[1024];

        try {
            int i = reader.read(chars);
            s = new String(chars,0,i);
            System.out.println(s);
            reader.close();

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

  3.4緩存輸入輸出流(BufferedReader 和BufferedWriter)

package se.io;

import java.io.*;

public class BufferWriterTest {

    public static void main(String[] args) {

        try {

            //構建文件輸入輸出字元流,如果指定文件不存在,則自動生成。
            FileReader fileReader = new FileReader("E:\\test\\data.txt");
            FileWriter  fileWriter = new FileWriter("E:\\test\\data2.txt");

            //構建過濾緩存流
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

            //緩存數組
            char[] chars = new char[1024];
            int offset = 0 ;

            //讀取字元
            while(bufferedReader.ready()) {
                offset = bufferedReader.read(chars);
            }
            //輸出字元
            bufferedWriter.write(chars,0,offset);

            //關閉流
            bufferedWriter.close();
            bufferedReader.close();

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


    }

}

   3.5格式化輸出流(PrinterWriter)

package se.io;

import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class PrintWriterTest {

    public static void main(String[] args) {


        try {
            //創建文件輸出流
            FileWriter fileWriter = new FileWriter("E:\\test\\data3.txt");
            //創建格式化對象輸出流
            PrintWriter printWriter = new PrintWriter(fileWriter);

            //寫入數據
            printWriter.printf("%1$tY年%1$tm月%1$td日", new Date());
            printWriter.print(123);
            printWriter.print(12.32);
            //關閉流
            printWriter.close();

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

}

 


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

-Advertisement-
Play Games
更多相關文章
  • 如果需要調試 WPF 源代碼或框架源代碼,那麼需要使用 DotPeek ...
  • 需求:在一些重要的Word文檔需要列印時,添加水印以明出處。 方案:使用Aspose組件給word文檔 代碼:乾貨如下 /// <summary> /// Inserts a watermark into a document. /// </summary> /// <param name="doc ...
  • .Net在Framework4.0中增加了任務並行庫,對開發人員來說利用多核多線程CPU環境變得更加簡單,TPL正符合我們本系列的技術需求。因TPL涉及內容較多,且本系列文章為非同步程式開發,所以本文並未涉及TPL全部內容。後續會寫一個TPL系列的Blog,各位朋友可以關註一下。 ...
  • 1.主要是使用控制項綁定點擊事件 用到的控制項分別為picturebox lable 上一頁pbPage_Prev 下一頁 pbPage_Next 首頁 pbPage_Begin 尾頁pbPage_End 是picturebox控制項加背景圖 “第 頁/ 共 頁” 是一個lable “labPageInf ...
  • 最近新升級了Visual Studio 2017,創建的Web項目Bin目錄中多了一個叫roslyn的文件夾,該文件夾導致網站在某些伺服器上發佈出錯 從網上搜索了一下,Roslyn是新出的動態編譯工具 但是在伺服器上安裝.net4.6後仍然提示編譯出錯。 解決方法:打開解決方案NuGet包管理器,卸 ...
  • 這個我是在winform的頁面上做的 1. 首先是在頁面上添加3個lable 第一次點擊lable會有相應的數據被查詢出來 第二次點擊同一個lable會刷新所有的數據 2.點擊不同的label會有顏色提示當前點擊的是哪一個 第二次點擊的時候會還原lable的顏色 3.根據本日 本周 本月查詢數據 是 ...
  • 1: 有兩個地方必須做異常處理,異常類型為IOException 伺服器讀客戶端發來的信息時: LeafTCPClient client = (LeafTCPClient)ar.AsyncState; try { if (client.NetWork.Connected) { NetworkStre ...
  • 在新的ASP.NET Core MVC中,視圖組件類似於局部視圖,但它們更強大。視圖組件不使用模型綁定,僅依賴於您在調用時提供的數據。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...