day34-IO流01

来源:https://www.cnblogs.com/liyuelian/archive/2022/09/09/16673686.html
-Advertisement-
Play Games

IO流01 1.文件基礎知識 什麼是文件? 文件,我們並不陌生。文件是保存數據的地方。比如大家經常使用的word文檔,txt文件,excel文件等,都是文件。它既可以保存一張圖片,也可以保存聲音、視頻…… 文件流 文件在程式中是以流的形式來操作的: 流:數據在數據源(文件)和程式(記憶體)之間經歷的路 ...


IO流01

1.文件基礎知識

什麼是文件?

文件,我們並不陌生。文件是保存數據的地方。比如大家經常使用的word文檔,txt文件,excel文件等,都是文件。它既可以保存一張圖片,也可以保存聲音、視頻……

  • 文件流

    文件在程式中是以流的形式來操作的:

    image-20220908232444746

流:數據在數據源(文件)和程式(記憶體)之間經歷的路徑

輸入流:數據從數據源(文件)到程式(記憶體)之間的路徑

輸出流:數據從程式(記憶體)到數據源(文件)之間的路徑

2.常用的文件操作

2.1創建文件

  • 創建文件對象相關構造器和方法

    相關方法:

    new File(String pathname)//根據路徑構建一個File對象
    new File(File patent,String child)//根據父目錄文件+子路徑構建
     new File(String parent,String child)//根據父目錄+子路徑構建
    

例子:應用案例演示:FileCreate

package li.io.file;

import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;

//演示創建文件
public class FileCreate {
    public static void main(String[] args) {
        
    }

    //方式一 new File(String pathname)//根據路徑構建一個File對象
    @Test
    public void creat01() {
        String filePath = "d:\\news1.txt";
        File file = new File(filePath);//在記憶體中創建一個File對象
        try {
            file.createNewFile();//創建文件
            System.out.println("文件創建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //方式二 new File(File patent,String child)//根據父目錄文件+子路徑構建
    //例如:d:\\news.txt,父目錄文件就是 d:\\
    @Test
    public void creat02() {
        File parenFile = new File("d:\\");
        String fileName = "news2.txt";
        //這裡的file對象,在java程式中只是一個java對象而已
        //只有執行了createNewFile方法,才會真正地在磁碟創建文件
        File file = new File(parenFile, fileName);
        try {
            file.createNewFile();//創建文件
            System.out.println("創建成功~");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //方式三 new File(String parent,String child)//根據父目錄+子路徑構建
    @Test
    public void creat03() {
        String parentPath = "d:\\";  //這裡的兩個 \\,其中有一個是轉義符號,或者直接用 d:/
        String filePath = "news3.txt";
        File file = new File(parentPath, filePath);
        try {
            file.createNewFile();
            System.out.println("創建文件成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
image-20220909154552484

2.2獲取文件的相關信息

  • getName()
  • getAbsolutePath()
  • getParent()
  • length()
  • exists()
  • isFile()
  • isDirectory()

例子:

package li.io.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class FileInformation {
    public static void main(String[] args) {

    }

    //獲取文件的信息
    @Test
    public void info() {
        //先創建文件對象
        File file = new File("d:\\news1.txt");

        //調用相應方法,得到對應信息

        //文件名字-getName()
        System.out.println("文件名字="+file.getName());//文件名字=news1.txt

        //文件的絕對路徑-getAbsolutePath()
        System.out.println("文件的絕對路徑="+file.getAbsolutePath());//文件的絕對路徑=d:\news1.txt

        //文件的父級目錄-getParentFile()
        System.out.println("文件的父級目錄="+file.getParentFile());//文件的父級目錄=d:\

        //文件的大小(位元組)-length()
        System.out.println("文件的大小(位元組)="+file.length());//文件的大小(位元組)=12 Hello World!
        
        //文件是否存在-exists()
        System.out.println("文件是否存在="+file.exists());//文件是否存在=true
        
        //是否為文件-isFile()
        System.out.println("是否為文件="+file.isFile());//是否為文件=true

        //是否為目錄-isDirectory()
        System.out.println("是否為目錄="+file.isDirectory());//是否為目錄=false

    }
}

2.3目錄的操作和文件刪除

  • mkdir():創建一級目錄

  • mkdirs():創建多級目錄

  • delete():刪除空目錄或者文件

例子:

package li.io.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class Directory_ {
    public static void main(String[] args) {

    }

    //判斷 d:\\news1.txt是否存在,如果存在就刪除
    @Test
    public void m1() {
        String filePath = "d:\\news1.txt";
        File file = new File(filePath);
        if (file.exists()) {
            if (file.delete()) {
                System.out.println(filePath + "刪除成功");
            } else {
                System.out.println("刪除失敗...");
            }
        } else {
            System.out.println("該文件不存在...");
        }
    }

    //判斷 d:\\demo02 是否存在,存在就刪除,否則就提示不存在
    //這裡我們需要體會到,在java中,目錄也被當做文件
    @Test
    public void m2() {
        String filePath = "d:\\demo02";
        File file = new File(filePath);
        if (file.exists()) {
            if (file.delete()) {
                System.out.println(filePath + "刪除成功");//d:\demo02刪除成功(先在d盤下創建一個名為 demo02的目錄)
            } else {
                System.out.println("刪除失敗...");
            }
        } else {
            System.out.println("該目錄不存在...");
        }
    }

    //判斷d:\\demo\\a\\b\\c目錄是否存在,如果存在就提示已經存在,否則創建
    @Test
    public void m3() {
        String directoryPath = "d:\\demo\\a\\b\\c";
        File file = new File(directoryPath);
        if (file.exists()) {
            System.out.println("該目錄已經存在");
        } else {
            if (file.mkdirs()) {//多級目錄使用 mkdirs方法,一級目錄使用 mkdir
                System.out.println(directoryPath + "創建成功...");
            } else {
                System.out.println("創建失敗...");
            }
        }
    }
}

3.IO流原理及流的分類

3.1Java IO流原理

  1. I/O是Input/Output的縮寫,I/O技術是非常實用的技術,用於處理數據傳輸。如讀/寫文件,網路通訊等
  2. Java程式中,對於數據的輸入/輸出操作以”流(Stream)“的方式進行
  3. java.io包下提供了各種“流”類和介面,用以獲取不同種類的數據,並通過方法輸入或輸出數據
  4. 輸入input:讀取外部數據(磁碟、光碟等存儲設備的數據)到程式(記憶體)中
  5. 輸出output:將程式(記憶體)數據輸出到磁碟、光碟等存儲設備中

3.2流的分類

  • 按操作數據單位不同分為:位元組流(8bit)、字元流(按字元)

    位元組流適用於二進位文件,字元流適用於文本文件

  • 按數據流的流向不同分為:輸入流、輸出流

  • 按流的角色不同分為:節點流、處理流(也叫包裝流)

抽象基類 位元組流 字元流
輸入流 InputStream Reader
輸出流 OutputStream Writer

202209091740

1)Java的IO流共涉及到40 多個類,實際上非常規則,都是從如上4個抽象基類派生的

InputStream、OutputStream、Reader、Writer都是抽象類,在使用的時候要去創建它們的實現子類

2)由這四個類派生出來的子類名稱都是以其父類名作為子類名尾碼

4.常用的類

InputStream抽象類是所有類位元組輸入流的超類

InputStream常用的子類:

  1. FileInputStream:文件輸入流

  2. BufferedInputStream:緩衝位元組輸入流

  3. ObjectInputStream:對象位元組輸入流

4.1FileInputStream


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

-Advertisement-
Play Games
更多相關文章
  • 橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 ...
  • 一個菜鳥的設計模式之旅,使用 Golang 實現。本節實現策略模式與簡單工廠。編程旅途是漫長遙遠的,在不同時刻有不同的感悟,本文會一直更新下去。 ...
  • 一個菜鳥的設計模式之旅,使用 Golang 實現。本節實現代理模式。小明很喜歡同班的雪怡,但是過於靦腆的他不敢當面說。打算通過手機(代理)跟雪怡表白! ...
  • 一個菜鳥的設計模式之旅,使用 Golang 實現。本節實現裝飾模式。小明和小王去吃沙縣小吃,各自喜歡不同的搭配,需要考慮每個人飲食喜好不同,隨時可能的變化。 ...
  • 2022-09-09 1、閉包的作用: 可以保存外部函數的變數 2、閉包的形成條件 (1)函數嵌套 (2)內部函數使用了外部函數的變數或者參數 (3)外部函數返回內部函數,這個使用了外部函數變數的內部函數稱為閉包 3、典例 1 # 函數嵌套 2 def func_out(): 3 # 外部函數 4 ...
  • 目錄 一.OpenGL 飽和度調節效果演示 1.IOS 飽和度演示效果 2.Windows OpenGL ES 飽和度演示效果 3.Windows OpenGL 飽和度演示效果 二.OpenGL 飽和度調節源碼下載 1.IOS Object-C 版本 2.Windows OpenGL ES 版本 3 ...
  • 一個菜鳥的設計模式之旅,使用 Golang 實現。本節實現解釋器模式。程式可按需載入用戶自定義的.work尾碼文件,將每行的命令解釋為具體行為。喵叫幾次、進程休眠幾秒、輸出範圍內隨機數、運行另外的work文件。 ...
  • #一、format的基本玩法 ##🚀🚀一、什麼是format format是字元串內嵌(字元串內嵌:字元串中再嵌套字元串,加入雙引號或單引號)的一個方法,用於格式化字元串。以大括弧{}來標明被替換的字元串 ##🚀🚀format玩法一:按順序輸出(按照{}的順序依次匹配括弧中的值) >>>s ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...