java基礎-文件與IO

来源:https://www.cnblogs.com/lyh1024/archive/2022/10/09/16772853.html
-Advertisement-
Play Games

java基礎-文件與IO 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 https://www.cnblogs.com/lyh1024/p/16772853.html IO是一個龐大的體系,信息傳遞的通道靠IO,例如:文件讀寫、上傳下載、網路通信等都要用到。 1.File類的基本概念 Fil ...


java基礎-文件與IO


 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 https://www.cnblogs.com/lyh1024/p/16772853.html


 

IO是一個龐大的體系,信息傳遞的通道靠IO,例如:文件讀寫、上傳下載、網路通信等都要用到。

 

1.File類的基本概念

File類:表示文件和目錄路徑名的抽象表示形式

File類可以實現文件的創建、刪除、重命名、得到路徑、創建時間等等。是唯一與文件本身有關的操作類

File類的操作方法

Method 說明
public static final String separator 表示路徑分隔符“ \ ”
public File(String pathname) 構造File類實例,要傳入路徑
public boolean createNewFile() 創建新文件
public boolean delete() 刪除文件
public boolean isDirectory() 判斷給定的路徑是否是文件夾
public boolean isFIle() 判斷給定的路徑是否是文件
public String[] list() 列出文件夾中的文件
public File[] listFiles() 列出文件夾中的所有文件
boolean mkdir() 創建新的文件夾
public boolean renameTo(File dest) 為文件重命名
public long length() 返迴文件大小
String getPath() 路徑名字元串

 

/**
File類的使用
*/
public static void main(String[] args){
//File類表示一個文件或目錄
//“c:\\test\\vince.txt"
//"c:/test/vince.txt"
File f1 = new File("C:/test/vince.txt");
    if(!f1.exists()){
        //判斷f1指向的文件是否存在
        try{
            f1.createNewFile();//創建文件
            System.out.println("文件創建成功")
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    //f1.isFile()是否為文件
    System.out.println("是否為文件夾:"+f1.isDirectory());
    
    File f2 = new File("c:\\test\\my");
    boolean b = f2.delete();//delete()只能刪除空文件夾
    System.out.println(b);
    
    String[] names = f2.list();//列出當前目錄下的所有文件名
    System.out.println(Arrays.toString(names);
                       
    File[] fs = f2.listFiles();//列出當前目錄下的所有文件,以file對象返回
    for(File f : fs){
        System.out.println("length="+f.length());
        System.out.println("name="+f.name());
        System.out.println("相對路徑path="+f.path());
        System.out.println("絕對路徑getAbsolutePath="+f.getAbsolutePath());
        System.out.println("是否為隱藏文件="+f.isHidden());
        System.out.println("是否可讀文件="+f.canRead());
        System.out.println("文件最後修改的時間="+f.lastModified());
        System.out.println("-------------“);
​
    }
     File f3 = new File("temp.txt");
     System.out.println(f3.getPath());
     System.out.println(f3.getAbsolutePath());
​
     File f4 = new File("c:\\test\\dabin");
     f4.mkdirs();
     //重命名與移動文件                      
     //f4.renameTo(new File("C:\\test\\dabin1")) 
     f4.renameTo(new File("c:\\dabin1"));                      
     File f5 = new File("c:\\test\\my");      
    // File[] files = f5.listFiles(new FileFilter(){
    //     public boolean accept(File pathname){
    //        return pathname.getName().endsWith(".txt");
    //   }
    //  }) ;
     File[] files = f5.listFiles((pathname)->pathname.getName().endsWith(".txt"));
     System.out.println("-------");
     for(File f: files){
         System.out.println(f.getName());
     }                      
}
示例
/**
在指定的目錄中查找文件
*/
public class FileDeom2{
    public static void main(String[] args){
        findFile(new File("c:\\Users\\vince\\Downloads"),".jpg");
    }
    //查找文件的方法
    private static void findFile(File target,String ext){
        if(target==null)return;
        //如果文件是目錄
        if(target.isDirectory()){
            File[] files = target.listFiles();
            if(files!=null){
                for(File f : files){
                    findFile(f,ext);//遞歸調用,一層層找,層數太深,會溢出
                }
            }
        }else{
            //此處表示File是一個文件
            String name = target.getName().toLowerCase();
            if(name.endsWith(ext)){
                System.out.println(target.getAbsolutePath());
            }
        }
    }
}

 

2.位元組流

2.1 IO流概述

IO流:輸入輸出流(Input/Output)

流是一組有順序的,有起點和終點的位元組集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱為流

流的本質是數據傳輸,根據數據傳輸特性將流抽象為各種類,方便更直觀的進行數據操作。

 

2.2 IO流的分類

根據處理數據類型的不同分為:字元流和位元組流

根據數據流向不同分為:輸入流和輸出流

位元組是數據傳輸的基本單位,文件內容以位元組為單位存儲

讀文件叫輸入流,從文件中把數據讀到程式使用輸入流

寫文件叫輸出流,從程式中把數據寫到文件使用輸出流

 

2.3 位元組輸出流

OutputStream類定義

  • public abstract class **OutputStream**extends Object implements Closeable,Flushable

此抽象類是表示輸出位元組流的所有類的超類。輸出流接受輸出位元組並將這些位元組發送到InputStream類某個接收器,要向文件中輸出,使用FileOutputStream類

 

2.4 位元組輸入流

InputStream定義:

  • public abstract class **InputStream**extends Object implements Closeable

此抽象類是表示位元組輸入流的所有類的超類

FileInputStream從文件系統中的某個文件中獲得輸入位元組

/**
位元組輸出輸入流
輸出流:超類OutputStream,對文件的輸出流使用子類FileOutputStream
輸入流:超類InputStream,對文件的輸入流使用子類FileInputStream
*/
public class ByteStreamDemo{
​
    private static void in\(){
        //1、確定目標文件
        File file = new File("c:\\test\\vince.txt");
        //2.構建一個文件輸入流對象
        try{
            InputStream in = new FileInputStream(file);
        //3.聲明StringBuilder
            StringBUilder buf = new StringBuilder();
        //4.聲明數組和長度
            byte[] bytes = new byte[1024];//1024個位元組
            int len = -1 ;//表示每次讀取的位元組長度,-1表不存在
        //5.把數據讀入到數組中並返回讀取的位元組數,當不等-1時,表示讀取到數據,等於-1表示文件已經讀完
            while(len = in.read(bytes)!= -1 ){
        //6.根據讀取到的位元組數組,再轉換為字元串內容,添加到StringBilder中
                buf.append(new String(bytes));
            }
        //7.列印內容
            System.out.println(buf);
        //8.關閉輸入流
            in.close();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    
    private static void out(){
        
        //1、確定目標文件
        File file = new File("c:\\test\\vince.txt");
        //2.構建一個文件輸出流對象
        try{
            OutputStream out = new FileOutputStream(file);//每一次執行會覆蓋
            //OutputStream out = new FileOutputStream(file,true);//append為true表示追加內容
​
            //3.輸出的內容是
            String info = "疑是銀河落九天\r\n";//在windows里'\r\n'表示換行
            //String line = System.getProperty("line.separator");//獲取換行符
            //4.把內容寫入到文件
            out.write(info.getBytes())//不能傳字元,要轉換成位元組
            //5.關閉流
            out.close();
            System.out.println("write success...");
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        out();
        in();
    }
}

 

 

有待補充.......

 

2022-10-09  17:07:42


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

-Advertisement-
Play Games
更多相關文章
  • Future模式 【1】Future模式是多線程開發中常見的設計模式,它的核心思想是非同步調用。對於Future模式來說,它無法立即返回你需要的數據,但是它會返回一個契約,將來你可以憑藉這個契約去獲取你需要的信息。 【2】通俗一點就是生產者-消費者模型的擴展。經典“生產者-消費者”模型中消息的生產者不 ...
  • stream是java8新出的抽象概念,他可以讓你根據你期望的方式來處理集合數據,能夠輕鬆的執行複雜的查找、過濾和映射數據等操作。Stream 使用一種類似用 SQL 語句從資料庫查詢數據的直觀方式來提供一種對 Java 集合運算和表達的高階抽象。 ...
  • 數據結構基礎—棧和隊列 一、棧和隊列的基本概念和性質 棧和隊列都是特殊的線性表 對他們的操作有著規定和限制:在插入和刪除時只能對某一端操作 棧:只能在一端進行(先進後出) 隊列:只能在表尾插入,在表頭刪除(先進先出) 二、棧 表頭為棧底,表尾為棧頂 1.棧的基本操作和規則 a.進棧和出棧 進棧:棧頂 ...
  • 垃圾回收器 垃圾回收是釋放掉那些不再被使用的記憶體空間的過程。 換句話說,垃圾回收器會去檢查哪些對象超出範圍並且不會再被引用到,然後它回去釋放掉那些對象占用的記憶體空間。這個過程實在 go 程式運行中以併發的方式去進行的,不是 go 程式執行之前,也不是 go 程式執行之後。go 垃圾回收器實現的說明文 ...
  • 前幾天看報道說: 一位小哥用AI繪畫工具Midjourney生成的作品,在美國科羅拉多州博覽會的藝術比賽中獲得了第一名。 作者表示,他多次調整了輸入的提示詞,生成了100多幅畫作,經過數周的修改和挑選,才選出了三幅最滿意的作品。 下圖就是獲獎作品 之前我玩過DF,還寫過一篇文章➡️AI繪畫 Disc ...
  • python 有許多可視化工具,但本書只介紹Matplotlib。Matplotlib是一種2D的繪圖庫,它可以支持硬拷貝和跨系統的交互,它可以在python腳本,IPython的交互環境下、Web應用程式中使用。該項目是由John Hunter 於2002年啟動,其目的是為python構建MATL ...
  • STL和c++標準庫 標準模板庫STL部分包含在C++標準庫中的軟體庫。 c++標準庫:即以std::開頭,但是部分編譯器廠商也會把STL的內容放在std:: namespace裡面 由於一個常見的誤解,您可能會將C++標準庫視為“STL”,或者將工具鏈中C++標準庫的實現部分視為“STL實現”。 ...
  • IoC容器的實現學習——01 簡介 在以前通常情況下一個簡單的項目一般由兩個及兩個以上的類構成,大多數的類集數據和數據的處理方法於一體,類之間通過依賴彼此的數據和方法實現業務邏輯,這個獲取依賴的過程是自己實現的,導致代碼高度耦合以及難以測試。 所以出現了DI (依賴註入)、IoC (控制反轉) 這些 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...