1. 程式人生 > >檔案操作與IO流基礎

檔案操作與IO流基礎

檔案類File

 File file=new File("D:\\java\\zs2\\eatfood.txt");
        if(file.isFile()){
            System.out.println("是個檔案");
        }
        else{
            System.out.println("沒有");
            try {
                file.createNewFile();
                System.out.println("建立新檔案");
            } catch
(IOException e) { e.printStackTrace(); } } System.out.println("名稱"+file.getName()); System.out.println("相對路徑"+file.getPath()); System.out.println("絕對路徑"+file.getAbsolutePath()); System.out.println("檔案大小"+file.length()+"B");

但是File類不管檔案內容。

IO流

輸入輸出流分為兩大類,一個是8位位元組流,一個是16位字元流
這樣就有四個基類
InputStream
OutputStream
Reader
Writer

四個基類都是抽象類,可以用它們的子類建立物件對檔案內容進行修改。
前面加一個File就是他們的其中一個子類,用法相似。

FileOutputStream fileout;
try {
    fileout=new FileOutputStream("D:\\java\\zs2\\eatfood.txt",true);//第二個引數可有可無,是否追加,預設不追加。
    String str="what a lucky man\n"
; byte[] b=str.getBytes(); fileout.write(b,0,b.length); fileout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } FileInputStream filein; try { filein=new FileInputStream("D:\\java\\zs2\\eatfood.txt"); int data; System.out.println("可讀位元組數:"+filein.available()); System.out.println("檔案內容:"); while((data=filein.read())!=-1){//利用read()逐個存入變數 System.out.print((char)data); } filein.close(); } catch (FileNotFoundException e) {//無法找到檔案 e.printStackTrace(); } catch (IOException e) {//IO錯誤 e.printStackTrace(); } FileWriter filewrit; BufferedWriter bufferwrit; try { filewrit=new FileWriter("D:\\java\\zs2\\eatfood.txt"); bufferwrit=new BufferedWriter(filewrit); filewrit.write("I am Zhangshuo "); filewrit.append("hhh\n");//這倆好像一樣的功能 bufferwrit.write("I am so cool"); bufferwrit.newLine(); bufferwrit.write("what about you?"); bufferwrit.flush();//重新整理就相當於輸到檔案中 filewrit.close(); }catch (IOException e) { e.printStackTrace(); } FileReader fileread; try { fileread=new FileReader("D:\\java\\zs2\\eatfood.txt"); char[] str=new char[300]; fileread.read(str); //利用read(char []);直接存到陣列中 System.out.println(); for(char c:str) System.out.print(c); fileread.close(); } catch (FileNotFoundException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

Buffered加在這四個基類前面就是另四個子類。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
帶參構造有兩個引數,第一個是基類的物件,第二個是int
表示開一個制定大小的緩衝區,如果沒有第二個引數,就是預設大小。避免每次都進行字元編碼的轉換,多次使用的時候提高效率。
Buffered基類和File基類用法類似