日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

深入理解JAVA IO流

2022-08-05 09:04·Java開發技術分享

目錄

1.字符輸入流BufferedReader

2.字符輸出流BufferedWriter

聾緩沖流

(1)帶有緩沖區的字符輸入流;使用這個流的時候 不需要自定義char數組 ,或者說不需要自定義byte數組;自帶緩沖!

(2)讀取數據時, 可以一次性讀取一行

(3)這里只講解字符緩沖流: java.io.BufferedReader 和 java.io.BufferedWriter ;字節緩沖流使用方法是一樣的

(4)BufferedReader和BufferedWriter都是包裝流!

1.字符輸入流BufferedReader

package com.bjpowernode.java.io;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;public class BufferedReaderTest01 {    public static void main(String[] args) throws Exception {        FileReader reader = new FileReader("file");        // 當一個流的構造方法中需要一個流的時候,這個被傳進來的流叫做:節點流。        // 外部負責包裝的這個流,叫做:包裝流或者叫做:處理流。        // FileReader就是一個節點流。BufferedReader就是包裝流/處理流。        BufferedReader br = new BufferedReader(reader); // 只能傳字符流        // 優點:一次能讀一行;但不帶換行符!        String s = null;        while((s = br.readLine()) != null){ // br.readLine()返回的是一個字符串            System.out.println(s);        }        // 關閉流,只需要關閉最外層流就行,里面的節點流會自動關閉。        br.close();    }}

2.字符輸出流BufferedWriter

package com.bjpowernode.java.io;import java.io.*;public class BufferedWriterTest01 {    public static void main(String[] args) throws IOException {        // 創建帶有緩沖區的字符輸出流        BufferedWriter writer = new BufferedWriter(new FileWriter("file"));        // 開始寫        writer.write("hello world!");        writer.write("n");        writer.write("hello kitty!");        // 刷新        writer.flush();        // 關閉最外層        writer.close();    }}

聾轉換流

1.OutputStreamWriter

BufferedWriter:帶有緩沖的字符輸出流。OutputStreamWriter:轉換流
package com.bjpowernode.java.io;import java.io.*;public class BufferedWriterTest01 {    public static void main(String[] args) throws IOException {        // 創建帶有緩沖區的字符輸出流        BufferedWriter writer = new BufferedWriter(new FileWriter("file"));        // 如果想要使用字節輸出流,還是需要OutputStreamWriter進行流的轉換        // 如果使用的是字節流        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("file"));        BufferedWriter writer1 = new BufferedWriter(osw);                // 合并在一起        BufferedWriter writer1 = new BufferedWriter(new OutputStreamWriter        (new FileOutputStream("file")));        // 開始寫        writer.write("hello world!");        writer.write("n");        writer.write("hello kitty!");        // 刷新        writer.flush();        // 關閉最外層        writer.close();    }}

2.InputStreamReader

BufferedReader(reader),里面只能傳字符流;那如果是字節流怎么辦呢?

package com.bjpowernode.java.io;import java.io.*;public class BufferedReaderTest02 {    public static void main(String[] args) {        FileInputStream fis = null;        try {            // 字節流            fis = new FileInputStream("file");            // 通過轉換流轉換(InputStreamReader將字節流轉換成字符流)            // fis是節點流。reader是包裝流。            InputStreamReader reader = new InputStreamReader(fis);            // 把轉換成字符流的字節流,傳過來            // reader是節點流。br是包裝流。            BufferedReader br = new BufferedReader(reader);            // 上面進行合并            BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("file")));            // 進行打印            String s = null;            while((s = br1.readLine()) != null){                System.out.println(s);            }            // 關閉            br.close(); // 關閉最外層        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (fis != null) {                try {                    fis.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

聾數據流

1.DataOutputStream

(1)java.io.DataOutputStream:數據專屬的流;也是一個包裝流!

(2)這個流可以 將數據連同數據的類型一并寫入文件 。

(3)注意:這個文件不是普通文本文檔。(這個文件使用記事本打不開)

package com.bjpowernode.java.io;import java.io.DataOutputStream;import java.io.FileOutputStream;public class DataOutputStreamTest01 {    public static void main(String[] args) throws Exception{        // 創建數據專屬的字節輸出流(寫)        DataOutputStream dos = new DataOutputStream(new FileOutputStream("file")); //生成的這個文件,記事本打不開        // 寫數據        byte b = 100;        short s = 200;        int i = 300;        long l = 400L;        float f = 3.0F;        double d = 3.14;        boolean sex = false;        char c = 'a';        // 寫;把數據以及數據的類型一并寫入到文件當中       dos.writeByte(b);       dos.writeShort(s);       dos.writeInt(i);       dos.writeLong(l);       dos.writeFloat(f);       dos.writeDouble(d);       dos.writeBoolean(sex);       dos.writeChar(c);        // 刷新        dos.flush();                // 關閉最外層        dos.close();    }}

2.DataInputStream

(1)DataInputStream:數據字節輸入流。

(2)DataOutputStream寫的文件,只能使用DataInputStream去讀。并且讀的時候你需要提前知道寫入的順序;讀的順序需要和寫得順序一致。才可以正常取出數據 

package com.bjpowernode.java.io;import java.io.DataInputStream;import java.io.FileInputStream;public class DataInputStreamTest01 {    public static void main(String[] args) throws Exception {        // 創建數據專屬的字節輸入流(讀)        DataInputStream dis = new DataInputStream(new FileInputStream("file"));        // 開始讀        byte b = dis.readByte();        short s = dis.readShort();        int i = dis.readInt();        long l = dis.readLong();        float f = dis.readFloat();        double d = dis.readDouble();        boolean sex = dis.readBoolean();        char c = dis.readChar();        // 打印        System.out.println(b);        System.out.println(s);        System.out.println(i);        System.out.println(l);        System.out.println(f);        System.out.println(d);        System.out.println(sex);        System.out.println(c);        // 關閉流        dis.close();    }}

聾標準輸出流

1.PrintStream

(1)jva.io.PrintStream:標準的字節輸出流。默認輸出到控制臺。

(2)標準輸出流 不需要手動close()關閉 。

(3)可以 通過System.setOut()方法改變輸出流的方向

package com.bjpowernode.java.io;import java.io.FileOutputStream;import java.io.PrintStream;public class PrintStreamTest {    public static void main(String[] args) throws Exception {        System.out.println("hello world");        // 實際上上述代碼可以拆分成        PrintStream ps = System.out;        ps.println("hello world");        // 可以改變標準輸出流的輸出方向;        // 例如:標準輸出流不在指向控制臺,指向log文件        PrintStream printStream = new PrintStream(new FileOutputStream("log"));        // 修改輸出方向        System.setOut(printStream);        // 輸出        System.out.println("Hello World"); //不會再輸出到控制臺,而是到log文件    }}

2.日志工具類

那么標準輸出流PrintStream有什么用呢?我們不妨寫一個簡單的日志工具類!

日志框架

package com.bjpowernode.java.io;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.PrintStream;import java.text.SimpleDateFormat;import java.util.Date;// 日志工具public class Logger {    // 記錄日志的方法   public static void log(String msg) {       try {           PrintStream out = new PrintStream(new FileOutputStream("log.txt",true));           // 改變流的方向           System.setOut(out);           // 獲取系統當前時間           Date nowDate = new Date();           // 格式類型轉換           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");           String myNowdate = sdf.format(nowDate);           // 打印           System.out.println(myNowdate+":"+msg);       } catch (FileNotFoundException e) {           e.printStackTrace();       }   }}

日志測試

package com.bjpowernode.java.io;public class LoggerTest {    public static void main(String[] args) {        // 測試日志工具類        Logger.log("調用了System類的gc()方法,建議啟動垃圾回收");        Logger.log("調用了UserService的doSome()方法");        Logger.log("用戶嘗試進行登錄,驗證失敗");        // 在log.txt打印的結果       /* 2022-07-22 08:47:49 667:調用了System類的gc()方法,建議啟動垃圾回收        2022-07-22 08:47:49 703:調用了UserService的doSome()方法        2022-07-22 08:47:49 714:用戶嘗試進行登錄,驗證失敗*/    }}

聾File類的理解

java.io.File

1、File類和四大家族沒有關系,所以File類不能完成文件的讀和寫。

2、File對象代表什么?

文件和目錄路徑名的抽象表示形式。

C:Drivers 這是一個File對象

C:DriversLanRealtekReadme.txt 也是File對象。

一個File對象有可能對應的是目錄,也可能是文件 ;File只是一個路徑名的抽象表示形式; 不能通過File完成文件的讀和寫

1.常用方法1

(1) exists() 方法:判斷當前文件是否存在

(2) creatNewFile() 方法:以文件的形式創建出來

(3) mkdir() 方法:以目錄的形式創建出來; 創建多重目錄mkdirs() 方法

(4)獲取當前文件的父路徑:

方法1: 使用 getParent() ,返回的是一個 String

方法2:使用 getParentFile()

,返回的是一個

File

;和上面效果是一樣的

(5) getAbsolutePath() 方法:獲取當前文件的絕對路徑

package com.bjpowernode.java.io;import java.io.File;public class FileTest01 {    public static void main(String[] args) throws Exception {        // 創建File對象        File f1 = new File("D:\file");        // 1、判斷當前文件是否存在;exists()方法        System.out.println(f1.exists()); // false        // 2、如果D:file不存在,則以文件的形式創建出來;createNewFile()方法        if (!f1.exists()) {            f1.createNewFile();        }        // 3、如果D:file不存在,則以目錄的形式創建出來;mkdir()方法        if (!f1.exists()) {            f1.mkdir();        }        // 4、創建多重目錄;mkdirs()方法        File f2 = new File("D:/a/b/c/d");        if (!f2.exists()) {            f2.mkdirs();        }        // 5、獲取當前文件的父路徑        File f3 = new File("D:\Python/ target=_blank class=infotextkey>Python學習\PyCharm Community Edition 2021.2.2");        // 第一種:使用getParent(),返回的是一個String        String parentPath = f3.getParent();        System.out.println(parentPath); // D:python學習        // 第二種:使用getParentFile(),返回的是一個File;效果是一樣的        File parentFile = f3.getParentFile();        System.out.println(parentFile); // D:python學習        // 6、獲取當前文件的絕對路徑        File f4 = new File("file");        System.out.println(f4.getAbsolutePath()); // C:Users86177IdeaProjectsJavaSe1file    }}

2.常用方法2

(1) getName() :獲取當前文件的名字

(2) isDirectory() :判斷是否是一個目錄

(3) isFile() :判斷是否是一個文件

(4) lastModified() :獲取文件最后一次修改時間;得到的是毫秒數,返回long型

(5) length() :獲取文件大小,結果是字節

package com.bjpowernode.java.io;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;public class FileTest02 {    public static void main(String[] args) {        File  f1 = new File("C:\Java學習\javaSE學習\2.1JavaSE進階筆記\javase\Copy02.java");        // 1、獲取文件名,getName()方法        System.out.println("文件名:"+f1.getName()); // 文件名:Copy02.java        // 2、判斷是否是一個目錄,isDirectory()方法        System.out.println(f1.isDirectory()); // false        // 3、判斷是否是一個文件,isFile()方法        System.out.println(f1.isFile()); // true        // 4、獲取文件最后一次修改時間,lastModified()方法        // 得到的是毫秒數        long modifytTime = f1.lastModified();        // 將總毫秒數轉換成日期        Date date = new Date(modifytTime);        // 格式化        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");        System.out.println(sdf.format(date)); //2020-03-11 14:35:46 154        // 5、獲取文件大小,length()方法        System.out.println(f1.length()); //1490 字節            }}

3.listFiles方法

File中的 listFiles方法 ; 獲取當前目錄下所有的子文件 ; 返回的是一個File[]數組

package com.bjpowernode.java.io;import java.io.File;public class FileTest03 {    public static void main(String[] args) {        File f = new File("C:\Java學習\javaSE學習\2.1JavaSE進階筆記\javase\chapter15\src");        // 調用listFiles()方法,返回的是一個File[]數組        File[] files = f.listFiles();        // 用增強for循環打印        for(File file :files){            System.out.println(file.getAbsolutePath()); // 獲取所有子目錄的絕對路徑            System.out.println(file.getName()); //獲取所有子目錄的文件名        }    }}

結束語

今天的分享就到這里啦!

分享到:
標簽:IO
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定