1. 程式人生 > >AndroidIO流讀寫檔案

AndroidIO流讀寫檔案

一、概念

檔案在程式中是以的形式來操作的。

流:是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱或抽象。即資料在兩個儲存位置之間的傳輸稱為流。流的本質是資料傳輸,根據資料傳輸特性將流抽象為各種類,方便更直觀的進行資料操作。

二、分類

1、按照流向劃分:輸入流、輸出流


   以記憶體為參照:

   輸入流:從檔案流向記憶體

    輸出流:從記憶體流向檔案

2、按照傳輸單位劃分:位元組流、字元流


位元組流:可以用於讀寫二進位制檔案及任何型別檔案。

字元流:可以用於讀寫文字檔案。

三、位元組流VS字元流的區別

字元流的由來: 因為資料編碼的不同,從而有了對字元進行高效操作的流物件。本質其實就是基於位元組流讀取時,去查了指定的碼錶。

區別:

1、讀寫單位不同:位元組流以位元組(1 byte,1byte=8bit)為單位,字元流以字元為單位,根據碼錶對映字元,一次可能讀多個位元組。
2、處理物件不同位元組流能處理所有型別的資料(如圖片、avi等),而字元流只能處理字元型別的資料
3、快取。位元組流在操作的時候本身是不會用到緩衝區的,是檔案本身的直接操作的;而字元流在操作的時候下後是會用到緩衝區的,是通過緩衝區來操作檔案。

總結優先選用位元組流。因為硬碟上的所有檔案都是以位元組的形式進行傳輸或者儲存的,包括圖片等內容。字元只是在記憶體中才會形成的,所以在開發中,位元組流使用廣泛。

四、具體的案例講解

案例0

功能:1、建立資料夾、檔案 2、遍歷資料夾下面的所有檔案

  1. publicclass Test1 {  
  2.     publicstaticvoid main(String[] args) {  
  3.         // TODO Auto-generated method stub
  4.         //建立新資料夾物件ff
  5.         File f1 = new File("D:/FF");   
  6.         //如果存在
  7.         if(f1.isDirectory()){  
  8.             System.out.println("已經存在該資料夾!");  
  9.             //將資料夾下面的所有檔案 組成陣列
  10.             File lists[] = f1.listFiles();  
  11.             System.out.println("ff資料夾下面有"+lists.length+"個檔案");  
  12.             //遍歷,取出所有的檔名稱
  13.             for(int i=0;i<lists.length;i++){  
  14.                 System.out.println("檔名 :" +lists[i].getName());  
  15.             }  
  16.         }else {  
  17.             //如果不存在該資料夾,則輸出
  18.             System.out.println("該資料夾不存在!");  
  19.             f1.mkdir();  
  20.         }  
  21.         //在該資料夾下面建立 新的檔案
  22.         File f2 = new File("d:\\ff\\psp.txt");  
  23.         //如果存在在檔案
  24.         if(f2.exists()){  
  25.             System.out.println("已經存在該檔案");  
  26.         }else{  
  27.             try {  
  28.                 f2.createNewFile();  
  29.             } catch (IOException e) {  
  30.                 // TODO Auto-generated catch block
  31.                 e.printStackTrace();  
  32.             }  
  33.         }  
  34.     }  
  35. }  
案例1

功能:從資料來源中讀取資料到記憶體(FileInputStream的使用

  1. /** 
  2.  * 功能:從資料來源中讀取資料到記憶體 
  3.  */
  4. publicclass Test {  
  5.     publicstaticvoid main(String[] args) {  
  6.         // TODO Auto-generated method stub
  7.         File f1 = new File("d:\\ff\\test.txt");  
  8.         FileInputStream fis=null;  
  9.         try {  
  10.             fis = new FileInputStream(f1);  
  11.             byte[] bytes= newbyte[1024];  
  12.             //得到實際讀取的長度
  13.             int n=0;  
  14.             //迴圈讀取
  15.             while((n=fis.read(bytes))!=-1){  
  16.                 String s = new String(bytes,0,n);  
  17.                 System.out.print(s);  
  18.             }  
  19.         } catch (Exception e) {  
  20.             // TODO Auto-generated catch block
  21.             e.printStackTrace();  
  22.         }finally{  
  23.             //最後一定要關閉檔案流
  24.             try {  
  25.                 fis.close();  
  26.             } catch (IOException e) {  
  27.                 // TODO Auto-generated catch block
  28.                 e.printStackTrace();  
  29.             }  
  30.         }  
  31.     }  
  32. }  
案例2

功能:演示FileOutputStream,從記憶體中讀取資料到資料來源

  1. publicclass Test {  
  2.     publicstaticvoid main(String[] args) {  
  3.         // TODO Auto-generated method stub
  4.         File f1 = new File("d:\\ff\\test.txt");  
  5.         FileOutputStream fos = null;  
  6.         try {  
  7.             fos = new FileOutputStream(f1);  
  8.             String s="我是曾可達,我是曾可達!\r\n";  
  9.             String s2="聽到請回答!";  
  10.             byte bytes[] = newbyte[1024];   
  11.             fos.write(s.getBytes());          
  12.             fos.write(s2.getBytes());  
  13.         } catch (Exception e) {  
  14.             // TODO Auto-generated catch block
  15.             e.printStackTrace();  
  16.         }finally{  
  17.             try {  
  18.                 fos.close();  
  19.             } catch (IOException e) {  
  20.                 // TODO Auto-generated catch block
  21.                 e.printStackTrace();  
  22.             }  
  23.         }  
  24.     }  
  25. }  

案例3

功能:演示FileInputStream ,FileOutputStream ;將圖片從C盤拷貝到D盤

  1. publicclass Test {  
  2.     publicstaticvoid main(String[] args) {  
  3.         //定義輸入流
  4.         FileInputStream fis =null;  
  5.         //定義輸出流
  6.         FileOutputStream fos=null;  
  7.         try {  
  8.             fis = new FileInputStream("c:\\boy.jpg");  
  9.             fos = new FileOutputStream("d:\\boy.jpg");  
  10. 相關推薦

    AndroidIO檔案

    一、概念檔案在程式中是以流的形式來操作的。流:是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱或抽象。即資料在兩個儲存位置之間的傳輸稱為流。流的本質是資料傳輸,根據資料傳輸特性將流抽象為各種類,方便更直觀的進行資料操作。二、分類1、按照流向劃分:輸入流、輸出流 

    C++利用一個fstream檔案

    原文地址:https://blog.csdn.net/qq_34176290/article/details/80260377 fstream物件可以同時具有ifstream和ofstream的功能,嘗試使用一個流對檔案進行讀寫的程式碼如下:

    重溫IO檔案

    前段時間寫後臺跑批每天生成一個增量檔案,今天有空將IO讀寫檔案重溫一下,複製一個文字檔案內容到另外一個文字檔案中; 程式碼如下:使用了5種方式 import java.io.BufferedInputStream; import java.io.BufferedOutputStr

    Io檔案

    public static void main(String[] args) throws Exception{File file = new File("D:/d.txt");StringBuilder sb = new StringBuilder();String s

    IO檔案並排序

    package com.drzhang.dao; import java.util.Objects; public class User implements Comparable { private String username; private In

    Java IO檔案的幾個注意點

      平時寫IO相關程式碼機會挺少的,但卻都知道使用BufferedXXXX來讀寫效率高,沒想到裡面還有這麼多陷阱,這兩天突然被其中一個陷阱折騰一下:讀一個檔案,然後寫到另外一個檔案,前後兩個檔案居然不一樣?      解決這個問題之後,總結了幾個注意點。 注意點一:Rea

    io檔案(檔案內容修改)

    package cn.sos.psasps; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i

    IO檔案例項

    最近的科研大量需要用Java讀寫檔案,所以在此對常用的用IO流讀寫檔案的Java實現記錄分享一下:package myLearningTest; import java.io.BufferedReader; import java.io.File; import java.

    python--檔案

    在講述fileinput模組之前,首先說一下python內建的檔案API—open()函式以及與其相關的函式。 我這裡主要講講其中四個比較重要和常用的方法,更多的方法,可以參考:菜鳥教程http://www.runoob.com/python/file-methods.html   &

    位元組磁碟中的檔案

    1.Java語言中的輸入輸出系統 Java語言將輸入和輸出任務交給了類庫來完成,而不是在語言的層面上對輸入和輸出提供支援 2.流 什麼是流:一組有序的資料序列; 3.流的分類: 按方向來分: 輸入流(用來讀)和輸出流(用來寫)。這裡的輸入輸出是以JVM為參考 按大

    C#常用IO檔案

    1.檔案系統 (1)檔案系統類的介紹     檔案操作類大都在System.IO名稱空間裡。FileSystemInfo類是任何檔案系統類的基類;FileInfo與File表示檔案系統中的檔案;DirectoryInfo與Directory表示檔案系統中的資料夾;Path表

    淺談JAVA位元組檔案

    InputStream  此抽象類是表示位元組輸入流的所有類的超類。需要定義 InputStream 的子類的應用程式必須始終提供返回下一個輸入位元組的方法。  int available()  返回此輸入流方法的下一個呼叫方可以不受阻塞地從此輸入流讀取(或跳過)的位

    java以位元組形式檔案

    java中以位元組流的形式讀取檔案採用的是FileInputStream,將指定路徑的檔案以位元組陣列的形式迴圈讀取,程式碼如下:public void ReadFileByByte(String p

    【 I/O檔案輸入與輸出(Scanner)& Scanner和io有何區別?(待填坑)

    對檔案進行讀取,僅需要用File物件構造一個Scanner物件Scanner in= new Scanner(Paths.get("myfile.tet"),"UTF-8");如果檔名中含反斜槓符號,需要在每個反斜槓之前加一個額外的反斜槓如:“c:\\mydirectory\

    關於 Delphi 中流的使用(6) 用結構化檔案

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TF

    java IO之三 使用緩衝檔案

    一、通過BufferedReader和BufferedWriter來讀寫檔案      使用緩衝流的好處是,能夠更高效的讀寫資訊,原理是將資料先緩衝起來,然後一起寫入或者讀取出來。經常使用的是readLine()方法,表示一次讀取一行資料。 package org.exa

    關於 Delphi 中流的使用(2) 用 TFileStream(檔案)

    TStream 是一個抽象的基類, 不能直接生成物件. 在具體的應用中, 主要使用它的子孫類: TFileStream: 檔案流 TStringStream: 字串流 TMemoryStream: 記憶體流 TResourceStream: 資原始檔流 THandleStream: 是 TFileStrea

    運算子過載,方便檔案中的數值資料

    namespace NumbericalStream { template <class T> std::ofstream& operator << (std::ofstream& os, const T out) { os.writ

    檔案問題彙總

          序:工作遇見檔案流問題,查閱網上資料,這篇文章較好,儲存以便後續查閱;  1.流的三種形態(均是char組成的,流物件不支援複製操作,因此不能儲存在vector 物件中): 【1】控制檯流物件-  istream - ostream -iostream; 【

    java檔案操作

    優化BufferedRandomAccessFile。 優化原則:     呼叫頻繁的語句最需要優化,且優化的效果最明顯。     多重巢狀邏輯判斷時,最可能出現的判斷,應放在最外層。     減少不必要的NEW。 這裡舉一典型的例子: Java程式碼