摘要:代碼操作分析經常會遇到各種流操作,流操作一般分為兩類字符流和字節流。我是拉丁小毛,歡迎大家關注我哦,一起交流,共同進步。有問題可以郵我哦
代碼
java IO 操作分析
package jdk.util.sourceCode; import java.io.*; /** * 經常會遇到各種 IO 流操作,IO 流操作一般分為兩類:字符流和字節流。 * 以 "Reader" 結尾都是字符流,操作的都是字符型的數據 * 以 "Stream" 結尾的都是字節流,操作的都是 byte 類型的數據 * 二者的區別: * 字節流沒有緩沖區,是直接輸出的;而字符流是先輸出到緩沖區,然后在調用 close() 方法后再輸出信息 * 處理對象不同,字節流能處理所有類型的數據,但是字符流只能處理字符類型的數據(只要是處理純文本數據,就優先考慮使用字符流,除此之外都使用字節流) * java byte -> short -> int -> long 1byte -> 2byte -> 4byte -> 8byte * * * * InputStream 和 OutputStream 是各種輸入輸出字節流的基類,所有字節流都繼承于這兩個基類 * * * FileInputStream 和 FileOutputStream 這兩個從字面意思很容易理解,是對文件的字節流操作,也是最常見的 IO 操作流 * * * 非流式文件類 -- File 類 * 從定義來看,File 類是 Object 的直接子類,同時它繼承了 Comparable 接口可以進行數組的排序 * File 類的操作包括文件的創建,刪除,重命名,得到文件/文件夾的路徑,創建時間等 * File 類是對文件系統中文件以及文件夾進行封裝的一個對象,可以通過對象的思想來操作文件和文件夾 * / /** * @author: util.you.com@gmail.com * @date: 2019/5/25 15:40 * @description: * @version: 1.0 * @className: TestIO */ public class TestIO { public static void main(String[] args){ // 1.調用 新建文件 // createFile("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode", "測試io.txt"); // 2.調用刪除文件 // deleteFile("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode","測試io.txt"); // 3.調用創建文件夾 // createFolder("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode", "測試io文件夾"); // 4.列出指定目錄下面的所有文件,包括隱藏文件 // listFiles("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode"); // 5.判斷指定的 文件夾是否是一個 目錄(即是否是一個 文件夾) // isFolder("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode", "測試io文件夾"); // 6. 向指定的文件中(需要在文件名中給出路徑和文件名,我這里是為了簡便這樣寫了)通過 字節流 寫入數據 (這里前提:認為該文件已經存在,不需要再創建) // writeFileByByte("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode測試io.txt"); // 7.從指定的文件中讀取內容 // readFileByByte("F:githubutil.you.com@gmail.comjdksrcmainjavajdkutilsourceCode測試io.txt"); // 8. 從 指定文件讀取內容并寫入到 目標文件 readWriteFile("F:gamexx.mp4", "E:github-projectjdksrcmainjavajdkutilsourceCode測試io.txt"); } /** * 因為 io 流基本是與 File(文件/文件夾) 操作密不可分的,因此 io 的操作,只要涉及到文件,文件夾的都必須使用 File 類 * 在指定的路徑下,新建一個 指定文件名的 文件 * @param path 文件路徑 * @param fileName 文件名 */ public static void createFile(String path, String fileName){ // 因為是在 操作 文件,所以用到 File 對象【記住:所有與文件/文件夾操作相關的內容,都必須第一時間想到要用 File 對象】 File file = new File(path+fileName); // 實例化一個 file 操作對象 try { file.createNewFile(); // 調用 file 文件/文件夾 實例對象的 方法,來新建文件 System.out.println("目標文件已存在: " + path + fileName); } catch (IOException e) { e.printStackTrace(); } } /** * 刪除一個指定路徑下的 文件 * @param path 該文件的路徑 * @param fileName 該文件的文件名 */ public static void deleteFile(String path, String fileName){ File file = new File(path+fileName); if(file.exists()){ file.delete(); System.out.println("目標文件已刪除"); }else{ System.out.println("要刪除的目標文件不存在"); } } /** * 新建一個 文件夾 * @param path 路徑 * @param folderName 文件夾名 */ public static void createFolder(String path, String folderName){ File file = new File(path+folderName); file.mkdir(); System.out.println("該文件夾已經存在于: " + path + folderName); } /** * 列出指定目錄下面的所有文件 * @param path 目錄的路徑名 */ public static void listFiles(String path){ File file = new File(path); if (file.isDirectory()){ File[] fileArray = file.listFiles(); for (int i = 0; i < fileArray.length; i++){ System.out.println( "該目錄下的文件: " + fileArray[i]); System.out.println( "該目錄下的文件或文件夾的名字: " + fileArray[i].getName()); } }else{ System.out.println(path + " 目錄不存在"); } } /** * 判斷給定的 文件夾 是否是一個目錄 * @param path */ public static void isFolder(String path, String folderName){ File file = new File(path + folderName); if (file.isDirectory()){ System.out.println(path + folderName + " 是一個目錄"); }else{ System.out.println(path + folderName + " 不是一個目錄"); } } /** * 通過 字節流 向 指定文件 寫入內容 * @param fileName 文件名,這里為了簡化,文件名中帶上 路徑 */ public static void writeFileByByte(String fileName){ File file = new File(fileName); OutputStream outputStream = null; // 從內存中 寫入內容 到 文件中,這是輸出流,因此要用 輸出流 // FileOutputStream 的構造器大體上有兩類:一類是 傳入一個帶有文件名和文件路徑的字符串;另一類是 傳入一個 File 文件/文件夾對象 try { outputStream = new FileOutputStream(file, true); // 給 file 文件對象 構造一個字節輸出流 } catch (FileNotFoundException e) { e.printStackTrace(); } // 這里穿插一個小知識點,即我們 給一個 int 參數,但是我們要讓 outputStream 以 byte[] 的形式寫入,接下來就看 int 轉 byte[] 吧 int a = 12345678; // 為什么這樣呢?因為 一個 int 是 4個byte,所以一個 int 轉成 byte[] 后,一定是里面包含4個byte元素的 byte[] 數組 byte[] b = new byte[]{ (byte) ((a >> 24) & 0xFF), (byte) ((a >> 16) & 0xFF), (byte) ((a >> 8) & 0xFF), (byte) ((a ) & 0xFF) }; try { outputStream.write(b); // 這里還有一個問題沒解決:寫入的時候,選擇編碼格式(稍后解決) outputStream.close(); }catch (IOException e) { e.printStackTrace(); } } /** * 通過 字節流 從 指定文件 讀取輸出內容 * @param fileName 文件名,這里為了簡化,文件名中帶上 路徑 */ public static void readFileByByte(String fileName){ File file = new File(fileName); InputStream inputStream = null; // 從 硬盤中 讀取內容 到 內存中,這是 輸入流,因此聲明 輸入流 對象 try { inputStream = new FileInputStream(file); // inputStream 讀取內容有5個方法 read():默認讀取一個byte,readBytes(byte b[], int off, int len) // 這里我們采用 read(byte b[], int off, int len) 方法 byte[] byter = new byte[1024]; // 所以先實例化一個 byte[] int len = inputStream.read(byter); inputStream.close(); // 最后我們輸出一下讀取到的內容 System.out.println(new String(byter, 0, len)); } catch (Exception e) { e.printStackTrace(); } } /** * @author: util.you.com@gmail.com * @param: [sourceFile, desFile] * @return: void * @date: 2019/5/25 18:04 * @version: 1.0 * @description: 最后來一個 從 指定文件中 讀取內容 到 指定目標文件中 */ public static void readWriteFile(String sourceFile, String desFile){ File inputFile = new File(sourceFile); File outputFile = new File(desFile); InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = new FileInputStream(inputFile); byte[] byter = new byte[1024]; inputStream.read(byter); outputStream = new FileOutputStream(outputFile, true); outputStream.write(byter); outputStream.close(); inputStream.close(); System.out.println("操作完成"); }catch (Exception e){ System.out.println(e.getMessage()); } } }聲明
原創手敲不易,轉載請注明出處,謝謝。我是拉丁小毛,歡迎大家關注我哦,一起交流,共同進步。有問題可以郵我哦(util.you.com@gmail.com)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74652.html
摘要:知識點總結大文本對象的使用知識點總結用于存儲大量的文本數據大字段有些特殊,不同數據庫處理的方式不一樣,大字段的操作常常是以流的方式來處理。最大長度為字符的列。 Java知識點總結(JDBC-大文本對象的使用) @(Java知識點總結)[Java, JDBC] CLOB(Chaaracter Large Object) 用于存儲大量的文本數據 大字段有些特殊,不同數據庫處理的方式不一樣...
摘要:學習筆記總結前言前面的八篇文章詳細的講述了的操作方法,文章列表如下基本的文件操作字符流和字節流的操作和操作內存操作流管道流打印流對的支持和后續字節流字節流的操作都是基于和這兩個抽象類是字節輸入流,主要的功能是從文件中讀取數據它的子類有內存操 Java IO學習筆記總結 前言 前面的八篇文章詳細的講述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字節流的操作 In...
摘要:使用字節流寫入文件,如果沒有關閉字節流操作,文件依然存在內容,說明字節流是操作文件本身的。字節流比字符流更好,使用更廣泛。 Java知識點總結(JavaIO-字符流) @(Java知識點總結)[Java, JavaIO] [toc] 在程序中一個字符等于兩個字節,那么 Java 提供了 Reader 和 Writer 兩個專門操作字符流的類。 字符輸出流:Writer 類定義如下: p...
摘要:的選擇器允許單個線程監視多個輸入通道。一旦執行的線程已經超過讀取代碼中的某個數據片段,該線程就不會在數據中向后移動通常不會。 1、引言 很多初涉網絡編程的程序員,在研究Java NIO(即異步IO)和經典IO(也就是常說的阻塞式IO)的API時,很快就會發現一個問題:我什么時候應該使用經典IO,什么時候應該使用NIO? 在本文中,將嘗試用簡明扼要的文字,闡明Java NIO和經典IO之...
摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
閱讀 2597·2021-10-14 09:43
閱讀 3559·2021-10-13 09:39
閱讀 3289·2019-08-30 15:44
閱讀 3137·2019-08-29 16:37
閱讀 3702·2019-08-29 13:17
閱讀 2731·2019-08-26 13:57
閱讀 1825·2019-08-26 11:59
閱讀 1238·2019-08-26 11:46