日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础学习—— IO流

發布時間:2023/12/8 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础学习—— IO流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java基礎學習—— IO流

  • 1 文件
    • 1.1 文件的創建
    • 1.2 文件常用的方法
  • 2 IO流
    • 2.1 FileInputStream
    • 2.2 FileOutputStream
    • 2.3 文件的拷貝
    • 2.4 FileReader
    • 2.5 FileWriter
    • 2.6 BufferedReader
    • 2.7 BufferedWriter
    • 2.9 ObjectOutputStream
    • 2.10 ObjectInputStream
    • 2.11 InputStreamReader
    • 2.12 OutputStreamReader

1 文件

1.1 文件的創建

public void create01() {String filePath = "e:\\news1.txt";File file = new File(filePath);try {file.createNewFile();System.out.println("文件創建成功");} catch (IOException e) {e.printStackTrace();}}

1.2 文件常用的方法

  • getName:獲取文件名
  • getAbsolutePath:獲取文件絕對路徑
  • getParent:獲取父級目錄
  • getlength:文件大小(字節)
  • exists:文件是否存在
  • isFile: 是不是文件
  • isDirectory:是不是目錄
  • delet:刪除文件
  • mkdir:創建目錄
  • mdirs:創建多級目錄

2 IO流

抽象基類字節流字符流
輸入流InputStreamReader
輸出流OutputStreamWriter

這四個類是抽象類,其他IO流對象都是以這四個類派生出來

  • 節點流:直接和數據源相接(File,String,Pipe等)
  • 處理流:封裝一個節點流,使用了模擬器模式(BufferedReader,BufferedWriter等)

2.1 FileInputStream

  • 從文件讀取單個字節
  • public void readFile01() {String filePath = "e:\\hello.txt";int readData = 0;FileInputStream fileInputStream = null;try {//創建 FileInputStream 對象,用于讀取 文件fileInputStream = new FileInputStream(filePath);//從該輸入流讀取一個字節的數據。 如果沒有輸入可用,此方法將阻止。//如果返回-1 , 表示讀取完畢while ((readData = fileInputStream.read()) != -1) {System.out.print((char)readData);//轉成char顯示}} catch (IOException e) {e.printStackTrace();} finally {//關閉文件流,釋放資源.try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}
  • 用數組讀取文件
  • public void readFile02() {String filePath = "e:\\hello.txt";//字節數組byte[] buf = new byte[8]; //一次讀取8個字節.int readLen = 0;FileInputStream fileInputStream = null;try {//創建 FileInputStream 對象,用于讀取 文件fileInputStream = new FileInputStream(filePath);//從該輸入流讀取最多b.length字節的數據到字節數組。 此方法將阻塞,直到某些輸入可用。//如果返回-1 , 表示讀取完畢//如果讀取正常, 返回實際讀取的字節數while ((readLen = fileInputStream.read(buf)) != -1) {System.out.print(new String(buf, 0, readLen));//顯示}} catch (IOException e) {e.printStackTrace();} finally {//關閉文件流,釋放資源.try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}

    2.2 FileOutputStream

  • new FileOutputStream(filePath) 創建方式,當寫入內容是,會覆蓋原來的內容
  • new FileOutputStream(filePath, true) 創建方式,當寫入內容是,是追加到文件后面
  • public void writeFile() {//創建 FileOutputStream對象String filePath = "e:\\a.txt";FileOutputStream fileOutputStream = null;try {//得到 FileOutputStream對象 對象//1. new FileOutputStream(filePath) 創建方式,當寫入內容是,會覆蓋原來的內容//2. new FileOutputStream(filePath, true) 創建方式,當寫入內容是,是追加到文件后面fileOutputStream = new FileOutputStream(filePath);//寫入一個字節//fileOutputStream.write('H');////寫入字符串String str = "hello,world!";//str.getBytes() 可以把 字符串-> 字節數組//fileOutputStream.write(str.getBytes());/*write(byte[] b, int off, int len) 將 len字節從位于偏移量 off的指定字節數組寫入此文件輸出流*/fileOutputStream.write(str.getBytes());} catch (IOException e) {e.printStackTrace();} finally {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}

    2.3 文件的拷貝

  • 創建文件的輸入流 , 將文件讀入到程序
  • 創建文件的輸出流, 將讀取到的文件數據,寫入到指定的文件.
  • public static void main(String[] args) {String srcFilePath = "e:\\Koala.jpg";String destFilePath = "e:\\Koala3.jpg";FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try {fileInputStream = new FileInputStream(srcFilePath);fileOutputStream = new FileOutputStream(destFilePath);//定義一個字節數組,提高讀取效果byte[] buf = new byte[1024];int readLen = 0;while ((readLen = fileInputStream.read(buf)) != -1) {//讀取到后,就寫入到文件 通過 fileOutputStream//即,是一邊讀,一邊寫fileOutputStream.write(buf, 0, readLen);//一定要使用這個方法}System.out.println("拷貝ok~");} catch (IOException e) {e.printStackTrace();} finally {try {//關閉輸入流和輸出流,釋放資源if (fileInputStream != null) {fileInputStream.close();}if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

    2.4 FileReader

    FileReader以字符為單位讀取文件

    java中的char

    java里的char類型無論何時都是2字節的,字母’A’也不例外,只是在流中就不一定了,因為不同的編碼方式有不同的規則。 unicode第一Plane總共有65536個空位,是16位的,占兩個字節,因為java僅使用了unicode的第一個Plane,所以也是16位的。 從字符流中以某種字符編碼讀取讀取字符時,會將流中的字節以某種字符編碼的機內碼規則進行解碼,并轉換為unicode的值存儲到char類型變量中;向字符流以某種字符編碼寫入字符時,會將char類型的unicode碼代表的字符以某種的字符編碼的機內碼規則進行編碼,然后將編碼后的字節寫入到目標流中。

    /*** 單個字符讀取文件*/@Testpublic void readFile01() {String filePath = "e:\\story.txt";FileReader fileReader = null;int data = 0;//1. 創建FileReader對象try {fileReader = new FileReader(filePath);//循環讀取 使用read, 單個字符讀取while ((data = fileReader.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 字符數組讀取文件*/@Testpublic void readFile02() {System.out.println("~~~readFile02 ~~~");String filePath = "e:\\story.txt";FileReader fileReader = null;int readLen = 0;char[] buf = new char[8];//1. 創建FileReader對象try {fileReader = new FileReader(filePath);//循環讀取 使用read(buf), 返回的是實際讀取到的字符數//如果返回-1, 說明到文件結束while ((readLen = fileReader.read(buf)) != -1) {System.out.print(new String(buf, 0, readLen));}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}

    2.5 FileWriter

    String filePath = "e:\\note.txt";//創建FileWriter對象FileWriter fileWriter = null;char[] chars = {'a', 'b', 'c'};try {fileWriter = new FileWriter(filePath);//默認是覆蓋寫入 // 3) write(int):寫入單個字符fileWriter.write('C'); // 4) write(char[]):寫入指定數組fileWriter.write(chars); // 5) write(char[],off,len):寫入指定數組的指定部分fileWriter.write("Curry".toCharArray(), 0, 3); // 6) write(string):寫入整個字符串fileWriter.write(" 你好哦");fileWriter.write("君子慎獨"); // 7) write(string,off,len):寫入字符串的指定部分fileWriter.write("上海天津", 0, 2);//在數據量大的情況下,可以使用循環操作.} catch (IOException e) {e.printStackTrace();} finally {//對應FileWriter , 一定要關閉流,或者flush才能真正的把數據寫入到文件try {//fileWriter.flush();//關閉文件流,等價 flush() + 關閉fileWriter.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("程序結束...");

    2.6 BufferedReader

    對字節操作使用BufferedInputStream

    public static void main(String[] args) throws Exception {String filePath = "f:\\hello.txt";//創建bufferedReaderBufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));//讀取String line; //按行讀取, 效率高//說明//1. bufferedReader.readLine() 是按行讀取文件//2. 當返回null 時,表示文件讀取完畢while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}//關閉流, 這里注意,只需要關閉 BufferedReader ,因為底層會自動的去關閉 節點流bufferedReader.close();}

    2.7 BufferedWriter

    對字節操作使用BufferedOutputStream

    public static void main(String[] args) throws IOException {String filePath = "f:\\ok.txt";//創建BufferedWriter//說明://1. new FileWriter(filePath, true) 表示以追加的方式寫入//2. new FileWriter(filePath) , 表示以覆蓋的方式寫入BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();//插入一個和系統相關的換行bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();//說明:關閉外層流即可 , 傳入的 new FileWriter(filePath) ,會在底層關閉bufferedWriter.close();}

    2.9 ObjectOutputStream

    序列化:在保存數據時,保存數據的值和數據類型,要實現可序列化,必須實現Serializable或者Externalizable接口。一般使用Serializable接口(標記化的,里面沒有方法)

    反序列化:恢復數據時,恢復數據的值和數據類型

    對象處理流能夠將數據序列化和反序列化

    public static void main(String[] args) throws Exception {//序列化后,保存的文件格式,不是純文本,而是按照他的格式來保存String filePath = "f:\\data.dat";ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));//序列化數據到 e:\data.datoos.writeInt(100);// int -> Integer (實現了 Serializable)oos.writeBoolean(true);// boolean -> Boolean (實現了 Serializable)oos.writeChar('a');// char -> Character (實現了 Serializable)oos.writeDouble(9.5);// double -> Double (實現了 Serializable)oos.writeUTF("你一定可以成為你想要成為的人");//Stringoos.close();System.out.println("數據保存完畢(序列化形式)");}

    2.10 ObjectInputStream

    public static void main(String[] args) throws IOException, ClassNotFoundException {//指定反序列化的文件String filePath = "f:\\data.dat";ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));//讀取//1. 讀取(反序列化)的順序需要和你保存數據(序列化)的順序一致//2. 否則會出現異常System.out.println(ois.readInt());System.out.println(ois.readBoolean());System.out.println(ois.readChar());System.out.println(ois.readDouble());System.out.println(ois.readUTF());//關閉流, 關閉外層流即可,底層會關閉 FileInputStream 流ois.close();}

    對象處理流的注意事項

  • 讀寫順序要一致
  • 類中添加serialVersionUID 序列化的版本號,可以提高兼容性
  • 序列化對象時,默認將所有的屬性都序列化,除了static或transient修飾的成員
  • 序列化具有可繼承性,其子類默認實現可序列化
  • 對象序列化時,對象的屬性必須要可序列化
  • 2.11 InputStreamReader

    將字節流轉為字符流,用InputStreamReader可以指定編碼格式,解決亂碼的問題

    public static void main(String[] args) throws IOException {String filePath = "f:\\a.txt";//1. 把 FileInputStream 轉成 InputStreamReader//2. 指定編碼 gbk//InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "gbk");//3. 把 InputStreamReader 傳入 BufferedReader//BufferedReader br = new BufferedReader(isr);//將2 和 3 合在一起BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));//4. 讀取String s = br.readLine();System.out.println("讀取內容=" + s);//5. 關閉外層流br.close();}

    2.12 OutputStreamReader

    public static void main(String[] args) throws IOException {String filePath = "f:\\hello.txt";String charSet = "utf-8";OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath), charSet);osw.write("你好啊,笨蛋");osw.close();System.out.println("按照 " + charSet + " 保存文件成功~");}

    總結

    以上是生活随笔為你收集整理的Java基础学习—— IO流的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲福利 | 北条麻妃一区二区三区在线观看 | 亚洲视频精品一区 | 天天插av | 免费的黄色网址 | av射进来 | 欧美精品午夜 | 爱蜜臀av | 特级丰满少妇一级aaa爱毛片 | 国产黄色免费看 | 美女av网 | 国产无限资源 | 自拍偷拍视频在线观看 | 狠狠综合久久av一区二区 | 五月天婷婷色综合 | 手机看片福利视频 | 星空大象mv高清在线观看免费 | 狼性av| 天堂av亚洲av国产av电影 | 操操操插插插 | 国久久久 | 亚洲欧美一区二区三区情侣bbw | 国产又大又长又粗 | 好吊色一区二区三区 | 51福利视频 | 懂色tv| 色妞网站 | 久久精品小视频 | 国产成人啪一区二区 | 波多野结衣av中文字幕 | 中国av一级片 | 四虎影视网 | 夜夜嗨一区二区三区 | 可以免费看污视频的网站 | 亚洲偷拍一区 | 亚州欧美在线 | 亚洲人体视频 | zzjizzji亚洲日本少妇 | 伊人小视频 | 日韩精品一区二区三区av | 天天射寡妇 | 五月天色网站 | 成年人网站在线观看视频 | 亚洲视频欧美 | 爱情岛av永久入口 | 国产精品乱码久久久久久 | 偷拍夫妻性生活 | 性插插视频 | 久久精品国产亚洲av嫖农村妇女 | 欧美福利一区二区三区 | 国内自拍第二页 | 国产搞逼视频 | 国产欧美一区在线观看 | 台湾三级伦理片 | 艳母日本动漫在线观看 | 亚洲系列 | 久久精品五月天 | 亚洲色p| 性欧美bbw| 国产第二页 | 日韩视频一区在线观看 | 国产做爰免费观看视频 | 国产黑丝av| 91插插插视频 | 欧美午夜精品久久久久久蜜 | 四虎精品欧美一区二区免费 | 亚洲爆乳无码精品aaa片蜜桃 | 后入内射无码人妻一区 | 国产伦精品一区二区三区免费视频 | 免费黄色小网站 | 日本三级黄在线观看 | 奇米影视一区二区三区 | 日韩精品中文字幕在线观看 | 国产av国片偷人妻麻豆 | 国产做受高潮 | 西西人体www大胆高清 | 五月婷婷激情综合 | 97人妻精品视频一区 | 国产精品亚洲五月天丁香 | 亚洲夜夜爽 | 51精产品一区一区三区 | 中国黄色a级片 | 国产一级高清视频 | 91久久超碰 | 超碰xxx| 美女隐私黄www网站动漫 | 网址你懂的在线 | 一区二区麻豆 | 久久不射电影网 | 一级少妇女片 | 歪歪6080 | 国产专区一区 | 国产高清视频在线观看 | 欧美性受视频 | 亚洲午夜久久久久久久久红桃 | 超碰碰碰碰 | 毛片在线观看网站 | 熟妇高潮一区二区三区 | 乱子伦一区|