欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的FileWriter用法詳解與實(shí)戰(zhàn)記錄

 更新時(shí)間:2024年10月26日 11:23:01   作者:頗有幾分姿色  
這篇文章主要給大家介紹了關(guān)于Java中FileWriter用法的相關(guān)資料,包括寫(xiě)入字符數(shù)據(jù)到文件、字符數(shù)組和部分字符寫(xiě)入、配合BufferedWriter使用等方法,同時(shí)也解釋了其與OutputStreamWriter,BufferedWriter的異同特性,適合簡(jiǎn)單的文件寫(xiě)入操作,需要的朋友可以參考下

前言

FileWriter 是專門(mén)用于將字符寫(xiě)入文件的便捷類(lèi)。它繼承自 OutputStreamWriter,屬于字符流類(lèi)的一個(gè)部分,適合用于處理文本文件的寫(xiě)入操作。

1. FileWriter 概述

`FileWriter` 主要用于將字符數(shù)據(jù)寫(xiě)入到文件中。如果文件不存在,它會(huì)自動(dòng)創(chuàng)建;如果文件已存在,默認(rèn)情況下會(huì)覆蓋文件的內(nèi)容。與字節(jié)流相比,`FileWriter` 更加適合處理文本文件,使用起來(lái)也更加高效。

基本構(gòu)造函數(shù):

FileWriter writer = new FileWriter("filename.txt");
  • filename.txt:目標(biāo)文件路徑。如果文件不存在,FileWriter 會(huì)自動(dòng)創(chuàng)建。

使用追加模式:

FileWriter writer = new FileWriter("filename.txt", true);

其中 true 表示以追加模式打開(kāi)文件,數(shù)據(jù)會(huì)被追加到文件末尾,不會(huì)覆蓋現(xiàn)有內(nèi)容。

2. FileWriter 的基本用法

寫(xiě)入簡(jiǎn)單的文本內(nèi)容到文件中:

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

public class FileWriterExample {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("E:/software/test/text.txt")) {
            writer.write("Hello, FileWriter!\n");
            writer.write("This is a new line.\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

關(guān)鍵點(diǎn):

  • write() 方法:用于將字符串寫(xiě)入文件??梢詫?xiě)入任意的字符數(shù)據(jù)。
  • try-with-resources:自動(dòng)管理資源,確保文件寫(xiě)入完成后流能夠自動(dòng)關(guān)閉,無(wú)需手動(dòng)調(diào)用 close()。
  • 如果不指定具體的路徑,生成文件與src在同級(jí)目錄

輸出文件 `test.txt` 的內(nèi)容:

Hello, FileWriter!
This is a new line.

追加模式示例

如果不想覆蓋原有內(nèi)容,想在文件的末尾添加新內(nèi)容,可以使用追加模式:

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

public class FileWriterExample {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("E:/software/test/text.txt",true)) {
//            writer.write("Hello, FileWriter!\n");
//            writer.write("This is a new line.\n");
            writer.write("This text is appended.\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

test.txt 文件的內(nèi)容會(huì)被更新:

Hello, FileWriter!
This is a new line.
This text is appended.

3. 高級(jí)用法:字符數(shù)組和部分字符寫(xiě)入

除了寫(xiě)入字符串,FileWriter 還可以寫(xiě)入字符數(shù)組。

寫(xiě)入字符數(shù)組

    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("E:/software/test/text.txt",true)) {
//            writer.write("Hello, FileWriter!\n");
//            writer.write("This is a new line.\n");
//            writer.write("This text is appended.\n");
            char[] data = "FileWriter example with char array.".toCharArray();
            writer.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

文本內(nèi)容更新如下:

Hello, FileWriter!
This is a new line.
This text is appended.

FileWriter example with char array.

寫(xiě)入部分字符

如果你只想寫(xiě)入數(shù)組中的一部分字符,可以指定偏移量和寫(xiě)入的長(zhǎng)度:

    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("E:/software/test/text.txt",true)) {
//            writer.write("Hello, FileWriter!\n");
//            writer.write("This is a new line.\n");
//            writer.write("This text is appended.\n");
//            char[] data = "FileWriter example with char array.".toCharArray();
//            writer.write(data);
//            writer.write("\n");
            char[] data = "Partial char array example.".toCharArray();
            writer.write(data, 8, 10); // 從索引 8 開(kāi)始,寫(xiě)入 10 個(gè)字符
            writer.write("\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

文本內(nèi)容更新如下:

Hello, FileWriter!
This is a new line.
This text is appended.

FileWriter example with char array.
char array

4. FileWriter 與 BufferedWriter 配合使用

雖然 FileWriter 非常方便,但在處理大量數(shù)據(jù)時(shí),它的性能可能會(huì)受到影響,因?yàn)樗侵饌€(gè)字符寫(xiě)入的。如果需要高效地處理大數(shù)據(jù)量,建議與 BufferedWriter 搭配使用。

public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("E:/software/test/text.txt"))) {
            writer.write("BufferedWriter is much faster.");
            writer.newLine(); // 寫(xiě)入換行符
            writer.write("BufferedWriter is much faster.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

文本內(nèi)容:

BufferedWriter is much faster.
BufferedWriter is much faster.

為什么使用 `BufferedWriter`?

  • 緩沖BufferedWriter 提供了一個(gè)緩沖區(qū),減少了實(shí)際寫(xiě)入文件的次數(shù),從而提高性能。
  • 更高效的處理:在寫(xiě)入大量數(shù)據(jù)時(shí),BufferedWriter 的表現(xiàn)更優(yōu)。

5. 控制刷新:`flush()` 方法

文件寫(xiě)入通常會(huì)先寫(xiě)入到內(nèi)存的緩沖區(qū)中,而不是直接寫(xiě)入磁盤(pán)。為了確保數(shù)據(jù)立即寫(xiě)入文件,可以使用 flush() 方法,它會(huì)強(qiáng)制將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入磁盤(pán)。

    public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("E:/software/test/text.txt"))) {
            writer.write("This data will be flushed.");
            writer.flush(); // 強(qiáng)制將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入磁盤(pán)
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

何時(shí)使用 `flush()`?

如果你想在文件流關(guān)閉之前,確保數(shù)據(jù)被寫(xiě)入文件,可以調(diào)用 flush() 方法。通常不需要手動(dòng)調(diào)用,因?yàn)樵?nbsp;close() 時(shí)會(huì)自動(dòng)刷新緩沖區(qū)。

6. 常見(jiàn)問(wèn)題與注意事項(xiàng)

1. 文件不存在

FileWriter 會(huì)自動(dòng)創(chuàng)建目標(biāo)文件(如果該文件不存在)。但如果指定的路徑有問(wèn)題(如文件夾不存在),則會(huì)拋出 IOException。

2. 編碼問(wèn)題

FileWriter 默認(rèn)使用系統(tǒng)的默認(rèn)字符編碼。如果需要指定編碼,可以使用 OutputStreamWriter,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class FileWriterExample {
    public static void main(String[] args) {
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("E:/software/test/text.txt"), StandardCharsets.UTF_8)) {
            writer.write("This is UTF-8 encoded text.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

7. FileWriter、BufferedWriter 和 OutputStreamWriter 的異同

特性FileWriterOutputStreamWriterBufferedWriter
基本功能直接將字符數(shù)據(jù)寫(xiě)入文件將字符流轉(zhuǎn)換為字節(jié)流,并寫(xiě)入文件為字符流添加緩沖,減少實(shí)際寫(xiě)入操作
繼承關(guān)系繼承自 OutputStreamWriter繼承自 Writer,包裝字節(jié)輸出流繼承自 Writer,包裝字符輸出流
編碼控制默認(rèn)使用系統(tǒng)編碼可以手動(dòng)指定字符編碼依賴于被包裝的 Writer
性能性能較低,沒(méi)有緩沖機(jī)制性能較低,沒(méi)有緩沖機(jī)制性能較高,使用了緩沖機(jī)制
是否緩沖無(wú)緩沖無(wú)緩沖使用緩沖區(qū)來(lái)提高性能
適用場(chǎng)景簡(jiǎn)單的文件寫(xiě)入操作需要處理字符編碼的文件寫(xiě)入需要高效寫(xiě)入大量或頻繁小數(shù)據(jù)

BufferedWriter 和 OutputStreamWriter組合使用示例:

public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:/software/test/text.txt"), StandardCharsets.UTF_8))) {
            writer.write("This is BufferedWriter and OutputStreamWriter text.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

8.總結(jié)

  • FileWriter 適合簡(jiǎn)單的文件寫(xiě)入場(chǎng)景,不支持編碼控制,沒(méi)有緩沖機(jī)制。
  • OutputStreamWriter 主要用于將字符流轉(zhuǎn)換為字節(jié)流,并支持手動(dòng)指定字符編碼,是字符流與字節(jié)流之間的橋梁。
  • BufferedWriter 通過(guò)添加緩沖機(jī)制來(lái)減少實(shí)際 I/O 操作,提高性能,適用于頻繁的小數(shù)據(jù)寫(xiě)入場(chǎng)景。

到此這篇關(guān)于Java中的FileWriter用法詳解與實(shí)戰(zhàn)記錄的文章就介紹到這了,更多相關(guān)Java FileWriter用法詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中bean的初始化和銷(xiāo)毀幾種實(shí)現(xiàn)方式詳解

    Spring中bean的初始化和銷(xiāo)毀幾種實(shí)現(xiàn)方式詳解

    這篇文章主要介紹了Spring中bean的初始化和銷(xiāo)毀幾種實(shí)現(xiàn)方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一篇文章帶你入門(mén)Java變量及整形

    一篇文章帶你入門(mén)Java變量及整形

    這篇文章主要介紹了簡(jiǎn)單了解JAVA變量類(lèi)型及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java中避免空指針異常的方法

    Java中避免空指針異常的方法

    這篇文章主要介紹了Java中避免空指針異常的方法,本文討論Optional類(lèi)型、Objects類(lèi)等技術(shù),需要的朋友可以參考下
    2014-10-10
  • 使用java文件過(guò)濾器輸出制定格式文件路徑的實(shí)例代碼

    使用java文件過(guò)濾器輸出制定格式文件路徑的實(shí)例代碼

    這篇文章主要介紹了使用java文件過(guò)濾器輸出制定格式文件路徑的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • idea推送項(xiàng)目到gitee中的創(chuàng)建方法

    idea推送項(xiàng)目到gitee中的創(chuàng)建方法

    這篇文章主要介紹了idea推送項(xiàng)目到gitee中的創(chuàng)建方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上圖書(shū)館管理系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上圖書(shū)館管理系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個(gè)網(wǎng)上圖書(shū)館管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 解決springboot responseentity<string>亂碼問(wèn)題

    解決springboot responseentity<string>亂碼問(wèn)題

    這篇文章主要介紹了解決springboot responseentity<string>亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 圖文詳解OkHttp的超時(shí)時(shí)間

    圖文詳解OkHttp的超時(shí)時(shí)間

    HTTP是現(xiàn)代應(yīng)用常用的一種交換數(shù)據(jù)和媒體的網(wǎng)絡(luò)方式,高效地使用HTTP能讓資源加載更快,節(jié)省帶寬,OkHttp是一個(gè)高效的HTTP客戶端,下面這篇文章主要給大家介紹了關(guān)于OkHttp超時(shí)時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • MyBatis動(dòng)態(tài)SQL之<choose><when><o(jì)therwise>標(biāo)簽的使用

    MyBatis動(dòng)態(tài)SQL之<choose><when><o(jì)therwise>標(biāo)簽的使用

    MyBatis中動(dòng)態(tài)語(yǔ)句choose-when-otherwise 類(lèi)似于Java中的switch-case-default語(yǔ)句,本文就來(lái)介紹一下MyBatis動(dòng)態(tài)SQL之<choose><when><o(jì)therwise>標(biāo)簽的使用,感興趣的可以了解一下
    2023-09-09
  • 詳解Java事件編程的使用

    詳解Java事件編程的使用

    Java事件在很多地方都可以使用,合理的使用事件編程,相比常規(guī)邏輯的編程,這可達(dá)到主次分明,讓程序吞吐量即處理能力更強(qiáng),改動(dòng)更少,下面我們舉一個(gè)例子說(shuō)明如何使用Java使用,需要的朋友可以參考下
    2021-06-06

最新評(píng)論