亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?I/O流如何使用

發布時間:2022-08-05 09:56:53 來源:億速云 閱讀:166 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java I/O流如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java I/O流如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1.java IO包

Java.io 包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。

Java.io 包中的流支持很多種格式,比如:基本類型、對象、本地化字符集等等。

一個流可以理解為一個數據的序列。輸入流表示從一個源讀取數據,輸出流表示向一個目標寫數據。

文件依靠流進行傳輸,就像快遞依托于快遞員進行分發

Java 為 I/O 提供了強大的而靈活的支持,使其更廣泛地應用到文件傳輸和網絡編程中。

Java?I/O流如何使用

下圖是一個描述輸入流和輸出流的類層次圖。

Java?I/O流如何使用

2.創建文件

方式一:

/**
 * 創建文件,第一種方式
 */
@Test
public void createFile01() {
    String filePath = "D://1.txt";
    File file = new File(filePath);
    try {
        file.createNewFile();
        System.out.println("文件創建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

第二種方式:

/**
 * 創建文件,第二種方式
 */
@Test
public void createFile02() {
    File parentFile = new File("D:\\");
    String fileName = "news.txt";
    File file = new File(parentFile, fileName);
    try {
        file.createNewFile();
        System.out.println("文件創建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

第三種方式:

/**
 * 創建文件,第三種方式
 */
@Test
public void createFile03() {
    String parentPath = "D:\\";
    String fileName = "my.txt";
    File file = new File(parentPath, fileName);
    try {
        file.createNewFile();
        System.out.println("文件創建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

3.獲取文件信息

示例代碼:

/**
 * 獲取文件信息
 */
@Test
public void info() {
    // 創建文件對象
    File file = new File("D:\\news.txt");
    // 獲取文件名字
    System.out.println(file.getName());
    // 獲取文件路徑
    System.out.println(file.getAbsolutePath());
    // 獲取文件父親目錄
    System.out.println(file.getParent());
    // 獲取文件大小(字節)
    System.out.println(file.length());
    // 文件是否存在
    System.out.println(file.exists());
    // 是不是一個文件
    System.out.println(file.isFile());
    // 是不是一個目錄
    System.out.println(file.isDirectory());
}

4.目錄操作

案例一:判斷指定目標是否存在,如果存在就刪除

// 判斷指定目標是否存在,如果存在就刪除
String filePath = "D:\\news.txt";
File file = new File(filePath);
if (file.exists()) {
    if (file.delete()) {
        System.out.println("刪除成功!");
    } else {
        System.out.println("刪除失敗!");
    }
} else {
    System.out.println("文件不存在!");
}

案例二:判斷目錄是否存在,如果存在即刪除

// 判斷目錄是否存在,如果存在即刪除
String dirPath = "D:\\demo";
File file1 = new File(dirPath);
if (file1.exists()) {
    if (file1.delete()) {
        System.out.println("刪除成功!");
    } else {
        System.out.println("刪除失敗!");
    }
} else {
    System.out.println("目錄不存在!");
}

案例三:判斷指定目錄是否存在,不存在就創建目錄

// 判斷指定目錄是否存在,不存在就創建目錄
String persondir = "D:\\demo\\a\\b\\c";
File file2 = new File(persondir);
if (file2.exists()) {
    System.out.println("該目錄存在!");
} else {
    if (file2.mkdirs()) {
        System.out.println("目錄創建成功!");
    } else {
        System.out.println("目錄創建失敗!");
    }
}

注意:創建多級目錄,使用mkdirs,創建一級目錄使用mkdir

5.字節輸入流InputStream

InputStream抽象類是所有類字節輸入流的超類

  • FileInputStream 文件輸入流

  • BufferedInputStream 緩沖字節輸入流

  • ObjectInputStream 對象字節輸入流

Java?I/O流如何使用

FileInputStream

文件輸入流,從文件中讀取數據,示例代碼:

單個字節的讀取,效率較低:

/**
 * read()讀文件
 */
@Test
public void readFile01() throws IOException {
    String filePath = "D:\\hacker.txt";
    int readData = 0;
    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(filePath);
        // 讀文件,一個字符一個字符讀取,返回字符的ASCII碼,文件尾部返回-1
        while ((readData = fileInputStream.read()) != -1) {
            System.out.print((char)readData);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        // 關閉流資源
        fileInputStream.close();
    }
}

注意:使用字節流的方式,無法讀取文件中的中文字符,如需讀取中文字符,最好使用字符流的方式

使用byte數組的方式讀取,這使得可以讀取中文,并且有效的提升讀取效率:

/**
 * read(byte[] b)讀文件
 * 支持多字節讀取,提升效率
 */
@Test
public void readFile02() throws IOException {
    String filePath = "D:\\hacker.txt";
    int readData = 0;
    int readLen = 0;
    // 字節數組
    byte[] bytes = new byte[8]; // 一次最多讀取8個字節

    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(filePath);
        // 讀文件,從字節數組中直接讀取
        // 如果讀取正常,返回實際讀取的字節數
        while ((readLen = fileInputStream.read(bytes)) != -1) {
            System.out.print(new String(bytes, 0, readLen));
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        // 關閉流資源
        fileInputStream.close();
    }
}

6.字節輸出流FileOutputStream

Java?I/O流如何使用

使用示例:(向hacker.txt文件中加入數據)

/**
 * FileOutputStream數據寫入文件
 * 如果該文件不存在,則創建該文件
 */
@Test
public void writeFile() throws IOException {
    String filePath = "D:\\hacker.txt";
    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = new FileOutputStream(filePath);
        // 寫入一個字節
        // fileOutputStream.write('G');
        // 寫入一個字符串
        String s = "hello hacker!";
        // fileOutputStream.write(s.getBytes());
        // 寫入字符串指定范圍的字符
        fileOutputStream.write(s.getBytes(),0,3);
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } finally {
        assert fileOutputStream != null;
        fileOutputStream.close();
    }
}

我們發現,使用這樣的FileOutputStream構造器無法實現向文件中追加內容,只能進行覆蓋,我們可以在初始化對象的時候這樣解決:

fileOutputStream = new FileOutputStream(filePath,true);

7.模擬文件拷貝

我們可以結合字節輸入和輸出流模擬一個文件拷貝的程序:

/**
 * 文件拷貝
 * 思路:
 * 創建文件的輸入流,將文件讀取到程序
 * 創建文件的輸出流,將讀取到的文件數據寫入到指定的文件
 */
@Test
public void Copy() throws IOException {
    String srcFilePath = "D:\\hacker.txt";
    String destFilePath = "D:\\hello.txt";
    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.write(buf, 0, readLen);
        }
        System.out.println("拷貝成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (fileInputStream != null){
            fileInputStream.close();
        }
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
    }
}

8.字符輸入流FileReader

字符輸入流FileReader用于從文件中讀取數據

示例:

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符輸出流
 */
public class FileWriteTest {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\hacker.txt";
        // 創建對象
        FileWriter fileWriter = null;
        try {
            char[] chars = {'a', 'b', 'c'};
            fileWriter = new FileWriter(filePath, true);
            // 寫入單個字符
            // fileWriter.write('H');
            // 寫入字符數組
            // fileWriter.write(chars);
            // 指定數組的范圍寫入
            // fileWriter.write(chars, 0, 2);
            // 寫入字符串
            // fileWriter.write("解放軍萬歲!");
            // 指定字符串的寫入范圍
            fileWriter.write("hacker club", 0, 5);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // FileWriter是需要強制關閉文件或刷新流的,否則數據會保存失敗
            fileWriter.close();
        }
    }
}

9.字符輸出流FileWriter

字符輸出流FileWrite用于寫數據到文件中:

示例:

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符輸出流
 */
public class FileWriteTest {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\hacker.txt";
        // 創建對象
        FileWriter fileWriter = null;
        try {
            char[] chars = {'a', 'b', 'c'};
            fileWriter = new FileWriter(filePath, true);
            // 寫入單個字符
            // fileWriter.write('H');
            // 寫入字符數組
            // fileWriter.write(chars);
            // 指定數組的范圍寫入
            // fileWriter.write(chars, 0, 2);
            // 寫入字符串
            // fileWriter.write("解放軍萬歲!");
            // 指定字符串的寫入范圍
            fileWriter.write("hacker club", 0, 5);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // FileWriter是需要強制關閉文件或刷新流的,否則數據會保存失敗
            fileWriter.close();
        }
    }
}

使用FileWriter,記得關閉文件或者刷新流!

讀到這里,這篇“Java I/O流如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长乐市| 清原| 宝清县| 绥宁县| 九龙城区| 格尔木市| 普安县| 洪湖市| 依兰县| 噶尔县| 宝丰县| 阿瓦提县| 平南县| 垣曲县| 马关县| 海城市| 班玛县| 呼玛县| 濮阳市| 灵台县| 大厂| 无棣县| 广州市| 宾阳县| 手游| 阿瓦提县| 高阳县| 呼图壁县| 满洲里市| 静安区| 墨玉县| 中宁县| 通海县| 广汉市| 通州市| 右玉县| 班玛县| 茂名市| 安平县| 潼关县| 长乐市|