JAVA基礎-輸入輸出流

来源:https://www.cnblogs.com/hanggai/archive/2019/03/24/10591182.html
-Advertisement-
Play Games

一,File類:文件的創建和刪除 1.File(String pathname):pathname是指路徑名稱。用法 File file = new File("d:/1.txt "); 2.File(String parent, String child):parent是父路徑字元串,child是 ...


 

一,File類:文件的創建和刪除

1.File(String pathname):pathname是指路徑名稱。用法 File file = new File("d:/1.txt ");

2.File(String parent, String child):parent是父路徑字元串,child是子路徑字元串。用法:File file = new File(" D:/", " letter.txt");

3.File(File f, String child)File file = new file();

如果當前目錄里不存在名為word的文件,File類對象可以調用createNewFile()方法創建一個名為word的新文件。

還可以用文件對象的delete()方法刪除掉文件。

public class FileTest {
    public static void main(String[] args) {
    
        File file = new File("weord.txt");  //創建文件對象,在當前目錄
        if(file.exists()) {
            file.delete();
            System.out.println("文件已刪除");
        }else{
            try{                            //try語句塊捕捉可能出現的異常
                file.createNewFile();       //在當前目錄下創建文件
                System.out.println("文件已創建");
            }catch(Exception e) {           
            e.printStackTrace();    //
        }
        }
    }
}

二,獲取文件信息:都用特定方法獲取文件的各類信息。

getName():獲取文件的名稱   length():獲取文件的長度   getAbsolutePath():獲取文件的絕對路徑   getParent():獲取文件的父路徑   lastModified():獲取文件最後修改時間

canread():判斷是否可讀   canwrite():判斷是否可寫   exits():判斷是否存在   isFile():判斷是否存在   isDirectory():判斷是否是一個目錄   isHidden():判斷是否是隱藏文件 

我們把上面創建和刪除的例子稍微改一下:

public class FileTest {
    public static void main(String[] args) {
    
        File file = new File("word.txt");  //創建文件對象,在當前目錄
        if(file.exists()) {                 //獲取各類信息
            String name = file.getName();   
            System.out.println("文件名稱是:"+ name);
            long length = file.length();
            System.out.println("文件長度是:"+ length);
            boolean hidden = file.isHidden();
            System.out.println("文件是隱藏文件嗎?"+ hidden);
            String path = file.getAbsolutePath();
            System.out.println("文件的絕對路徑是:"+ path);
            boolean read = file.canRead();
            System.out.println("文件是否可讀?"+ read);
        }else{
            try{                            //try語句塊捕捉可能的異常
                file.createNewFile();       //創建文件
                System.out.println("文件已創建");
            }catch(Exception e) {           
            e.printStackTrace();    //
        }
        }
    }
}

一,文件輸入/輸出流 :FileInputStreamFileOutputStream

程式運行期間的大部分數據都在記憶體中進行操作,當程式結局了或者關閉後,這些數據都會消失。那麼能不能把這些數據都永久的保存下來呢?

答案是肯定的:用文件輸入/輸出流與指定的文件建立連接,把數據永久性的保存到文件里

FileInputStream和FileOutputStream類都用來操作磁碟文件。前者具有基本的文件寫入能力,後者有基本的文件讀取能力。

FileInputStream有兩種構造方法:

1.FileInputStream(String name):使用給定的文件名name創建一個FileInputStream對象。

2.FileInputStream(File file):這個構造方法允許在把文件連接輸入流之前對文件做進一步分析。

FileOutputStream類有前者相同的參數構造方法。註意到是:創建一個FileInputStream對象時,可以指定不存在的文件名,但此文件不能是一個已經被其他程式打開的文件。

註意:FileInputStream類和FileOutputStream類都只提供了對位元組位元組數組的讀取方法。漢字在文件中占用兩個位元組,所以讀取不好會出現亂碼。(所以下麵提到的字元流比位元組流更為簡便)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileTest {
    public static void main(String[] args) {
    
        File file = new File("word.txt");  //創建文件對象,在當前目錄
        try {
            FileOutputStream out = new FileOutputStream(file);//創建FileOutputStream類對象
            byte buy[] = "我有java課,在每周一的一二節。".getBytes();//創建數組存放字元串的二進位
            out.write(buy);                //把數組中的信息寫入到文件里
            out.close();                //把流關閉
        }catch(Exception e){
            e.printStackTrace();
        }
        try {
            FileInputStream in = new FileInputStream(file);//創建FileIntputStream類對象
            byte byt[] = new byte[1024];          //創建數組,定義記憶體大小
            int len = in.read(byt);                //獲取寫入信息的長度    
            System.out.println("文件中的信息是:"+ new String(byt, 0, len));//把文件中的信息輸出
            in.close();                        //關閉流
        }catch(Exception e){
            e.printStackTrace();
        }
}
}

雖然java在程式結束時自動關閉所有打開的流,但是當使用完流後,顯示地(主動的)關閉所有打開的流是個好習慣。

 

二,FileReaderFileWriter類(字元流)

FileReader和FileWriter類 對應了FileInputStream和FileOutputStream類。FileReader流順序地讀取文件,只要不關閉流,每次調用read()方法就順序地讀取源中其餘內容,直到源的末尾或流被關閉。

 

三,帶緩存的輸入/輸出流:BufferInputStreamBufferOutputStream

緩存是I/O的一種性能優化。緩存流為I/O流增加了記憶體緩存區。有了緩存區,使得在流上執行skip(), mark(), reset()等方法。

BufferInputStream類可以對所有InputStream類進行帶緩存區的包裝以達到性能的優化。有兩個構造方法:

1.BufferInputStream(InputStream in):創建一個帶有32個位元組的緩存區。

2.BufferInputStream(InputStream in, int size):按指定的大小創建緩存區。

從構造方法能看出來:BufferInputStream對象位於InputStream類對象之前。 所以位元組數據讀取文件的過程是:文件 --> InputStream --> BufferInputStream --> 目的地

一個最優的緩存區的大小取決於所在的操作系統,可用的記憶體空間,機器配置。

 

使用BufferOutputStream輸出信息和OutputStream輸出信息完全一樣,不過BufferOutputStream有一個flush()方法來把緩存區的信息強制輸出完。

1.BufferInputStream(InputStream in):創建一個帶有32個位元組的緩存區。

2.BufferInputStream(InputStream in, int size):按指定的大小創建緩存區。

2019-03-24         未完,  過兩天補。

 


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

-Advertisement-
Play Games
更多相關文章
  • Sentry(直譯為:哨兵)是一個開源錯誤跟蹤服務,幫助開發人員實時監控和修複崩潰 Sentry本質上是一種幫助您實時監控和修複崩潰的服務 1. 安裝客戶端SDK 這裡我們安裝Java平臺的SDK,而且使用logback的方式集成 https://docs.sentry.io/clients/jav ...
  • 前言 開心一刻 那年去相親,地點在飯店裡,威特先上了兩杯水,男方紳士的喝了一口,咧嘴咋舌輕放桌面,手撫額頭閉眼一臉陶醉,白水硬是喝出了82年拉菲的感覺。如此有生活情調的幽默男人,果斷拿下,相處後卻發現他比較木訥,問他為什麼那天喝水那麼有趣,他仰頭道:鬼知道那杯水怎麼那麼燙啊! 是什麼 Factory ...
  • 摘要:本文使用了7中方法實現在多線程中讓線程按順序運行的方法,主要目的是讓讀者對多線程的使用有更深刻的瞭解。 ...
  • 讀了一本還不錯的書「編寫高質量代碼改善 Python 程式的 91 個建議」,大多數的建議是真心不錯,我雖然寫python也有3年多了,但是有些地方確實沒去註意過,特地整理了一下,給大家參考。 我已經打包好了一份電子書,有興趣的可以關註公眾號:**Python專欄**。後臺回覆:**91個建議**... ...
  • 原文鏈接:Learn C++ Multi-Threading in 5 Minutes C++14的新的多線程架構非常簡單易學,如果你對C或者C++很熟悉,那麼本文非常適合你。作者用C++14作為基準參考,但是所介紹的東西在C++17中也依然適用。本文只介紹基本的架構,在讀完本文後你應該也可以自己編 ...
  • 前提介紹: 本人是一名大三學生,主要使用C++開發,興趣是高性能的伺服器方面。 網路開發離不開網路庫,所以今天開始學一個新的網路庫,陳老師的muduo庫 我參考的書籍就是陳老師自己關於muduo而編著這本《linux多線程伺服器編程》 為什麼選擇muduo網路庫: 我當初選擇muduo網路庫有三個方 ...
  • 簡潔的web框架Bottle 簡介 Bottle是一個非常簡潔,輕量web框架,與django形成鮮明的對比,它只由一個單文件組成,文件總共只有3700多行代碼,依賴只有python標準庫。但是麻雀雖小五臟俱全,基本的功能都有實現,很適合做一些小的web應用 開始使用 首先使用pip install ...
  • 超級開心啊!!!!!!!!!!!!! win10 打開cmd Installing with get-pip.py To install pip, securely download get-pip.py. [1]: curl https://bootstrap.pypa.io/get-pip.py ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...