【Java基礎】IO流(2) —— 字符流

【Java基礎】IO流(1) —— 簡介
【Java基礎】IO流(2) —— 字符流
【Java基礎】IO流(3) —— 字節流
【Java基礎】IO流(4) —— 轉換流、打印流
【Java基礎】IO流(5) —— 序列流、內存流
【Java基礎】IO流(6) —— 隨機訪問文件流、數據流

字符流

文件流

文件輸出流

FileWriter

write(String str)

文件輸入流

FileReader

從文本文件中讀取數據:因為是文本文件所以使用字符流,又因為是讀取,所以使用字符讀取流

因為是文件,所以使用Reader的子類FileReader

int read( ) 一次讀一個字符
int read(char [] arr) 返回的是讀取的字符的個數

復制文件

import java.io.*;
class Demo9{public static void main(String[] args){FileWriter fw=null;FileReader fr=null;try{fr=new FileReader("Demo3.java");fw=new FileWriter("Demo3_copy.java");char[] arr=new char[1024];int num;while((num=fr.read(arr))!=-1){fw.write(arr,0,num);}}catch (IOException e){e.printStackTrace();}finally{if (fr!=null)try{fr.close();}catch (IOException e){e.printStackTrace();}if (fw!=null)try{fw.close();}catch (IOException e){e.printStackTrace();}}System.out.println("Hello World!");}
}

字符緩沖流

是為了提高讀或寫的效率,緩沖流本身不具備讀或寫的功能,使用緩沖流必須結合讀流寫流使用。

BufferedReader(Reader r):字符緩沖輸入流
BufferedWriter(Writer w):字符緩沖輸出流

字符緩沖輸出流

newLine() 跨平臺的寫入換行符

//使用字符緩沖輸出流向文本文件中輸出數據
//1. 創建文件輸出流對象和文件向關聯
FileWriter fw=new FileWriter("tt.txt");
//2. 為了提高輸出效率,使用字符緩沖輸出流
//把需要提高效率的輸出流對象作為參數傳遞給
BufferedWriter bw=new BufferedWriter(fw);
for (int i=1;i<=3;i++)
{bw.write("abc"+i);bw.newLine();bw.flush();
}
bw.close();//關閉緩沖流其實就是關閉寫入流
字符緩沖輸入流

readLine() 一次讀一行,返回的一行不包括換行符

//使用字符緩沖輸入流實現讀取文本文件
//1. 創建文件讀取流對象和文件相關聯
FileReader fr=new FileReader("tt.txt");
//2.為了提高讀的效率,把文件讀取流對象作為參數傳遞給BufferedReader
BufferedReader br=new BufferedReader(fr);
String line=null;
while ((lin=br.readLine())!=null){System.out.println(line);
}
br.close();

行號LineNumberReader

FileReader fr=new FileReader("tmp.txt");
LineNumberReader bnr =new LineNumberReader(fr);
String line=null;
while((line=bnr.readLine())!=null){System.out.println(bnr.getLineNumber()+":"+line);
}
bnr.close();
模擬

模擬BufferedReader,自定義一個MyBufferedReader
提高效率,提供一個緩沖區

class MyBufferedReader{private char[] arr=new char[1024]; //緩沖區private int index; //記錄緩沖區使用的下標private int count; //記錄緩沖區中字符的個數private Reader r;  //具備讀功能的流MyBufferedReader(Reader r){this.r=r;}//一次讀一個字符的功能public int myRead()throws IOException{//判斷緩沖區中是否有字符if(count==0){//讀取一批count = r.read(arr);index=0;}if(count<0)return -1;int num = arr[index];index++;count--;return num;}//一次讀一行的功能public String myReadLine()throws IOException{//反復調用一次讀一個字符的功能,當夠一行時返回StringBuilder sb=new StringBuilder();int num;while((num=myRead())!=-1){if(num=='\r')continue;else if(num=='\n')return sb.toString();elsesb.append((char)num);}return null;}public void myClose()throws IOException	{r.close();}
}class Demo1 {public static void main(String[] args) throws IOException{FileReader fr=new FileReader("tmp.txt");MyBufferedReader mbr=new MyBufferedReader(fr);String line=null;while((line=mbr.myReadLine())!=null){System.out.println(line);}mbr.myClose();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18146.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18146.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

英語學習筆記20——Look at them!

Look at them! 看看他們&#xff01; 詞匯 Vocabulary big a. 大的&#xff08;尺寸&#xff0c;年齡&#xff0c;音量……&#xff09; 搭配&#xff1a;big cheese 大人物    big mouth 大嘴巴&#xff08;傳話的人&#xff09;    big talker 吹牛的人 例句&#xf…

【jest - 禁止自動跑test】

最近使用vscode&#xff0c;保存文件時&#xff0c;默認會觸發自動跑test&#xff0c;很煩人&#xff0c;記錄下配置如何配置關閉禁止自動跑jest測試。 打開setting.json&#xff0c;加上下面這句話&#xff0c;即可關閉自動跑 {"jest.runMode": "on-demand&q…

STL源碼刨析:序列式容器之list

目錄 1.前言 2.list的節點定義和結構 3.list的迭代器定義和結構 4.list的定義和結構 5.list的內存管理 6.list的元素操作 前言 在刨析了vector容器的源碼后&#xff0c;list容器相比與vector容器&#xff0c;其元素的插入和刪除較快&#xff0c;不需要對原本容器中的元…

[9] CUDA性能測量與錯誤處理

CUDA性能測量與錯誤處理 討論如何通過CUDA事件來測量它的性能如何通過CUDA代碼進行調試 1.測量CUDA程序的性能 1.1 CUDA事件 CPU端的計時器可能無法給出正確的內核執行時間CUDA事件等于是在你的CUDA應用運行的特定時刻被記錄的時間戳&#xff0c;通過使用CUDA事件API&#…

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 題目鏈接題意分析AC 代碼 題目鏈接 本題是2010年icpc亞洲區域賽大田賽區的G題 題意 平面網格上有n&#xff08;n≤3000&#xff09;個單元格&#xff0c;各代表一個重要的建筑物。為了保證建筑物的安全&#xff0c;警察署給每個建筑物派了一名警察…

MFC 用Imm類庫實現輸入法修改輸入模式

1.導入Imm類庫&#xff0c;電腦里都有 #include <Imm.h> #pragma comment(lib, "imm32.lib")2.在想要的地方增加代碼 HIMC himc ImmGetContext(m_hWnd);if (himc ! NULL) {ImmSetOpenStatus(himc, TRUE);ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL,…

時代終結,微軟宣布淘汰VBScript;Flink漏洞被廣泛利用;Grandoreiro銀行木馬強勢回歸,1500多家銀行成攻擊目標 | 安全周報0524

揭秘SolarMarker惡意軟件&#xff1a;多層次基礎設施讓清除工作陷入困境 Recorded Future的新發現表明&#xff0c;SolarMarker信息竊取惡意軟件背后的持續威脅行為者已經建立了一個多層次的基礎設施&#xff0c;以使執法部門的清除工作變得復雜。 該公司在上周發布的一份報告…

SwiftUI中AppStorage的介紹使用

在Swift中&#xff0c;AppStorage是SwiftUI中引入的一個屬性包裝器&#xff0c;在這之前我們要存儲一些輕量級的數據采用UserDefaults進行存取。而AppStorage用于從UserDefaults中讀取值&#xff0c;當值改變時&#xff0c;它會自動重新調用視圖的body屬性。也就是說&#xff0…

React@16.x(11)ref

目錄 1&#xff0c;介紹1.1&#xff0c;得到的結果 2&#xff0c;參數類型2.1&#xff0c;字符串&#xff08;不再推薦&#xff09;2.2&#xff0c;對象2.3&#xff0c;函數函數調用時機 3&#xff0c;注意點 1&#xff0c;介紹 reference 引用。和 vue 中的 refs 類似&#x…

IEC60870-5-104通信規約 | 報文解析 | 組織報文與解析報文(C++)

文章目錄 一、IEC60870-5-104通信規約1.IEC104的報文結構2.IEC104的報文格式--I/U/S格式2.1 I幀2.2 U幀2.3 S幀 3.應用服務數據單元ASDU 二、IEC60870-5-104規約通信過程報文幀解析三、組織報文與解析報文&#xff08;C&#xff09; 一、IEC60870-5-104通信規約 IEC60870-5-104…

golang 守護進程管理

添加守護進程 vim /etc/systemd/system/xxx.service [Unit] DescriptionGo Socket Service Afternetwork.target[Service] Typesimple ExecStart/data/quwan/quwan_ws WorkingDirectory/data/quwan # 停止前發送信號 ExecStop/bin/kill -SIGTERM $MAINPID # 如果超過20s 進程…

筆記-Python lambda

在學習python的過程中&#xff0c;lambda的語法時常會使人感到困惑&#xff0c;lambda是什么&#xff0c;為什么要使用lambda&#xff0c;是不是必須使用lambda&#xff1f; 下面就上面的問題進行一下解答。 1、lambda是什么&#xff1f; 看個例子&#xff1a; 1 g lambda…

什么是GPT-4o,推薦GPT-4o的獲取使用方法,使用GPT4o模型的最新方法教程(2024年5月16更新)

2024年5月最新GPT-4o模型使用教程和簡介 2024年5月最新GPT-4o模型使用教程和簡介 2024 年 5 月 13 日&#xff0c;openai 發布了最新的模型 GPT4o。 很多同學還不知道如何訪問GPT-4、GPT-4 Turbo和GPT-4o等模型&#xff0c;這篇文章介紹如何在ChatGPT中訪問GPT-4o&#xff0…

milvus索引

Milvus是一個開源的向量數據庫引擎&#xff0c;旨在支持大規模向量相似度搜索和分析。索引在Milvus中扮演著非常重要的角色&#xff0c;它們用于加速向量數據的檢索。下面詳細介紹一下Milvus中的索引&#xff1a; 1. 索引類型 Milvus支持多種索引類型&#xff0c;每種類型都適…

無人機偵察:雷達系統概述

一、雷達基本原理 無人機偵察中的雷達系統主要基于無線電波的傳播和反射原理。雷達發射機產生特定頻率的電磁波&#xff0c;并通過天線以定向波束形式向空間發射。當這些電磁波遇到目標時&#xff0c;部分能量會被反射回來&#xff0c;被雷達接收機捕獲。通過測量發射和接收電…

基于SpringBoot+Vue+Redis+Mybatis的商城購物系統 【系統實現+系統源碼+答辯PPT】

前言 該系統采用SpringBootVue前后端分離開發&#xff0c;前端是一個單獨的項目&#xff0c;后端是一個單獨的項目。 ??技術棧&#xff1a;SpringBootVueMybatisRedisMysql ??開發工具&#xff1a;IDEA、Vscode ??瀏覽器&#xff1a;Chrome ??開發環境&#xff1a;JDK1…

Pytorch 筆記

執行下面這段代碼后&#xff0c;為什么返回的是 2 &#xff1f; vector torch.tensor([7, 7]) vector.shape為什么返回的是 torch.Size([2])&#xff1f; 當你創建一個PyTorch張量時&#xff0c;它會記住張量中元素的數量和每個維度的大小。在你的代碼中&#xff0c;torch.t…

通過 js 調起微信官方的微信支付api

通過 js 調起微信官方的微信支付api function onBridgeReady() {WeixinJSBridge.invoke(getBrandWCPayRequest, { "appId": "wx2421b1c4370ec43b", // 公眾號ID&#xff0c;由商戶傳入 "timeStamp": "1395712654", // 時間戳&quo…

動態插入HTML內容有哪些常見用法

動態插入HTML內容的常見用法包括但不限于以下幾種情況&#xff1a; 用戶交互反饋&#xff1a;當用戶在網頁上進行某些操作時&#xff08;如點擊按鈕、提交表單等&#xff09;&#xff0c;可以使用JavaScript動態插入HTML內容來提供即時的反饋或結果。例如&#xff0c;當用戶點…

vue3第三十五節(TS 之 泛型)

本節介紹 ts 中泛型的常用情景 1 什么是泛型 泛型的本質是參數化類型&#xff0c;也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創建中&#xff0c;分別稱為泛型類、泛型接口、泛型方法。 泛型使用<T>來定義類型&#xff0c;<T…