Java字元流和位元組流對文件操作

来源:http://www.cnblogs.com/xwlych/archive/2016/10/22/5987022.html
-Advertisement-
Play Games

記得當初自己剛開始學習Java的時候,對Java的IO流這一塊特別不明白,所以寫了這篇隨筆希望能對剛開始學習Java的人有所幫助,也方便以後自己查詢。Java的IO流分為字元流(Reader,Writer)和位元組流(InputStream,OutputStream),位元組流顧名思義位元組流就是將文件的 ...


記得當初自己剛開始學習Java的時候,對Java的IO流這一塊特別不明白,所以寫了這篇隨筆希望能對剛開始學習Java的人有所幫助,也方便以後自己查詢。Java的IO流分為字元流(Reader,Writer)和位元組流(InputStream,OutputStream),位元組流顧名思義位元組流就是將文件的內容讀取到位元組數組,然後再輸出到另一個文件中。而字元流操作的最小單位則是字元。可以先看一下IO流的概述:

 

下麵首先是通過字元流對文件進行讀取和寫入:

 1 package lib;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileReader;
 7 import java.io.FileWriter;
 8 import java.io.IOException;
 9 import java.io.PrintWriter;
10 
11 public class Test {
12     // 定義文件路徑
13     File f = new File("F:\\test.txt");
14     //字元流寫入的方法
15     public String writeInFile() throws IOException{
16         String str = "";
17         String count = "";
18         try {
19             // 使用字元流對文件進行讀取
20             BufferedReader bf = new BufferedReader(new FileReader(f));
21             while (true) {
22                 //讀取每一行數據並將其賦值給str
23                 if ((count = bf.readLine()) != null) {
24                     str += count;
25                 } else {
26                     break;
27                 }
28             }
29             // 關閉流
30             bf.close();
31         } catch (FileNotFoundException e) {
32             e.printStackTrace();
33         }
34         return str;
35     }
36     //字元流讀取的方法
37     public  void getReader(){
38         try {
39             //其中true表示在原本文件內容的尾部添加,若不寫則表示清空文件後再添加內容
40             PrintWriter pw=new PrintWriter(new FileWriter(f,true));
41             pw.write("測試輸入字元串到文件中2");
42             pw.close();
43         } catch (IOException e) {
44             e.printStackTrace();
45         }
46     }
47     public static void main(String[] args) throws IOException {
48         Test test=new Test();
49         //將字元串輸入到文件中
50         test.getReader();
51         //讀取相對應的字元串
52         String str=test.writeInFile();
53         //將文件中內容在控制台輸出
54         System.out.println("文件內容為:"+str);
55     }
56 }

上述代碼的關鍵地方都有註釋,就不再一一贅述了,主要就是在使用完流之後不要忘記關閉就好(行30,行42)

然後是通過位元組流的方式對文件進行操作,將一個文件中的內容複製到另一個文件中:

 1 package com.file.test2;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 
 9 public class TestFile2 {
10     //使用位元組流讀取並寫入文件,將一個文件複製到另一個文件中
11     public static void main(String[] args) throws IOException {
12         //要複製的源文件
13         File f=new File("D:\\test.txt");
14         //目標文件
15         File f2=new File("D:\\test2.txt");
16         //定義一個byte類型的數組,用於存儲讀取到的內容
17         byte [] b=new byte[1024];
18         int length;
19         try {
20             //定義讀取的流
21             FileInputStream in=new FileInputStream(f);
22             //定義輸出到文件的流
23             FileOutputStream out=new FileOutputStream(f2);
24             //將文件內容輸出到另一個文件中
25             while((length=in.read(b))!=-1){
26                 out.write(b, 0, length);
27             }
28             out.close();
29             in.close();
30         } catch (FileNotFoundException e) {
31             e.printStackTrace();
32         }
33     }
34 }

在位元組流的操作中,第13行的源文件必須存在,可以根據需要自行更改文件路徑,只需要存在即可,否則會報文件找不到的錯誤,同時若想在控制台輸出讀取到的位元組流的內容則可以在第27和28行之間加兩句代碼:in.read(b, 0, b.length);System.out.println(new String(b));

以上就是字元流和位元組流的相關操作,其實代碼不難,主要是自己的理解,相同的問題每個人都會有不同的理解方式,當然,對於我們編程人員來說,除了要多思考之外還要多動手。最後希望以上內容能對大家有所幫助


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java Virtual Machine Stacks,線程私有,生命周期與線程相同,描述的是Java方法執行的記憶體模型:每一個方法執行的同時都會創建一個棧幀(Stack Frame),由於存儲局部變數表、操作數棧、動態鏈接、方法出口等信息。每一個方法的執行就對應著棧幀在虛擬機棧中的入棧,出棧過程。 ...
  • 大家好!今天帶來的是自己實現的用C++實現的10以內整數的科學計算器,其中涉及中綴表達式到尾碼表達式(逆波蘭表示法),尾碼表達式的求值,涉及棧這一數據結構的壓棧,彈棧,存取棧頂元素和判斷棧是否為空等操作. 計算器在生活中應用廣泛.眾所周知,我們往計算器中輸入的是由數字,運算符組成的表達式,這個表達式 ...
  • 內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類 如同一個人是由大腦、肢体、器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟:它也有自己的屬性和行為(血液、跳動) 顯然,此處不能單方面用屬性或者方法表示一個心臟,而需要一個類 而心臟又在人體當中,正如同是內部類在外部內當 ...
  • 首先看這兩類都實現List介面,而List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重覆。3個具體實現類的相關區別如下: 查看Java源代碼,發現當數組的大小不夠的時候,需要重新建立數組,然後將元素 ...
  • 前言 項目的模塊化有利於任務分工,後期維護,易擴展,模塊還可以獨立成服務單獨部署等; 創建packaging類型為POM的父項目 我用的maven插件是m2e,相信大部分人在eclipse裝的也是m2e插件;廢話不說,直接開始: 菜單選擇新建maven project,註意選擇創建一個簡單工程,如下 ...
  • 一、複製影片剪輯 1.方法:duplicatemovieClip(影片實名,新實名,深度級別) 2.解釋:影片實名就是你要複製的對象,新實名就是你要粘貼的對象,深度級別就是粘貼後的影片剪輯的堆疊順序(頂層、底層等)。 3.例如:我們先繪製一個影片剪輯,其實例名設為mc,再繪製一個按鈕,在該按鈕上添加 ...
  • 引入別人的項目發現利用HibernateTemplate的load的方法報錯了。錯誤提示為: The method load(Class, Serializable) in the type HibernateTemplate is not applicable for the arguments ...
  • Spring AOP應用:xml配置及註解實現。 動態代理:jdk、cglib、javassist 緩存應用:高速緩存提供程式ehcache,頁面緩存,session緩存 項目地址:https://github.com/windwant/spring-aop-test ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...