Java基礎(十二)IO輸入輸出

来源:https://www.cnblogs.com/zt19994/archive/2018/03/02/8489598.html
-Advertisement-
Play Games

一、IO 概述 1、IO 概念 IO:I 代表 Input 輸入;O 代表 Output 輸出。 Java 中 IO 是以流為基礎進行輸入輸出,所有的數據被串列化(保存)寫入輸出流,或者從輸入流讀入。 註:數據串列化指把對象的狀態以特定的形式(比如 byte[])保存到流,通過流的方式寫入。 2、I ...


一、IO 概述

1、IO 概念

  IO:I 代表 Input 輸入;O 代表 Output 輸出。

  Java 中 IO 是以流為基礎進行輸入輸出,所有的數據被串列化(保存)寫入輸出流,或者從輸入流讀入。

  註:數據串列化把對象的狀態以特定的形式(比如 byte[]保存到通過流的方式寫入

2、IO 的作用

  1、文本文件,通過特定方法能夠把數據寫到文件,也能夠讀取出文件中的內容。

  2、把信息保存到磁碟文件中。

3、Java 操作文件

1、創建 File 對象方式

  測試創建文件的三種方式:

 1 import org.junit.Test;
 2 
 3 import java.io.File;
 4 
 5 /**
 6  * @author zt1994
 7  * @date 2018/3/2 10:56
 8  */
 9 public class CreateFile {
10     
11     /**
12     * 測試創建文件的三種方式,僅僅在程式中創建File對象
13     */
14     @Test
15     public void testCreateFile(){
16         //1、File(String pathname) 通過將給定路徑名字元串轉換為抽象路徑名來創建一個新 File 實例。
17         File file = new File("test1.txt");  //相對路徑(相對於當前工程)
18         File file1 = new File("D:\\file\\test1.txt");//絕對路徑
19 
20         //2、File(String parent, String child) 根據 parent 路徑名字元串和 child 路徑名字元串創建一個新 File 實例。
21         File file2 = new File("D:\\file\\", "test2.txt");
22 
23         //3、File(File parent, String child) 根據 parent 抽象路徑名和 child 路徑名字元串創建一個新 File 實例。
24         File file3 = new File(new File("D:\\file\\"), "test3.txt");
25 
26         System.out.println(file);  //test1.txt
27         System.out.println(file1);  //D:\file\test1.txt
28         System.out.println(file2);  //D:\file\test2.txt
29         System.out.println(file3);  //D:\file\test3.txt
30     }
31 }

2、創建刪除文件和文件夾

1、創建文件

 1 import org.junit.Test;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 /**
 7  * @author zt1994
 8  * @date 2018/3/2 11:16
 9  */
10 public class CreateNewFile {
11     
12     /**
13      * 在磁碟上面創建文件
14      * 1、創建文件的路徑必須存在,否則拋出異常
15      * 2、如果文件已經存在,返回false
16      * 3、此方法只能創建文件,不能創建文件夾
17      */
18     @Test
19     public void testCreateNewFile() throws IOException {
20         File file1 = new File("D:\\test.txt");//絕對路徑
21         boolean b = file1.createNewFile();
22         System.out.println(b);
23     }
24 }

 2、創建和刪除文件夾

  測試創建和刪除文件夾:

 1 import java.io.File;
 2 
 3 /**
 4  * @author zt1994
 5  * @date 2018/3/2 11:27
 6  */
 7 public class CreateDir {
 8     /**
 9      * 測試和刪除創建文件夾
10      */
11     @Test
12     public void testMakeDir(){
13         //創建文件夾
14         File dir = new File("E:\\testIo");
15         System.out.println(dir);
16         //1、創建單層文件夾
17         boolean mkdir = dir.mkdir();
18         System.out.println(mkdir);
19 
20         //2、創建多層文件夾
21         File dirs = new File("E:\\Demo\\test\\file");
22         boolean mkdirs = dirs.mkdirs();
23         System.out.println(mkdirs);
24         boolean deleteDirs = dirs.delete();  //刪除
25         System.out.println(deleteDirs);
26 
27         //刪除文件夾 public boolean delete()
28         boolean delete = dir.delete();
29         System.out.println(delete);
30     }
31 }

3、其他常用方法

  boolean exists() 測試文件或者目錄是否存在;

  String getName() 得到文件或者目錄的名稱;

  String getParent() 返回此抽象路徑名父目錄的路徑名字元串;如果此路徑名沒有指定父目錄,則返回 null。

  boolean isFile() 測試是否是一個文件;

  boolean isDirectory 測試是否一個目錄;

3、刪除文件夾目錄的全部內容(遞歸刪除)

 1 import org.junit.Test;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 public class TestDeleteAll {
 7     /**
 8      * 刪除文件夾內所有文件,遞歸刪除
 9      */
10     @Test
11     public void testDeleteAll(){
12         //創建一個多層文件夾
13         File file = new File("E:\\Demo\\test\\file");
14         file.mkdirs();
15 
16         File file1 = new File("E:\\Demo");
17         deleteAll(file1);
18 
19     }
20 
21     //刪除指定目錄下所有文件
22     public static void deleteAll(File file){
23         if (file.isFile() || file.list().length==0){
24             file.delete();
25         }else {
26             File[] files = file.listFiles();
27             for (File f:files){
28                 deleteAll(f);  //調用方法自身
29                 f.delete();
30             }
31         }
32     }
33 }

 二、IO 流讀寫文件

1、IO 流分類

1、按流動方向分類

  輸入流和輸出流,流動方向是相對的。

2、按數據的單位分類

  位元組流和字元流。

  測試 IO 流代碼:

  1 import org.junit.Test;
  2 
  3 import java.io.*;
  4 
  5 /**
  6  * 輸出流和輸入流程測試
  7  */
  8 public class TestIoStream {
  9     /**
 10      * 1.讀取單個字元和字元轉換
 11      */
 12     @Test
 13     public void test1() throws IOException {
 14         //創建文件對象
 15         File file = new File("f1.txt");
 16 
 17         FileInputStream fileInputStream = new FileInputStream(file);
 18 
 19         int i = fileInputStream.read();
 20         System.out.println(i);
 21 
 22         //字元編碼轉換
 23         char x = (char) i;
 24         System.out.println(x);
 25     }
 26 
 27 
 28     /**
 29      * 2.讀取多個字元
 30      */
 31     @Test
 32     public void test2() throws Exception {
 33         File file = new File("f1.txt");
 34         FileInputStream fileInputStream = new FileInputStream(file);
 35 
 36         byte[] fs = new byte[(int) file.length()];
 37         while (fileInputStream.read(fs) != -1){
 38             System.out.println(new String(fs));
 39             for (byte b: fs){
 40                 System.out.print((char) b);
 41             }
 42         }
 43 
 44         fileInputStream.close();
 45     }
 46 
 47 
 48     /**
 49      * 3.輸出流,會覆蓋
 50      * @throws IOException
 51      */
 52     @Test
 53     public void test3() throws IOException {
 54         File file = new File("f1.txt");
 55 
 56         FileOutputStream fileOutputStream = new FileOutputStream(file);
 57 
 58         String str = "你好,世界!";
 59 
 60         //獲取字元串數組對象
 61         byte[] bytes = str.getBytes();
 62 
 63         fileOutputStream.write(bytes);
 64         fileOutputStream.flush();
 65         fileOutputStream.close();
 66     }
 67 
 68     /**
 69      * 4.字元流輸入
 70      */
 71     @Test
 72     public void test4() throws IOException {
 73         FileReader fileReader = new FileReader("f1.txt");
 74 
 75         boolean f = true;
 76         while(f){
 77 
 78             int read = fileReader.read();
 79             System.out.print((char) read);
 80             if (read == -1){
 81                 f = false;
 82             }
 83         }
 84     }
 85 
 86 
 87     /**
 88      * 5.字元流輸出
 89      */
 90     @Test
 91     public void test5() throws IOException {
 92         FileWriter fileWriter = new FileWriter("f1.txt");
 93 
 94         fileWriter.write("方便的輸出");
 95 
 96         fileWriter.close();
 97     }
 98 
 99 
100     /**
101      * 6.位元組流轉字元流
102      */
103     @Test
104     public void test6() throws IOException {
105         FileInputStream inputStream = new FileInputStream("f1.txt");
106         InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");
107 
108         boolean f = true;
109         while (f){
110             int i = reader.read();
111             System.out.print((char) i);
112             if (i == -1){
113                 f = false;
114             }
115         }
116     }
117 }

3、位元組流和字元流的區別

①操作的單位不一樣,一個是位元組,一個是字元;

②操作中文使用字元流很爽;

③字元流的輸出流可以直接寫一個字元串 write(String msg);

④執行流程:

  位元組輸出流  --》程式 --》文件

  字元輸出流  --》程式 --》緩存 ---》文件

測試:

      A:位元組流調用了寫數據的方法之後如果沒有關閉,還是會把數據寫到文件;

      B:字元流調用了寫數據的方法之後如果沒有關閉,不會把數據寫到文件;

 


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

-Advertisement-
Play Games
更多相關文章
  • 一個web頁面一定少不了輸入框或者按鈕這兩種元素,那麼在Python里如何使用Selenium操作web頁面里的輸入框和按鈕呢?本文帶你簡單入門。 本文采用了一個例子,就是利用Selenium打開百度網頁,然後進行搜索關鍵字“Python”,執行搜索動作。具體代碼如下: Python Python ...
  • 使用Intellij Idea經常遇到的三種亂碼問題: 1、工程代碼亂碼 2、main方法運行,控制台亂碼 3、tomcat運行,控制台亂碼 解決方案: 1.工程代碼亂碼 Settings > Editor > File Encodings > Global Encodings & Project ...
  • 1、關於AOP AOP(Aspect Oriented Programming),即面向切麵編程,可以說是OOP(Object Oriented Programming,面向對象編程)的補充和完善。OOP引入封裝、繼承、多態等概念來建立一種對象層次結構,用於模擬公共行為的一個集合。OOP允許開發者定 ...
  • 有些人提到C++模板就會下意識地覺得可怕、看不懂、避而遠之。其實模板並不複雜,而且熟練後可以用在日常工作中,可以幫助我們重用代碼,讓代碼更簡潔、易讀、可維護。希望這個系列的文章,能夠讓更多人發現模板的魅力,幫助大家寫出更高質量的代碼。 ...
  • Cookie與Session簡介 本章介紹重點: 本章重點為大家介紹在Web開發過程當中經常會使用到的Cookie與Session的概念,它們的使用方法和應用場景,以及它們的優點與局限等等。深刻理解與掌握它們的用法,可以更好的幫助我們開發出正確可用的產品。 我們為什麼需要Cookie與Session ...
  • 基於Vue+Spring MVC+MyBatis+Shiro+Dubbo開發的分散式後臺管理系統 ...
  • 這個語法報錯,意思是試圖用python3.x來運行一個只用於python2.x版本的python代碼。完整的錯誤代碼是: ` SyntaxError: Missing parentheses in call to 'print'. Did you mean print(print "Added vi ...
  • 載入數據Fun:pandas.read_csv>>> import pandas>>> food_info = pandas.read_csv("food_info.csv")>>> print(food_info.dtypes)NDB_No int64Shrt_Desc objectWater_(... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...