Java:字節流 文件輸出與讀入方法 并 實現文件拷貝

文章目錄

    • 字節 流
      • FileOutputStream
      • 換行 與 續寫
      • FileInputstream
      • 實現 文件拷貝(字節數組 讀入方法)
      • 字節流 編碼

字節 流

FileOutputStream

  1. 創建對象,指定位置(產生數據傳輸通道)
    參數可以是File對象,也可以是路徑
    如果文件不存在,且父級路徑正確,會新建文件
    如果文件存在,會清空文件
  2. 寫出數據
    ASCII對應 字符
    可以傳入字節流,指定起始位置,長度
  3. 釋放資源
    解除資源占用
package com.io.testdemo1;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class test1 {public static void 	main(String[] args) throws IOException {// 創建對象,指定位置(產生數據傳輸通道)FileOutputStream fos = new FileOutputStream("src/aaa.txt");// 寫入數據fos.write(97);byte[] bytes = {97, 98, 99, 100};fos.write(bytes);fos.write(bytes, 0, 2);// 釋放資源fos.close();}
}

在這里插入圖片描述

換行 與 續寫

換行:
write(“\r\n”) 即可 linux只寫\n即可 mac寫\r
\r 表示回車 \n 表示換行
早期\r表示,回到此行開頭,\n才表示換行,一直沿用了下來。

續寫: 在輸出流對象的第二個參數中,加入true,表示打開續寫開關。

例子:

package com.io.testdemo1;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class test1 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("src/aaa.txt", true);// 寫入數據String str1 = "hello";byte[] bytes1 = str1.getBytes();fos.write(bytes1);// 寫入換行String str2 = "\r\n";byte[] bytes2 = str2.getBytes();fos.write(bytes2);fos.close();}
}

運行兩次的結果:
在這里插入圖片描述

可以發現第二次續寫了,并沒有清空,同時換行了。

FileInputstream

與輸出相似。

  1. 創建對象(搭建橋梁)
    如果文件不存在則直接報錯
  2. 讀入(返回值為int)
    一次讀一個字節,ASCII對應的數字 (每次讀相當于一次指針的移動)
    讀到末尾時返回-1
  3. 釋放資源
package com.io.testdemo2;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class test2 {public static void main(String[] args) throws IOException {// 創建對象FileInputStream fis = new FileInputStream("src/aaa.txt");// 循環 讀入int b; // 用變量去接收,要是條件和循環體內都read會跳兩次while ((b = fis.read()) != -1) {System.out.print((char)b);}// 釋放資源fis.close();}
}

運行結果與文件內容相同,說明成功讀取成功:
在這里插入圖片描述
在這里插入圖片描述

實現 文件拷貝(字節數組 讀入方法)

read可以傳入byte數組,這樣可以一次讀入一個字節數組大小,速度會快很多,大小最好為1024的整數倍。

注意:返回值變成了長度,讀完會返回-1。

將aaa.txt拷貝bbb.txt:

package com.io.copydemo;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class test3 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("src/aaa.txt");FileOutputStream fos = new FileOutputStream("src/bbb.txt");byte[] bytes = new byte[4096];int len;while ((len = fis.read(bytes)) != -1) {fos.write(bytes, 0, len);}fis.close();fos.close();}
}

運行結果:
在這里插入圖片描述

字節流 編碼

最好不要用字節流取讀取文本文件。
編碼和解碼要統一。

idea默認utf-8,字母1字節,漢字3字節
eclipse默認jbk,字母1字節,漢字2字節

package com.io;import java.io.UnsupportedEncodingException;public class demo4 {public static void main(String[] args) throws UnsupportedEncodingException {String str = "abc你好";byte[] bytes = str.getBytes("GBK");String res1 = new String(bytes, "GBK");String res2 = new String(bytes, "UTF-8");System.out.println(res1); // abc你好System.out.println(res2); // abc���}
}

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

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

相關文章

特征驅動開發

FDD 方法來自于一個大型的新加坡銀行項目。FDD 的創立者 Jeff De Luca 和 Peter Coad 分別是這個項目的項目經理和首席架構設計師。在 Jeff 和 Peter 接手項目時,客戶已經經歷了一次項目的失敗,從用戶到高層都對這個項目持懷疑的態度,項目組士…

mysql面試題——日志

一:為什么需要REDO日志 緩沖池可以幫助我們消除CPU和磁盤之間的鴻溝,checkpoint機制可以保證數據的最終落盤,然而由于checkpoint 并不是每次變更的時候就觸發 的,而是master線程隔一段時間去處理的。所以最壞的情況就是事務提交后…

持續集成交付CICD:Jenkins配置Nexus制品發布

目錄 一、實驗 1.Jenkins配置Nexus制品發布 一、實驗 1.Jenkins配置Nexus制品發布 (1)策略 發布其實就是下載制品,然后將制品發送到目標主機,最后通過腳本或者指令啟動程序。 (2)安裝Maven Artifact …

前端知識(十一)———js判斷上傳的文件是GBK編碼還是UTF-8

1、獲取文件二進制數據,這里只做示例,例如element-ui中文件上傳的beforeUpload方法,返回的file對象,然后使用FileReader對其進行轉換,再進行后續判斷 function beforeUpload(file: File) { const reader new FileRe…

uniapp圖片預覽

用的是Uview組件庫里面的 直接在頁面寫上&#xff1a; <u-album singleSize"100" :urls"[https://lxt.jingyi.icu/item.img]"></u-album> 這圖片路徑是我自己的 你們可以按照組件庫里面的方法去實現

DataFrame的使用

查看數據類型及屬性 # 查看df類型 type(df) # 查看df的shape屬性&#xff0c;可以獲取DataFrame的行數&#xff0c;列數 df.shape # 查看df的columns屬性&#xff0c;獲取DataFrame中的列名 df.columns # 查看df的dtypes屬性&#xff0c;獲取每一列的數據類型 df.dtypes df.i…

標準成本核算基礎知識 – 了解間接費用成本流程 - Part4

原文地址&#xff1a;Basics of Standard Costing – Understanding overhead cost flow-Part 4 | SAP Blogs 這是我理解標準成本計算及其流程的另一篇文檔的延續。 標準成本核算基礎知識 - 了解成本構成結構 - 第 3 部分 管理費用是只能間接歸因于產品的成本&#xff0c;例如…

react中使用react-konva實現畫板框選內容

文章目錄 一、前言1.1、API文檔1.2、Github倉庫 二、圖形2.1、拖拽draggable2.2、圖片Image2.3、變形Transformer 三、實現3.1、依賴3.2、源碼3.2.1、KonvaContainer組件3.2.2、use-key-press文件 3.3、效果圖 四、最后 一、前言 本文用到的react-konva是基于react封裝的圖形繪…

基礎課20——從0-1客服機器人生命周期

溫馨提示&#xff1a;篇幅較長&#xff0c;可點擊目錄查看對應節點。 1.機器人搭建期 搭建機器人包含&#xff1a;素材整理、問題提煉、相似問題補充、答案編輯、問題分配引擎等等步驟&#xff0c;不同廠商可能有所區別&#xff0c;但關鍵功能的實現離不開以下步驟。 1.1素材…

Flutter路由的幾種用法

Flutter路由跳轉 基本路由跳轉 ElevatedButton(onPressed: () {//基本路由跳轉Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage();}),);},child: const Text("基本路由跳轉"), ), search.dart頁面 impo…

說說react的事件機制?

React的事件機制是一種用于處理用戶界面事件的方式&#xff0c;它建立在原生DOM事件的基礎上&#xff0c;提供了一種更高級、更一致的方式來處理事件。 1. 合成事件&#xff08;Synthetic Events&#xff09;&#xff1a;React引入了合成事件的概念&#xff0c;它是一種React自…

K8S學習指南(3)-minikube的安裝

這里寫自定義目錄標題 簡介Windows 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&#xff1a;安裝 Minikube步驟 4&#xff1a;啟動 Minikube CentOS 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&…

《形式語言與自動機理論(第4版)》筆記(三)

文章目錄 [toc]前導《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;一&#xff09;《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;二&#xff09; 第四章&#xff1a;正則表達式4.1|啟示4.2|正則表達式的形式定義正則表達式性…

排序算法之四:直接選擇排序

1.基本思想 每一次從待排序的數據元素中選出最小&#xff08;或最大&#xff09;的一個元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的數據元素排完 。 2.直接選擇排序 在元素集合array[i]--array[n-1]中選擇關鍵碼最大(小)的數據元素 若它不是這組元素中的…

練習:最大公約數

1.什么是公約數 公約數&#xff0c;亦稱“公因數”。 它是指能同時整除幾個整數的數 。 如果一個整數同時是幾個整數的 約數 &#xff0c;稱這個整數為它們的“公約數”&#xff1b;公約數中最大的稱為最大公約數。 2.輾轉相除法 輾轉相除法之所以有效是因為其基于一個核心原…

給定有n個結點的樹和長度為n的排列,q次詢問:l, r, x, 若p[l, r]中存在至少一個結點是x的后代,輸出yes,否則輸出no

題目 #include<bits/stdc.h> using namespace std; const int maxn 1e6 5; int n, q; vector<int> G[maxn]; int L[maxn], R[maxn];//L[i]表示結點i的時間戳&#xff0c;R[i]表示結點i的后代中時間戳的最大值 int p[maxn]; int t[maxn]; struct Node{int id, fl…

MapReduce

1. 請解釋MapReduce的工作原理。 MapReduce是一種編程模型&#xff0c;主要用于大規模數據集&#xff08;特別是非結構化數據&#xff09;的并行處理。這個模型的核心思想是將大數據處理任務分解為兩個主要步驟&#xff1a;Map和Reduce。 在Map階段&#xff0c;輸入數據被分解…

ssm的健身房預約系統(有報告)。Javaee項目。ssm項目。

演示視頻&#xff1a; ssm的健身房預約系統&#xff08;有報告&#xff09;。Javaee項目。ssm項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0c;通過Spring Spring…

AI模型平臺Hugging Face存在API令牌漏洞;大型語言模型與任務模型

&#x1f989; AI新聞 &#x1f680; AI模型平臺Hugging Face存在API令牌漏洞&#xff0c;黑客可竊取、修改模型 摘要&#xff1a;安全公司Lasso Security發現AI模型平臺Hugging Face上存在API令牌漏洞&#xff0c;黑客可獲取微軟、谷歌等公司的令牌&#xff0c;并能夠訪問模…

c++中的內聯函數和編譯器

內聯函數和編譯器&#xff1a; 內聯函數并不是何時何地都有效&#xff0c;為了理解內聯函數何時有效&#xff0c;應該要知道編譯器碰到內聯 函數會怎么處理&#xff1f; 對于任何類型的函數&#xff0c;編譯器會將函數類型(包括函數名字&#xff0c;參數類型&#xff0c;返回值…