<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Java入門基礎知識:Java IO輸入/輸出

    時間:2024-09-23 22:55:21 JAVA認證 我要投稿
    • 相關推薦

    Java入門基礎知識:Java IO(輸入/輸出)

      Java中將輸入輸出抽象成流,流通過輸入輸出系統與物理設備連接,盡管與它們鏈接的物理設備不盡相同,所有流的行為具有同樣的方式。今天yjbys小編為大家帶來最新Java入門基礎知識——Java IO(輸入/輸出),希望對同學們學習java基礎知識有所幫助!

    Java入門基礎知識:Java IO(輸入/輸出)

      Java語言中的IO包支持Java的基本I/O(輸入/輸出)系統,包括文件的輸入/輸出。Java所有的I/O機制都是基于數據流進行輸入輸出,這些數據流表示了字符或者字節數據的流動序列。Java的I/O流提供了讀寫數據的標準方法。任何Java中表示數據源的對象都會提供以數據流的方式讀寫它的數據的方法。

      Java I/O基礎流的概念

      java中將輸入輸出抽象成流,流通過輸入輸出系統與物理設備連接,盡管與它們鏈接的物理設備不盡相同,所有流的行為具有同樣的方式。將數據從外部(包括磁盤文件、鍵盤、套接字)讀入到內存中的流稱為輸入流,將從內存寫入到外部設備(控制臺、磁盤文件或者網絡)的稱為輸出流。

      流的分類

      流序列中的數據既可以是未經加工的原始二進制數據,也可以是經一定編碼處理后符合某種格式規定的特定數據。因此Java中的流分為兩種:

      字節流:數據流中最小的數據單元是字節 多用于讀取或書寫二進制數據

      字符流:數據流中最小的數據單元是字符, Java中的字符是Unicode編碼,一個字符占用兩個字節。

      提示

      在最底層,所有的輸入/輸出都是字節形式的。基于字符的流只為處理字符提供方便有效的方法。

      字節流

      字節流的最頂層是兩個抽象類:InputStream和OutputStream,其他關于處理字節的類都是它們的子類,這些子類對不同的外設進行處理,例如磁盤文件,網絡連接,甚至是內存緩沖區。

      抽象類InputStream 和 OutputStream中定義了實現其他流類的關鍵方法read()和write(),它們分別對數據的字節進行讀寫。兩種方法都是抽象方法,被子類重載。

      例1 文件按字節流的方式拷貝

      import java.io.*;

      //byte streams are used to perform input and output of 8-bit bytes

      public class CopyFileByte {

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

      {

      FileInputStream in = null;

      FileOutputStream out = null;

      try {

      in = new FileInputStream("input.txt");

      out = new FileOutputStream("output.txt");

      int c;

      while ((c = in.read()) != -1) {

      out.write(c);

      }

      }finally {

      if (in != null) {

      in.close();

      }

      if (out != null) {

      out.close();

      }

      }

      }

      }

      例1中,上面使用的是文件名來創建FileInoutStream和FileOutputStream,實際上可以還可以使用文件對象來創建輸入輸出流。字節流的每次操作都是一個數據單位——字節,假如input.txt文件中包含 Hello world ,那么它將復制完“H”之后,再復制“e”,接著就是“l”,如此類推直到其結束。in.read()每次從輸入流中讀取一個字節,如果達到文件末尾就返回-1。使用完了,還要關閉這些字節流,調用close()方法。

      File inFile = new File("input.txt");

      File outFile = new File("output.txt");

      FileInputStream in = new FileInputStream(inFile);

      FileOutputStream out = new FileOutputStream(outFile);

      字符流

      java是使用16-bits來存儲字符數據的,涉及到的大多是字符操作,在程序中使用字符流會比字節流更加合適。類似于字節流,字符流的兩個頂層抽象類是Reader和Writer,一下是它們的子類處理字符流。

      類似于字節,字符的抽象類Reader和 Writer中也定義了關鍵方法read()和write(),它們分別對字符進行讀寫。兩種方法也都是抽象方法,被子類重載。

      例2 文件按字符流的方式拷貝

      import java.io.*;

      //Character streams are used to perform input and output for 16-bit unicode

      public class CopyFileCharacter {

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

      {

      FileReader in = null;

      FileWriter out = null;

      try {

      in = new FileReader("input.txt");

      out = new FileWriter("output.txt");

      int c;

      while ((c = in.read()) != -1) {

      out.write(c);

      }

      }finally {

      if (in != null) {

      in.close();

      }

      if (out != null) {

      out.close();

      }

      }

      }

      }

      和例1對比發現,只有聲明的I/O流的類名不同,這里使用的FileReader和FileWriter,它們操作的最小單位是一個字符16bits,而FileInputStream和FileOutputStream最小單位則是一個字節8bits.

      java 自定義的標準流

      標準輸入流 System.in 讀取標準輸入設備數據,例如鍵盤輸入(默認),其類型是InputStream,三個重要的讀入方法:

      int read() 從輸入流中讀取數據的下一個字節,返回ASCII碼。若,返回值=-1,說明沒有讀取到任何字節讀取工作結束

      int read(byte[] b) 從輸入流中讀取一定數量的字節,并將這些數據存儲到緩沖區數組b中

      int read(byte[] b, int off, int len) 將輸入流中最多len個字節讀入到字節數組b中

      標準輸出流 System.out 向標準的輸出設備寫入數據,默認情況下指控制臺,其類型是PrintStream,包含兩個重要的方法:print()(不換行)和println()(輸出之后換行)

      標準錯誤流 System.err 默認也是控制臺,類型和System.out相同是PrintStream,

      提示

      這些流都有默認的設備,但它們可以重定向到任何兼容的輸入/輸出設備。

      控制臺的輸入和輸出

      正如上面所介紹的,控制臺的輸入、輸出是由System.in和System.out來完成的。目前,讀取控制臺的輸入輸出的首選方法的是字符流,但完成控制臺輸入的唯一方法是字節流,因而java提供了InputStreamReader和OutputStreamWriter將字節流轉化成字符流。BufferedReader是緩沖輸入字符流。正如我們在例子中看到的,java允許使用System.out向控制臺寫數據,但在實際的項目中,它推薦使用PrintWriter,它是基于字符的。

      例3 控制臺輸入字符

      import java.io.*;

      class ConsoleInOut{

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

      char c;

      InputStreamReader isr = new InputStreamReader(System.in); //①

      BufferedReader br = new BufferedReader(isr); //②

      System.out.println("Enter characters, 'q' to exit.");

      c=(char)br.read();

      while(c != 'q'){

      System.out.println(c);

      c = (char) br.read();

      } ;

      }

      }

      輸出:

      D:\java>java ConsoleInOut

      Enter characters, 'q' to quit.

      Hello world!

      H

      e

      l

      l

      o

      w

      o

      r

      l

      d

      !

      q

      例3 中的①和②兩行創建了一個與鍵盤相連的BufferedReader對象,這里使用read()方法來讀取字符,當到達流的末尾時返回-1,輸入q退出程序。輸出我們使用的是println()方法,每次輸出后都換行。

      控制臺輸入字符我們使用的是read()方法,輸入字符串的話我們可以使用readLine()方法,和輸入字符非常相似,只需要將例3中的read()方法換成readLine()方法即可,同時將改為String類型,由于比較簡單,此處不再贅述。

      提高

      我們來看java工具包中的輸入類Scanner。

      創建Scanner類的對象時,需要用System.in 作為它的參數,也可以將Scanner看作是System.in對象的支持者,System.in取得用戶輸入的內容后,交給Scanner來作一些處理.

      Scanner類中提供了多個方法:next():取得一個字符串;

      hasNext():是否還有輸入;

      nextInt():將取得的字符串轉換成int類型的整數;

      nextFloat():將取得的字符串轉換成float型;

      nextBoolean():將取得的字符串轉換成boolean型;

      提示

      使用Scanner非常方便,但也有不足,Scanner取得輸入的依據是空格符,包括空格鍵,Tab鍵和Enter鍵.當按下這其中的任一鍵 時,Scanner就會返回下一個輸入. 當你輸入的內容中間包括空格時,顯然,使用Scanner就不能完整的獲得你輸入的字符串.

      例4 Scanner

      public static void main(String[] args){

      Scanner sc = new Scanner(new BufferedInputStream(System.in));

      while(sc.hasNext()){

      int m = sc.nextInt();

      String str = sc.next();

      for(int i=0; i

      System.out.println(sc.nextInt());

      }

      }

      }

      正如我們在例子中看到的,java允許使用System.out向控制臺寫數據,但在實際的項目中,它推薦使用PrintWriter,它是基于字符的。

      PrintWriter支持所有類型(包括Object)的print( )和println( )方法,這樣,我們就可以像用System.out那樣用這些方法。如果遇到不同類型的情況,PrintWriter方法調用對象的toString( )方法并打印結果。

      例5 控制臺的輸出

      import java.io.*;

      public class TestAbstract {

      public static void main(String args[]) {

      PrintWriter printerWriter = new PrintWriter(System.out, true);

      printerWriter.println("Hello World!");

      int i = -10;

      printerWriter.println(i);

      double d = 0.00003;

      printerWriter.println(d);

      }

      }

      D:\java>java TestAbstract

      Hello World!

      -10

      3.0E-5

      例5 中的new PrintWriter(System.out, true)新建了一個PrinterWriter對象,指定輸出流為System.out,true是每一行輸出之后進行刷新。

      文件的輸入輸出

      文件

      文件File 位于java.io包中,用于描述文件和目錄的操作。創建文件對象如下:

      File file = new File("input.txt");//文件位于當前目錄下

      File file = new File("/home/user","input.txt");//文件位于/home/user目錄下

      除了上述的File構造方法之外,還有很多和File相關的方法如下:

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

      mkdir() 創建目錄

      isFile()/isDirectory() 判斷是文件還是目錄

      delete() 刪除文件

      getPath() 獲取文件或者目錄的路徑

      list() 將目錄中所有文件名保存在字符串數組中返回

      例6 文件相關操作

      import java.io.*;

      public class TestAbstract {

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

      File dir = new File("D:/java");

      File file1 = new File(dir, "fileTest001.txt");

      File file2 = new File(dir, "fileTest002.java");

      if (!dir.exists())

      dir.mkdir();

      if (!file1.exists())

      file1.createNewFile();

      if (!file2.exists())

      file2.createNewFile();

      System.out.println("file1's AbsolutePath= " + file1.getAbsolutePath());

      System.out.println("file2's AbsolutePath= " + file2.getAbsolutePath());

      System.out.println("file1 Canread=" + file1.canRead());

      System.out.println("file1's len= " + file1.length());

      String[] fileList = dir.list();

      System.out.println("there are " + fileList.length + " file(s) in D:");

      }

      }

      運行結果:

      D:\java>java TestAbstract

      file1's AbsolutePath= D:\java\fileTest001.txt

      file2's AbsolutePath= D:\java\fileTest002.java

      file1 Canread=true

      file1's len= 0

      there are 133 file(s) in D:

      I/O

      文件處理最常用的兩個流是FileInputStream和FileOutputStream,初始化的形式為:

      FileInputStream(String fileName) throws FileNotFoundException

      FileOutputStream(String fileName) throws FileNotFoundException

      或者

      FileInputStream(File fileName) throws FileNotFoundException

      FileOutputStream(File fileName) throws FileNotFoundException

      讀文件使用的是FileInputStream中定義的read()方法,它有很多種形式,具體可參考FileInputStream,寫文件是使用FileOutputStream中定義的write()方法,詳細參考FileOutputStream

      提示

      當你對文件的操作結束后,需要調用close( )來關閉文件。

    【Java入門基礎知識:Java IO輸入/輸出】相關文章:

    java的輸入語句小結03-27

    sun認證考試:Java.io的使用01-08

    Java的基礎知識07-27

    Java基礎知識詳解12-07

    JAVA認證基礎知識:Java獲取當前的系統時間03-18

    Java認證基礎知識:java字符串轉化整型問題03-18

    java必備基礎知識點03-07

    Java基礎知識點歸納03-05

    Java基礎知識大集合03-14

    主站蜘蛛池模板: 亚洲精品A在线观看| 国产精品毛片无遮挡| 精品三级AV无码一区| 国产精品国产三级国产| 国产日韩精品欧美一区喷水| 国产亚洲精品a在线观看 | 国产精品九九九久久九九| 亚洲精品国产成人影院| 国产精品女人呻吟在线观看| 国产精品自拍一区| 精品熟女少妇av免费久久| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 精品久久国产一区二区三区香蕉 | 亚洲精品无码午夜福利中文字幕 | 国产精品人成在线播放新网站| 色哟哟国产精品免费观看| 国产福利精品视频自拍| 国产精品成人观看视频国产| 无码囯产精品一区二区免费| 亚洲欧美日韩国产成人精品影院 | 国产精品免费久久| 亚洲精品高清国产一久久| 国产精品国产精品国产专区不卡 | 午夜精品久久久久久久无码| 国产精品一区二区三区免费| 99在线精品免费视频| 亚洲精品国产成人专区| 久久青青草原国产精品免费| 国产成人精品日本亚洲直接| 国产精品白浆在线观看免费| 久久久久久九九99精品| 日韩精品久久久久久久电影蜜臀| 亚洲日韩精品A∨片无码| 日韩在线精品一二三区| 亚洲&#228;v永久无码精品天堂久久 | 精品无人区麻豆乱码1区2区 | 国产午夜精品久久久久免费视 | 国产日韩精品在线| 国产精品久久久久久影院| 国产成人精品日本亚洲11| 精品国产一区二区三区免费|