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