一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java IO流之原理分類與節點流文件操作詳解

Java IO流之原理分類與節點流文件操作詳解

2022-01-26 12:46葉綠體不忘呼吸 Java教程

流(Stream)是指一連串的數據(字符或字節),是以先進先出的方式發送信息的通道,數據源發送的數據經過這個通道到達目的地,按流向區分為輸入流和輸出流

IO流簡介

I/O是Input/Output的縮寫, I/O技術是非常實用的技術,用于處理設備之間的數據傳輸。如讀/寫文件,網絡通訊等。

Java程序中,對于數據的輸入/輸出操作以“流(stream)” 的方式進行。

java.io包下提供了各種“流”類和接口,用以獲取不同種類的數據,并通過標準的方法輸入或輸出數據。

 

IO流原理

輸入input:讀取外部數據(磁盤、光盤等存儲設備的數據)到程序(內存)中。

輸出output:將程序(內存)數據輸出到磁盤、光盤等存儲設備中。

Java IO流之原理分類與節點流文件操作詳解

 

流的分類

①按操作數據單位不同分為:字節流(8 bit 一般用于非文本文件),字符流(16 bit 一般用于文本文件)

②按數據流的流向不同分為:輸入流,輸出流(相對的)

③按流的角色的不同分為:節點流(直接處理文件),處理流(處理被包含的流)

Java IO流之原理分類與節點流文件操作詳解

 

IO 流體系

Java的IO流共涉及40多個類,實際上非常規則,都是從如下4個抽象基類派生的。
由這四個類派生出來的子類名稱都是以其父類名作為子類名后綴。

Java IO流之原理分類與節點流文件操作詳解

Java IO流之原理分類與節點流文件操作詳解

 

節點流和處理流

節點流:直接從數據源或目的地讀寫數據

Java IO流之原理分類與節點流文件操作詳解

處理流:不直接連接到數據源或目的地,而是“連接”在已存在的流(節點流或處理流)之上,通過對數據的處理為程序提供更為強大的讀寫功能。

Java IO流之原理分類與節點流文件操作詳解

 

節點流操作

讀入以FileReader為例

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
* @Author: Yeman
* @Date: 2021-09-25-16:30
* @Description:
*/
public class FileReaderTest {
  public static void main(String[] args) {
      FileReader fileReader = null;
      try { //一定需要try-catch
          //1、實例化File對象,指明要操作的文件
          File file = new File("IO\\hello.txt");
          //2、提供具體的流
          fileReader = new FileReader(file);
          //3、讀取操作
          int read = fileReader.read(); //空參為一位一位讀取,末尾返回-1
          while (read != -1){
              System.out.print((char) read);
              read = fileReader.read();
          }
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          //4、關閉流
          try {
              if (fileReader != null) { //確保不會因具體流未創建而產生空指針異常
                  fileReader.close();
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
}

Java IO流之原理分類與節點流文件操作詳解

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
* @Author: Yeman
* @Date: 2021-09-25-16:30
* @Description:
*/
public class FileReaderTest {
  public static void main(String[] args) {
      FileReader fileReader = null;
      try { //一定需要try-catch
          //1、實例化File對象,指明要操作的文件
          File file = new File("IO\\hello.txt");
          //2、提供具體的流
          fileReader = new FileReader(file);
          //3、讀取操作
          char[] chars = new char[5];
          //char型數組為參數,該數組相當于一個容器,把讀取放在里面,返回該次讀取的個數,末尾返回-1
          // 最后若不夠,容器后部分仍為上一次取的,前部分則被新的這次取到的覆蓋了
          int length = fileReader.read(chars);
          while (length != -1){
              for (int i = 0; i < length; i++) {
                  System.out.print(chars[i]);
              }
              length = fileReader.read(chars);
          }
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          //4、關閉流
          try {
              if (fileReader != null) {
                  fileReader.close();
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
}

寫出以FileWriter為例

import java.io.*;

/**
* @Author: Yeman
* @Date: 2021-09-25-16:30
* @Description:
*/
public class FileReaderTest {
  public static void main(String[] args) {
      FileWriter fw1 = null; //若硬盤中不存在file,創建之;若存在,內容覆蓋之
      try {
          //1、實例化File對象,指明要寫出的文件
          File file = new File("IO\\hi.txt");
          //2、創建具體的流
          fw1 = new FileWriter(file);
          //FileWriter fw2 = new FileWriter(file,false); //若硬盤中不存在file,創建之;若存在,內容覆蓋之
          //FileWriter fw3 = new FileWriter(file,true); //若硬盤中不存在file,創建之;若存在,內容追加之
          //3、寫出操作
          fw1.write("Hello World!\n",0,5); //寫出“Hello”
          fw1.write("你好,世界!"); //寫出“你好,世界!”
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          //4、關閉流
          try {
              if (fw1 != null) fw1.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
}

實現一個圖片復制(讀入寫出,使用字節流)

import java.io.*;

/**
* @Author: Yeman
* @Date: 2021-09-25-16:30
* @Description:
*/
public class FileReaderTest {
  public static void main(String[] args) {
      FileInputStream fis = null;
      FileOutputStream fos = null;
      try {
          File inFile = new File("IO\\input.jpg");
          File outFile = new File("IO\\output.jpg");

          fis = new FileInputStream(inFile);
          fos = new FileOutputStream(outFile);

          byte[] bytes = new byte[1024]; //通常使用1024,2的10次方
          int length = fis.read(bytes);
          while (length != -1){
              fos.write(bytes,0,length);
              length = fis.read(bytes);
          }
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          try {
              if (fos != null) fos.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
          try {
              if (fis != null) fis.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
}

到此這篇關于Java IO流之原理分類與節點流文件操作詳解的文章就介紹到這了,更多相關Java IO流內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_46653805/article/details/120469928

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 金莲一级淫片aaaaaa | 午夜精品国产自在现线拍 | 性关系视频免费网站在线观看 | 日本高清视频在线的 | 99re热这里只有精品视频 | 母爱成瘾在线观看 | 69av免费视频| 美女尿口羞羞视频 | 精品国产一区二区三区久久影院 | 免费叼嘿视频 | 青春草视频免费观看 | 亚洲精品无码不卡 | 数学老师扒开腿让我爽快 | 亚洲 欧美 清纯 校园 另类 | 国产特级 | 亚洲视频日韩 | 热99re国产久热在线 | 调教小荡娃h | 清纯唯美 亚洲 | 国产福利视频一区二区微拍 | 鬼惨笑小说 | 91porny紧身翘臀 | 精品视频一区二区三区 | 无人影院免费观看 | 久久婷婷丁香五月色综合啪免费 | 国内精品久久久久小说网 | 日本伦理动漫在线观看 | 亚色九九九全国免费视频 | 韩国女主播一区二区视频 | 国产亚洲福利一区二区免费看 | 国产愉拍精品视频手机 | 古代翁熄乩伦小说h | 5278欧美一区二区三区 | 操爽| 午夜无码片在线观看影院 | 亚洲欧美久久婷婷爱综合一区天堂 | 免费看国产精品久久久久 | 日本javaajax| 亚洲女bbwxxxx另类 | a级情欲片在线观看hd | 美女的让男人桶爽网站 |