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