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編碼。
如果要寫入的內容更多,就應該用高效的緩衝流類:
與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
BufferedReader和readLine();
從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寫二進位制檔案的緩衝流類,對於寫入大量的資料,可提高效率。
如果是寫入各種型別的資料,我們可以參考java的API文件來確定寫入哪些資料。
讀二進位制檔案。
建立的數資料檔案中的3個int型數字,顯示相加的結果。
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塊來對異常進行進一步的處理。
過濾流:
讀或寫同時對資料進行處理
通過另外一個流來構造一個過濾流
大部分提供的是FilterInputStream和FilterOutputStream的子類。
對於檔案類File,File的構造方法和常用方法,處理壓縮檔案 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
java中io流(二)
序列化與反序列化: 1.概念: 序列化:將物件的狀態儲存到特定介質的過程。也就是將物件的狀態轉換為可傳輸(流)的過程! 序列化 -------》 寫入(輸出流) 反序列化:從特定儲存介質中讀取資料並重新構建成物件的過程!也就是把流解析成物件的方式! 反序列化------》讀取 (
【原創】從原始碼剖析IO流(二)檔案流--轉載請註明出處
一、FileInputStream 在FileInputStream中,首先我們需要進行關注的方法,就是read()方法,下面可以來看一下read()方法的原始碼: public int read() throws IOException { return read0()
java之IO流(二)
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 IO流(一)之IO流概述、字元流、位元組流等
-----------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學習之路(二)——分析AppDelegate和HelloWorldScene檔案
這裡我們來看一下cocos自動給我們生成的工程裡有些什麼東西,並且分析一下這些程式碼的用途,來為我們以後編寫cocos程式鋪下基礎。 這裡我建議看我這份隨筆的看官先看看cocos官網的快速入門手冊,不然可能會比較迷糊(因為待會要分析一些程式碼,如果以前沒見過的話會比較昏)。傳送門在這裡 其中一些基本不需要程式
Java併發集合(二)-ConcurrentSkipListMap分析和使用
一、ConcurrentSkipListMap介紹 ConcurrentSkipListMap是執行緒安全的有序的雜湊表,適用於高併發的場景。ConcurrentSkipListMap和TreeMap,它們雖然都是有序的雜湊表。但是,第一,它們的執行緒安全機制不同,TreeMap是非執行緒安全的,而Concu