Java編程思想 Java的IO

Java的IO

一.File類:

1.File類的作用:

代表一個特定文件的名稱。

代表一個目錄下的一組文件的名稱。此時可以使用list()方法,返回一個字符數組。

2.目錄查看器:

如果想查看一個目錄列表,可以使用兩種方法來使用File對象。

一,調用不帶參數的list()方法,便可以獲得此File對象包含的全部列表。

二,如果想得到一個受限列表,就要用到“目錄過濾器”。顯示符合條件的File對象。

FilenameFilter接口中的accept()方法是關鍵,對文件進行篩選。

public interface FilenameFilter {
    boolean accept(File dir, String name);
    //接受文件所在目錄的File對象,以及包含文件名的String
}

DirFilter類爲幫助list()調用accept()方法而服務,accept()會使用正則表達式的matcher對象,來看正則表達式是否匹配這個名字。

class DirFilter implements FilenameFilter{
    private Pattern pattern;
    public DirFilter(String regex) {
        pattern = Pattern.compile(regex);//正則表達式
    }
    public boolean accept(File dir, String name){
        return pattern.matcher(name).matches();
    }
}

公共類中list()方法的用法:list()方法會爲此目錄對象下的每一個文件調用accept(),來判斷文件的名字,最後會返回一個數組。

File path = new File(".");
if(args.length == 0)
    list = path.list();
else 
    list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
//嚴格按照字母表排序

如果用更簡潔的方式將兩個類合在一起表示:用一個作爲list參數的匿名內部類。

list = path.list(new FilenameFilter(){
    private Pattern pattern = Pattern.compile(args[0]);
    public boolean accept(File Dir, String name){
        return pattern.matcher(name).matches();
    }
});
3.目錄的檢查和創建
File f;
f.isFile();//判斷是否爲文件
f.isDirectory();//是否爲路徑
old.renameTo(rname);//將一個文件重命名或移動到由參數指示的完全不同路徑
f.mkdirs();//創建此抽象路徑指定的目錄,包括不存在的父目錄
f.mkdir();//只能創建一級,並且需要父目錄
f.getAbsolutePath();//完整的目錄
f.getPath();//最後一級目錄
f.canRead();f.canWrite();
f.getName();//獲取文件名

二. 輸入和輸出

InputStreamOutputStream是面向字節的。

ReaderWriter是面向字符的,兼容了Unicode。

1.緩衝輸入文件:
try{
    String filename;
    BufferedReader in = new BufferedReader(new FileReader(filename));
    String s;
    while((s = in.readLine()) != null){}
}catch(IOException e){
    e.printStackTrace();
}
2.控制檯輸入:
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));//省略異常處理
3.一次一個字節讀取文件:
DataInputStream in = new DataInputSream(new BufferedInputStream(new FileInputStream("testEOF.java")));
4.自我獨立的類 RandomAccessFile

是一種特殊的文件流,可以用它在文件的任何地方查找或者插入數據。

同時實現了DataInputDataOutput接口,所以可以用來讀寫文件。

構造器及方法:

RandomAccessFile(File f, String mode);
RandomAccessFile(String f, String mode);//mode爲r或rw
readInt() readLine() writeChar() writeDouble()
void seek(long pos)//將指針調到所需位置
int skipBytes(int n)//將指針向下移動若干字節
long getFilePointer()//返回指針當前位置
發佈了48 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章