AndroidIO流讀寫檔案
一、概念
檔案在程式中是以流的形式來操作的。
流:是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱或抽象。即資料在兩個儲存位置之間的傳輸稱為流。流的本質是資料傳輸,根據資料傳輸特性將流抽象為各種類,方便更直觀的進行資料操作。
二、分類
1、按照流向劃分:輸入流、輸出流
以記憶體為參照:
輸入流:從檔案流向記憶體
輸出流:從記憶體流向檔案
2、按照傳輸單位劃分:位元組流、字元流
位元組流:可以用於讀寫二進位制檔案及任何型別檔案。
字元流:可以用於讀寫文字檔案。
三、位元組流VS字元流的區別
字元流的由來: 因為資料編碼的不同,從而有了對字元進行高效操作的流物件。本質其實就是基於位元組流讀取時,去查了指定的碼錶。
區別:
1、讀寫單位不同:位元組流以位元組(1 byte,1byte=8bit)為單位,字元流以字元為單位,根據碼錶對映字元,一次可能讀多個位元組。
2、處理物件不同:位元組流能處理所有型別的資料(如圖片、avi等),而字元流只能處理字元型別的資料。
3、快取。位元組流在操作的時候本身是不會用到緩衝區的,是檔案本身的直接操作的;而字元流在操作的時候下後是會用到緩衝區的,是通過緩衝區來操作檔案。
總結:優先選用位元組流。因為硬碟上的所有檔案都是以位元組的形式進行傳輸或者儲存的,包括圖片等內容。字元只是在記憶體中才會形成的,所以在開發中,位元組流使用廣泛。
四、具體的案例講解
案例0
功能:1、建立資料夾、檔案 2、遍歷資料夾下面的所有檔案
- publicclass Test1 {
- publicstaticvoid main(String[] args) {
- // TODO Auto-generated method stub
- //建立新資料夾物件ff
- File f1 = new File("D:/FF");
- //如果存在
- if(f1.isDirectory()){
- System.out.println("已經存在該資料夾!");
- //將資料夾下面的所有檔案 組成陣列
- File lists[] = f1.listFiles();
- System.out.println("ff資料夾下面有"+lists.length+"個檔案");
- //遍歷,取出所有的檔名稱
- for(int i=0;i<lists.length;i++){
- System.out.println("檔名 :" +lists[i].getName());
- }
- }else {
- //如果不存在該資料夾,則輸出
- System.out.println("該資料夾不存在!");
- f1.mkdir();
- }
- //在該資料夾下面建立 新的檔案
- File f2 = new File("d:\\ff\\psp.txt");
- //如果存在在檔案
- if(f2.exists()){
- System.out.println("已經存在該檔案");
- }else{
- try {
- f2.createNewFile();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
功能:從資料來源中讀取資料到記憶體(FileInputStream的使用)
- /**
- * 功能:從資料來源中讀取資料到記憶體
- */
- publicclass Test {
- publicstaticvoid main(String[] args) {
- // TODO Auto-generated method stub
- File f1 = new File("d:\\ff\\test.txt");
- FileInputStream fis=null;
- try {
- fis = new FileInputStream(f1);
- byte[] bytes= newbyte[1024];
- //得到實際讀取的長度
- int n=0;
- //迴圈讀取
- while((n=fis.read(bytes))!=-1){
- String s = new String(bytes,0,n);
- System.out.print(s);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- //最後一定要關閉檔案流
- try {
- fis.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
功能:演示FileOutputStream,從記憶體中讀取資料到資料來源
- publicclass Test {
- publicstaticvoid main(String[] args) {
- // TODO Auto-generated method stub
- File f1 = new File("d:\\ff\\test.txt");
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(f1);
- String s="我是曾可達,我是曾可達!\r\n";
- String s2="聽到請回答!";
- byte bytes[] = newbyte[1024];
- fos.write(s.getBytes());
- fos.write(s2.getBytes());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- fos.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
案例3
功能:演示FileInputStream ,FileOutputStream ;將圖片從C盤拷貝到D盤
- publicclass Test {
- publicstaticvoid main(String[] args) {
- //定義輸入流
- FileInputStream fis =null;
- //定義輸出流
- FileOutputStream fos=null;
- try {
- fis = new FileInputStream("c:\\boy.jpg");
- fos = new FileOutputStream("d:\\boy.jpg");
-
相關推薦
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程式碼