1. 程式人生 > >Java燒腦驢遊(十四)--流(Stream)、檔案(File)和IO

Java燒腦驢遊(十四)--流(Stream)、檔案(File)和IO

Java.io包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。

Java.io包中的流支援很多種格式,比如:基本型別、物件、本地化字符集等等。

一個流可以理解為一個數據的序列。輸入流表示從一個源讀取資料,輸出流表示向一個目標寫資料。

讀取控制檯輸入

Java的控制檯輸入由System.in完成。

為了獲得一個繫結到控制檯的字元流,你可以把System.in包裝在一個BufferedReader 物件中來建立一個字元流。

下面是建立BufferedReader的基本語法:

BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));

BufferedReader物件建立後,我們便可以使用read()方法從控制檯讀取一個字元,或者用readLine()方法讀取一個字串。

從控制檯讀取多字元輸入

每次呼叫read()方法,它從輸入流讀取一個字元並把該字元作為整數值返回。 當流結束的時候返回-1。該方法丟擲IOException。

下面的程式示範了用read()方法從控制檯不斷讀取字元直到使用者輸入”q”。

// 使用 BufferedReader 在控制檯讀取字元

import java.io.*;

public class BRRead {
   public static void main(String args[]) throws IOException
   {
      char
c; // 使用 System.in 建立 BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter characters, 'q' to quit."); // 讀取字元 do { c = (char) br.read(); System.out.println(c); } while
(c != 'q'); } }

從控制檯讀取字串

從標準輸入讀取一個字串需要使用BufferedReader的readLine()方法。
下面的程式讀取和顯示字元行直到你輸入了單詞”end”。

// 使用 BufferedReader 在控制檯讀取字元
import java.io.*;
public class BRReadLines {
   public static void main(String args[]) throws IOException
   {
      // 使用 System.in 建立 BufferedReader 
      BufferedReader br = new BufferedReader(new
                              InputStreamReader(System.in));
      String str;
      System.out.println("Enter lines of text.");
      System.out.println("Enter 'end' to quit.");
      do {
         str = br.readLine();
         System.out.println(str);
      } while(!str.equals("end"));
   }
}

控制檯輸出

在此前已經介紹過,控制檯的輸出由 print( ) 和println( )完成。這些方法都由類PrintStream 定義,System.out是該類物件的一個引用。

PrintStream 繼承了OutputStream類,並且實現了方法write()。這樣,write()也可以用來往控制檯寫操作。

下面的例子用write()把字元”A”和緊跟著的換行符輸出到螢幕:

import java.io.*;

// 演示 System.out.write().
public class WriteDemo {
   public static void main(String args[]) {
      int b; 
      b = 'A';
      System.out.write(b);
      System.out.write('\n');
   }
}

讀寫檔案

如前所述,一個流被定義為一個數據序列。輸入流用於從源讀取資料,輸出流用於向目標寫資料。

下圖是一個描述輸入流和輸出流的類層次圖。

這裡寫圖片描述

FileInputStream

該流用於從檔案讀取資料,它的物件可以用關鍵字new來建立。

有多種構造方法可用來建立物件。

可以使用字串型別的檔名來建立一個輸入流物件來讀取檔案:

InputStream f = new FileInputStream(“C:/java/hello”);

也可以使用一個檔案物件來建立一個輸入流物件來讀取檔案。我們首先得使用File()方法來建立一個檔案物件:

File f = new File(“C:/java/hello”);
InputStream f = new FileInputStream(f);

FileOutputStream

該類用來建立一個檔案並向檔案中寫資料。

如果該流在開啟檔案進行輸出前,目標檔案不存在,那麼該流會建立該檔案。

有兩個構造方法可以用來建立FileOutputStream 物件。

使用字串型別的檔名來建立一個輸出流物件:

OutputStream f = new FileOutputStream(“C:/java/hello”)

也可以使用一個檔案物件來建立一個輸出流來寫檔案。我們首先得使用File()方法來建立一個檔案物件:

File f = new File(“C:/java/hello”);
OutputStream f = new FileOutputStream(f);

例項

下面是一個演示InputStream和OutputStream用法的例子:

package Test;
import java.io.*;

/*
 * FileOutputStream
該類用來建立一個檔案並向檔案中寫資料。

如果該流在開啟檔案進行輸出前,目標檔案不存在,那麼該流會建立該檔案。

有兩個構造方法可以用來建立FileOutputStream 物件。

(1)使用字串型別的檔名來建立一個輸出流物件:

OutputStream f = new FileOutputStream("C:/java/hello") 

(2)也可以使用一個檔案物件來建立一個輸出流來寫檔案。我們首先得使用File()方法來建立一個檔案物件:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
*/

public class fileStreamTest {
    public static void main(String[] args) throws IOException {

        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 構建FileOutputStream物件,檔案不存在會自動新建

        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 構建OutputStreamWriter物件,引數可以指定編碼,預設為作業系統預設編碼,windows上是gbk

        writer.append("中文輸入");
        // 寫入到緩衝區

        writer.append("\r\n");
        //換行

        writer.append("English");
        // 重新整理快取衝,寫入到檔案,如果下面已經沒有寫入的內容了,直接close也會寫入

        writer.close();
        //關閉寫入流,同時會把緩衝區內容寫入檔案,所以上面的註釋掉

        fop.close();
        // 關閉輸出流,釋放系統資源

        FileInputStream fip = new FileInputStream(f);
        // 構建FileInputStream物件

        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 構建InputStreamReader物件,編碼與寫入相同

        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 轉成char加到StringBuffer物件中
        }
        System.out.println(sb.toString());
        reader.close();
        // 關閉讀取流

        fip.close();
        // 關閉輸入流,釋放系統資源
    }
}

新浪微博:Hanrovey
163郵箱 : [email protected]

相關推薦

Java--(Stream)檔案(File)IO

Java.io包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。 Java.io包中的流支援很多種格式,比如:基本型別、物件、本地化字符集等等。 一個流可以理解為一個數據的序列。輸入流表示從一個源讀取資料,輸出流表示向一個目標寫資料

Java基礎鞏固-(Stream)檔案(File)IO

Java流(Stream)、檔案(File)和IO Java.io 包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。 Java.io 包中的流支援很多種格式,比如:基本型別、物件、本地化字符集等等。 一個流可以理解為一個數據的序列。輸入流表示從一個源讀取資

JAVA學習記錄——Java (Stream)檔案(File)IO

簡介 Java.io包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。 Java.io包中的流支援很多種格式,比如:基本型別、物件、本地化字符集等等。 一個流可以理解為一個數據的序列。輸入流表示從一

20180803-Java (Stream)檔案(File)IO

  Java 流(Stream)、檔案(File)和IO   下面的程式示範了用read()方法從控制檯不斷讀取字元直到使用者輸入"q"。 // 使用BufferedReader 在控制檯讀取字元 import java.io.* public class BRRead{pub

Java—— (Stream)檔案(File)IO

參考於:https://blog.csdn.net/qq_22063697/article/details/52137369  版權宣告:本文為博主原創文章,轉載請附上博文連結! 一.  什麼是 IO Java中 I/O 操作主要是指使用 Java 進行輸入,輸出操作

《瘋狂Java講義》學習筆記類載入機制與反射

1、類的載入、連線和初始化 JVM和類 同一個JVM的所有執行緒、所有變數都處於同一個程序裡,它們都使用該JVM程序的記憶體區 當系統出現一下集中情況時,JVM程序將被終止: 程式執行到最後正常結束 程式執行到使用Sytem.exit()或Runti

Java從入門到放棄集合框架之TreeMap原始碼

我們經常需要對一些集合按照指定的規則進行排序,比如學生按照學號排序,或者按照成績排序,集合裡面有專門排序的集合,如TreeMap。TreeMap裡面是使用的紅黑樹結構。 構造方法 private final Comparator<? su

Linux學習筆記df命令du命令磁盤分區

xtend du -sh image c2c 浪費 code 服務 分享 bdc 一、df #查看文件系統的使用情況第一列文件系統中tmpfs結尾的都是臨時的文件系統,文件單位默認為kb df -h 自動適應文件大小的單位free可以查看swap的使用情況 df -i 查看

opencv學習之影象顏色通道分離融合

在影象處理時,我們接觸到的彩色以RGB居多,為了分析影象在某一通道上的特性,需要將影象的顏色通道進行分離,或者是在對某一顏色通道處理後重新進行融合。opencv提供了split()函式來進行顏色通道的分離,提供了merge()函式來進行顏色通道的融合。 1.s

作業系統清華大學版筆記死鎖銀行家演算法程序間通訊(直接通訊間接通訊)

死鎖、死鎖模型、死鎖預防和恢復、銀行家演算法 死鎖:一組阻塞的程序(兩個或多個),持有一種資源,等待獲取另一個程序所佔有的資源,而導致誰都無法執行。 由於程序的併發執行引起了死鎖。 死鎖模型 資源型別很多,比如CPU cycles , mem

Java學習記錄(補充八:Date類;Java(Stream),文件(File)IO)

tac hang set .get com 文件 pac 抽象類 格式化 Date類,Calendar類package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; i

Java框架spring Boot學習筆記:log4j介紹

inf alt 技術分享 images 使用 image 詳細 配置文件 -128 功能 日誌功能,通過log4j可以看到程序運行過程的詳細信息。 使用 導入log4j的jar包 復制log4j的配置文件,復制到src下面         3.設置日誌級別    

Java學習總結——java反射機制,利用反射動態創建對象

Java反射 動態創建對象 一.Java反射機制1.什麽是反射:反射就是把Java類中的各種成份影射成一個個的Java對象。例:一個類有:成員變量,方法,構造方法等,包等等信息,利用反射技術可以對一個類進行剖析,把各個組成部分影射成一個個對象。2.Java反射常用類:(1)Class類—可獲取類和類的

java程式設計師菜鳥進階linux基礎入門linux檔案及目錄命令管理

大家都知道,熟悉命令操作的開發人員,Linux作業系統命令操作效率要高於圖形介面的操作,所以瞭解和學習linux基本命令操作是學習linux作業系統的首要任務,本文主要介紹以下四個知識點:   1.      She

java基礎學習總結:Enum 型別的使用介紹

一、Enum 型別的介紹    列舉型別(Enumerated Type) 很早就出現在程式語言中,它被用來將一組類似的值包含到一種型別當中。而這種列舉型別的名稱則會被定義成獨一無二的型別描述符,在這一點上和常量的定義相似。不過相比較常量型別,列舉型別可以為宣告的變

Java程式設計師從笨鳥到菜鳥之Html基礎總結

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java開發筆記幾種運算子的優先順序順序

到目前為止,我們已經學習了Java語言的好幾種運算子,包括算術運算子、賦值運算子、邏輯運算子、關係運算符等基礎運算子,並且在書寫賦值語句時都沒新增圓括號,顯然是默認了先完成算術、邏輯、關係等運算,最後才進行賦值操作。也就是說,在這四類運算子當中,賦值運算子的優先順序最低,那麼其他三種運算

安全程式設計- Java中throwthrows的區別

1.粗淺來說         throw是一個語句丟擲異常,throws是一個方法丟擲異常;         throw不是和try-catch-finally配套使用就是和throws配套使用,而throws可

資料結構的Java實現—— 圖

1、圖的定義 圖通常有個固定的形狀,這是由物理或抽象的問題所決定的。比如圖中節點表示城市,而邊可能表示城市間的班機航線。如下圖是美國加利福利亞簡化的高速公路網:    ①、鄰接:如果兩個頂點被同一條邊連線,就稱這兩個頂點是鄰接的。如上圖 I 和 G 就是鄰接的,而

Java springcloud B2B2C o2o多用戶商城 springcloud架構

數據庫 mvc 路由 col mys 消息總線 pro 彈性 http 通過Spring Cloud構建PC+微信+APP+雲服務的雲商平臺系統,其中包括B2B、B2C、C2C、O2O、新零售、直播電商等子平臺,之前我們講了很多關於Spring Cloud的概念文章,從本節