1. 程式人生 > >java IO 流(二)寫檔案和讀檔案

java IO 流(二)寫檔案和讀檔案

例如:寫文字檔案,在D盤目錄建立文字檔案Hello.txt,並往裡寫入若干行文字。

importjava.io.*;

/*

* 寫入到D盤一個文字檔案,並往裡寫入若干行文字。

*如果該次磁碟下有重複的內容,則刪除重複的內容後再寫入一個新的內容。

*/

publicclass TestWriteText

{

publicstatic void main(String[] args)

{

//main方法中宣告丟擲IO異常。

//定義寫入路徑的字串。

String fileName ="D:\\Hello.txt";

try

{

//使用面向字元流的FileWriter類。

//直接呼叫構造方法,傳遞寫入路徑。FileWriter

類的構造方法有五個。

FileWriterwriter = new FileWriter(fileName);

//FileWriter類的Write()方法向檔案中寫入字元。

writer.write("Hello!\n");

writer.write("Thisis my first text file,\n");

writer.write("I'mvery happy!\n");

writer.write("EveryDay is a new Day!\n");

writer.write("我愛我家!");

//清空流裡的內容並關閉它,如果不呼叫該方法還沒有完成所有資料的寫操作,程式就結束了。

writer.close();

}

catch(IOException iox)

{

System.out.println("Problemwriting" + fileName);

}

}

}

   

如果我們呼叫這個構造方法的話:FileWriter(fileName,true);則不允許重複,如果在D:盤中存在這個檔案則不允許重複。

使用面向字元流的物件FileWrite

我們可以看到Hello.txt是一個普通的ASCII碼文字檔案,每個英文字元佔一個位元組,中文字元佔兩個位元組。

java程式中的字串則是每個字元佔用兩個位元組,採用Unicode編碼。

如果要寫入的內容更多,就應該用高效的緩衝流類:

BufferedWriter.

FileWriter不同是多個了newLine()方法用於換行。

我們使用BufferedWriter完成Hello.txt的內容。

importjava.io.*;

/*

* 寫入到D盤一個文字檔案,並往裡寫入若干行文字。

*使用BufferedWriter會更高效,可以換行。

*/

publicclass TestBufferedWriter

{

publicstatic void main(String[] args)

{

//main方法中宣告丟擲IO異常。

//定義寫入路徑的字串。

String fileName ="D:\\NewHello.txt";

try

{

//使用面向字元流的BufferedWriter類。

//相當於在FileWriter類上再套上一層管道。

BufferedWriterout = new BufferedWriter(new FileWriter(fileName));

//FileWriter類的Write()方法向檔案中寫入字元。

out.write("NewHello!\n");

out.newLine();

out.write("Thisis BufferWriter範例,\n");

out.newLine();

out.write("keepalone\n");

out.newLine();

out.write("lovelife\n");

//清空流裡的內容並關閉它,如果不呼叫該方法還沒有完成所有資料的寫操作,程式就結束了。

out.close();

}

catch(IOException iox)

{

System.out.println("Problemwriting" + fileName);

}

}

}

 

讀文字檔案。

Reader

FileReader

BufferedReaderreadLine();

Hello.txt中讀取文字並顯示在螢幕上。

importjava.io.*;

/*

* D盤的Hello.txt 中讀出檔案中的資料到命令列中。

*

*/

publicclass TestBufferedReader

{

publicstatic void main(String[] args)

{

//main方法中宣告丟擲IO異常。

//定義寫入路徑的字串。

String fileName ="D:\\Hello.txt";

String line;

try

{

// 利用BufferedReader套在FileReader,處理流套在節點流上。

BufferedReaderin = new BufferedReader(new FileReader(fileName));

//首先讀取一行的內容。

line = in.readLine();

//判斷讀寫的內容是否為空。

while(line!=null)

{

//輸出一行。

System.out.println(line);

//繼續讀出下一行的內容。

line = in.readLine();

}

//關閉這個管道

in.close();

}

catch(IOException iox)

{

System.out.println("Problemreading" + fileName);

}

}

}

顯示如下:

    

檔案的複製(略)

寫二進位制檔案。

什麼是二進位制檔案?

原則上,所有檔案都是由8位的位元組組成的,如果檔案位元組中的內容應被解釋為字元,則檔案被稱為文字檔案;如果解釋為其他的含義,則檔案被稱為二進位制檔案。

在文書處理程式中,如果字處理軟體Word產生的doc檔案中,資料要被解釋為字型、格式、影象和其他費字元資訊。因此,這樣的檔案時二進位制檔案不用Reader流正確讀取。

好處:

輸入輸出更快。

比文字檔案小很多。

有些資料不容易被表示為字元。

OutputStream

FileOutputStream

DataOutputStream

 

將三個int型別的數字寫入資料檔案data.dat.

importjava.io.*;

/*

* 位元組流寫二進位制檔案。將三個int型別255 0 -1寫入資料檔案data.dat中。

*

*/

publicclass TestDataOutputStream

{

publicstatic void main(String[] args)

{

//main方法中宣告丟擲IO異常。

//定義寫入路徑的字串。

String fileName ="D:/data.txt";

//定義三個變數。

intvalue0 = 255;

intvalue1 = 0;

intvalue2 = -1;

try

{        

//定義處理流和結點流。

DataOutputStreamout = new DataOutputStream(new FileOutputStream(fileName));

out.writeInt(value0);

out.writeInt(value1);

out.writeInt(value2);

out.close();

}

catch(IOException iox)

{

System.out.println("problemwriting" + fileName);

}

}

}

我們會看到寫入到dat檔案二進位制內容。

利用BufferedOutputStream寫二進位制檔案的緩衝流類,對於寫入大量的資料,可提高效率。

如果是寫入各種型別的資料,我們可以參考javaAPI文件來確定寫入哪些資料。

讀二進位制檔案。

建立的數資料檔案中的3int型數字,顯示相加的結果。

importjava.io.*;

/*

* 位元組流寫二進位制檔案。將三個int型別255 0 -1寫入資料檔案data.dat中。

*

*/

publicclass TestDataInputStream

{

publicstatic void main(String[] args)

{

//main方法中宣告丟擲IO異常。

//定義寫入路徑的字串。

String fileName ="D:\\data.dat";

intsum = 0;

try {

DataInputStream instr= new DataInputStream(

new BufferedInputStream(newFileInputStream( fileName)));

sum += instr.readInt();

sum += instr.readInt();

sum += instr.readInt();

System.out.println( "The sum is: " + sum );

instr.close();

}

        catch ( IOException iox ) {

        System.out.println("Problem reading " + fileName);

}

        }

}

 

當我們不知道是三個資料的時候,多讀的話就會丟擲EOFException異常,所以我們將讀操作放在try中。

我們可以使用巢狀的trycatch塊來對異常進行進一步的處理。

過濾流:

讀或寫同時對資料進行處理

通過另外一個流來構造一個過濾流

大部分提供的是FilterInputStreamFilterOutputStream的子類。

對於檔案類FileFile的構造方法和常用方法,處理壓縮檔案 java.util.zip包,物件序列化,RandomAccessFile隨機檔案的建立和訪問,我們都可以自行查閱API文件來解決問題。

相關推薦

java IO 檔案檔案

例如:寫文字檔案,在D盤目錄建立文字檔案Hello.txt,並往裡寫入若干行文字。 importjava.io.*; /* * 寫入到D盤一個文字檔案,並往裡寫入若干行文字。 *如果該次磁碟下有重

Java IO

*****************************I/O流的分類**************************************** 一.按照資料的流向分 1. 輸入流 2. 輸出流 二. 每次存取的單位 1. 位元組流 2. 字元流   三.按照管道是否直接和資

黑馬程式設計師——Java IO操作規律總結、File類、Properties類、序列

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、流操作規律總結  1.明確源和目的:   源:    字元流:FileReader(純文字檔案)。    位元組流:FileInputStream(

JAVA基礎-IO

直寫 eno 接口 寫入 print lis ted his ride 一、字節流 字節流是通過字節來進行讀寫操作的,他的使用對象相比於字符流來說更加的廣泛。這主要是因為他們讀寫文件的方式而決定的。字符流讀寫文件時是將讀取到的字節通過默認編碼表轉換成字符,在通

java筆記IO之字元

字元流是什麼     * 字元流是可以直接讀寫字元的IO流     * 字元流讀取字元, 就要先讀取到位元組資料, 然後轉為字元. 如果要寫出字元, 需要把字元轉為位元組再寫出. //標準使用方法 public stati

javaio

序列化與反序列化: 1.概念: 序列化:將物件的狀態儲存到特定介質的過程。也就是將物件的狀態轉換為可傳輸(流)的過程! 序列化 -------》 寫入(輸出流) 反序列化:從特定儲存介質中讀取資料並重新構建成物件的過程!也就是把流解析成物件的方式! 反序列化------》讀取 (

【原創】從原始碼剖析IO檔案--轉載請註明出處

一、FileInputStream 在FileInputStream中,首先我們需要進行關注的方法,就是read()方法,下面可以來看一下read()方法的原始碼: public int read() throws IOException { return read0()

javaIO

IO:在裝置和裝置之間的一種資料傳輸!  IO流的分類:  按流的方向分:  輸入流: 讀取檔案   (e:\\a.txt):從硬碟上檔案讀取出來後輸出這個檔案的內容 輸出流: 寫檔案:將e:\\a.txt 內容讀出來--->寫到f盤下 按資料的型別劃分:  位元組流 

Java中,IO:字元

import java.io.*; /** * 字元流 1) 編碼問題 2)認識文字和文字檔案 java的文字(char)是16位無符號整數,是字元的unicode編碼(雙位元組編碼) 檔案是byte byte byte ...的資料序列 文字檔案是文字(char)序列

java IO 學習

input 字符 字符流 循環讀取 stream java io you 輸出 gpo 文件表示形式的轉換: 一、從系統文件變成java中可以使用的文件對象   File file = new FIle("文件的路徑"); 二、讀取文件系統中文件的原始字節流,要讀取字符流,

Java IO

位元組流: 新建一個Student類: import java.io.Serializable; //Serializable 介面中沒有任何方法需要實現,它就是一個標誌 //表示這個類的物件可以進行序列化和反序列化的操作 //序列化:Java物件轉化為byte[]陣列(二進位

Java IO

IO流的基本介紹,輸出檔案屬性: import java.io.File; public class Application { public static void main(String[] args) { // 通過IO流 把程式中的資料儲存到硬碟上 以

Java IO

**************************第13章 IO********************************** 一. 什麼是IO I Input 輸入 O Output 輸出 I/O 輸入輸出流   輸入輸出是相對於 程式 而言的 輸入: 資料從外界(檔案或者其

Java IO

****************************轉換流***************************** 作用: 把位元組流 轉換成 字元流 別人給你一個位元組流, 但是我們想以字元為單位讀和寫,這時需要使用轉換流,轉換一下 位元組 字元 輸入 InputStream Reader

IO異常處理

IO流(二) 1. 流的分類 1.1 按流的流向分類 輸入流和輸出流 輸入流是從其他地方(硬碟、外部儲存、網路等)往記憶體中讀取資料。 輸出流是從記憶體往其他地方(硬碟、外部儲存、網路等)寫入資料。 輸入和輸出流的方向是相對於記憶體而言的 1.2 按流的傳輸單位分類 位元

黑馬程式設計師——Java IOIO概述、字元、位元組

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ IO流 一、概述 1.IO流是用來處理裝置之間的資料傳輸。  2.Java對資料的操作時通過流的方式。  3.Java用於操作流的物件都在IO包中。  

IO————字元

1. 字元流FileReader * 1.字元流是什麼     * 字元流是可以直接讀寫字元的IO流     * 字元流讀取字元, 就要先讀取到位元組資料, 然後轉為字元. 如果要寫出字元, 需要把字元轉為位元組再寫出.     * 2.FileReader     * F

Java———IO

一、Java IO流簡介 1.IO流繼承關係圖 2.概論 Java的IO是建立在流之上的。輸入流讀取資料,輸出流寫入資料 過濾器流(裝飾流)可以串鏈到基礎流上。可以修改資料,或者提供

cocos2d-x學習之路——分析AppDelegateHelloWorldScene檔案

這裡我們來看一下cocos自動給我們生成的工程裡有些什麼東西,並且分析一下這些程式碼的用途,來為我們以後編寫cocos程式鋪下基礎。 這裡我建議看我這份隨筆的看官先看看cocos官網的快速入門手冊,不然可能會比較迷糊(因為待會要分析一些程式碼,如果以前沒見過的話會比較昏)。傳送門在這裡 其中一些基本不需要程式

Java併發集合-ConcurrentSkipListMap分析使用

一、ConcurrentSkipListMap介紹 ConcurrentSkipListMap是執行緒安全的有序的雜湊表,適用於高併發的場景。ConcurrentSkipListMap和TreeMap,它們雖然都是有序的雜湊表。但是,第一,它們的執行緒安全機制不同,TreeMap是非執行緒安全的,而Concu