JavaIo編程(文件操作類與字節流)

1.文件操作類:File(java.io.File)
File類本身只是操作文件的,不涉及到文件內容。
在使用File類c操作的時候路徑的分隔符使用:File.separator;

File類中常用操作方法:
(1)構造方法:File(String pathname) 傳遞完整文件操作路徑
File(String parent, String child) 設置父路徑與子文件路徑

(2)普通方法:boolean createNewFile()
boolean delete() 刪除指定路徑的文件
boolean exists() 文件或目錄是否存在
File getParentFile() 取得當前路徑的父路徑
boolean isDirectory() 是否爲目錄
boolean isFile() 是否爲普通文件
boolean mkdirs() 創建多級目錄
long length() 取得文件大小,以字節爲單位返回
long lastModified() 取得文件的最後一次修改日期時間
String [] list() 列出指定目錄中的全部內容
File [] listFiles() 列出所有的路徑以File類對象包裝

列出目錄信息:

import java.io.File;
public class TestList {
	public static void main(String args[]){
		File file = new File("D:" + File.separator + "myeclipse" );
		if(file.isDirectory()){					//判斷當前路徑是否爲目錄
			File result []= file.listFiles();
			for(int i=0; i<result.length; i++){
				System.out.println(result[i]);	//調用toString
			}
		}
	}
}

(偷個懶,異常就不寫了,嘿嘿)

2.字節流與字符流
作用:操作文件內容。
字節流:InputStream(輸入字節流)、OutputStream(輸出字節流)。
字符流:Reader(輸入字符流)、Writer(輸出字符流)。

流分爲輸入流與輸出流(主要看參考點)。
如:下雨››››››水庫,在這裏面 下雨(輸出)水源,水庫就是輸入流。
水庫›››››屋子,水庫(輸出)水源,這裏水庫是輸出流,屋子則是輸入流。

輸出流: 程序 >>> OutputStream >>>文件 (程序輸出內容到文件)
輸入流: 程序 <<< lnputStream <<<文件 (文件輸出內容到程序)

流的基本操作形式:
(1)第一步:通過File類定義一個要操作文件的路徑;
(2)第二步:通過字節流或字符流的子類爲父類對象實例化;(A a = new B())
(3)第三步:進行數據的讀(輸入)、寫(輸出)操作;
(4)第四步:數據流輸入資源操作,資源操作必須關閉。(close())方法

注意:四個操作流的類(OutputStream、InputStream、Writer、Reader)全部都屬於操作類,所以必須使用向上轉型來操作。

2.1字節輸出流:OutputStream
OutputStream類的常用方法:
void write(byte[] b) 輸出全部字節
void write(byte[] b, int off, int len) 輸出部分字節(從off開始輸出指定長度的字節)—(使用較多)
abstract void write(int b) 輸出單個字節

因爲OutputStream本身是一個抽象類,所以需要一個子類來進行文件操作——FileOutputStream

FileOutputStream類的常用方法:
FileOutputStream(File file) ( 創建文件將內容輸出到指定路徑,或如果文件已存在,則使用新的內容覆蓋就的內容。
FileOutputStream(File file, boolean append) 如果將布爾參數設置爲true,表示追加新的內容到文件中。

文件內容的輸出:


```java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;


public class TestOutputStream {
	public static void main(String[] args){
		File file = new File("D:"+ File.separator + "demo");	//第一步:定義要輸出文件的路徑
		if(!file.getParentFile().exists()){			//文件不存在,則創建
			file.getParentFile().mkdir();			//文件不存在,則創建
		}
		OutputStream output = null;
		try {
			output = new FileOutputStream(file);	//第二步:用OutputStream和子類FileOutputStream進行對象的實例化
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String str ="AAA";						//字節輸出流需要byte類型,所以要將String類對象變爲字節數組
		byte data[] =str.getBytes();			//將字符串變爲字節數組
		try {
			output.write(data);					//第三步:輸出內容
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			output.close();					//第四步:資源關閉
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

以上按照了流的操作步驟進行。


2.2字節輸入流:InputStream
InputStream常用方法:
int	read()				讀取單個字節
int	read(byte[] b)			將數據讀取到字節數組中,同時返回讀取長度
int	read(byte[] b, int off, int len)		將數據讀取到部分字節數組中,同時返回讀取的數據長度(從off開始輸出指定長度的字節)

區別:InputStream中的read()方法與OutputStream()中的write()方法對應,但前者是爲了接收(輸入)數據,後者是輸出數據。

因爲InputStream本身是一個抽象類,所以需要一個子類來進行文件操作——FileInputStream

數據讀取操作1:(讀取的數據量小於數組大小,並且是將數據一次性讀取到字節數組中)



```java
import java.io.*;

public class TestInputStream {
	public static void main(String[] args) throws Exception {
		File file = new File("D:" + File.separator + "demo"+
								File.separator + "test.txt");	//第一步:定義要輸出的文件路徑
		if(file.exists()){
				InputStream input = new FileInputStream(file); //第二步:向上轉型			
			byte data [] = new byte [123];						//準備出一個123的數組
			int len = input.read(data);								//第三步:進行數據讀取,將內容保存到字節數組中
			input.close();									//第四步:關閉輸入流
			System.out.println("[" +  new String(data,0,len)  +"]");//變爲字符串輸出
		}
	}
}

數據讀取2:(讀取單個字節,用while循環,因爲循環次數不確定)


```java
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;



public class TestInputStream2 {
	public static void main(String[] args) throws Exception{
		File file = new File("D:" + File.separator + "demo"+
				File.separator + "test.txt");	//第一步:定義要輸出的文件路徑
		if(file.exists()){
			InputStream input = new FileInputStream(file); //第二步:向上轉型	
			byte data [] = new byte [123];					//準備出一個123的數組
			int foot = 0;							//表示字節數組的操作角標
			int temp = 0;							//表示接收每次讀取的字節數據
			while( (temp = input.read()) != -1){			//第三步:讀取每一個字節
				 data[foot ++] =(byte) temp;				//保存讀取的字節到數組之中
			}
			input.close();									//第四步:關閉輸入流
			System.out.println("[" +  new String(data,0,foot)  +"]");//變爲字符串輸出
		}
	}
}


解釋:temp=input.read() != -1 .先將read()方法讀取的字節內容給temp變量,然後判斷讀取的temp內容是否是-1

發佈了33 篇原創文章 · 獲贊 1 · 訪問量 4703
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章