12章(四)Java流與文件操作

 

文件操作

一、文件類file

文件類(File)提供了一些方法可以用來操作文件和獲取文件的信息,包括:更改文件名、刪除文件、列出目錄下的文件以及文件對象屬性的描述信息等。(注意:Java把目錄當做一種特殊的文件來處理。)

二、構造方法

a)       public   File(String  path);

b)       public   File(String path,String name);

c)       public   File(File  parent,String chile);

例:

    File file1=new File(“demo.txt”);//當前文件夾下的文件

File file2=new File(“c:/demo1.txt”);//絕對路徑

File file4=new File(“c:/example”,”demo.txt”);

                        目錄名        文件名

File file5=new File(file3,”demo.txt”);

File file6=new File(file3,”test”);

三、靜態常量

由於不同操作系統的文件分隔符以及路徑分隔符不同,因此,如果要獲取當前系統的文件和路徑的分隔符,可使用以下兩個靜態常量。

public static final char separatorChar;

public static final  String separator;

例如,File file = new File("c:"+File.separator+"abc"+File.separator+"a.txt");

四、常用方法

    1、訪問文件對象

public String getName()  //返回文件對象名,不包含路徑名

public String getPath()    //File對象中封裝的路徑是什麼,獲取的就是什麼

public String getAbsolutePath()   //返回絕對路徑名,包含文件名

public String getParent()      //返回父文件對象的路徑名,如果封裝的是相對路徑,返回null

public File   getParentFile()    //返回父文件對象

    2、獲得文件屬性

      public long length()      //返回文件的字節長度

    public boolean exists()    //測試指定的文件是否存在

    public long lastModified()   //返回文件最後被修改的時間

    3、文件操作

      public boolean renameTo(Filedest)  //文件重命名

    public boolean  delete()   //刪除空目錄或文件

    4、目錄操作

      public boolean mkdir () //創建目錄,正常建立時返回true

    public String[] list()    //返回目錄中的所有文件名字符串

public File[] listFiles()    //返回目錄中的所有文件對象

 

實例:列出指定目錄下的文件以及子文件夾中的文件。

分析:需要使用遞歸—方法自己調用自己。

注意:使用遞歸時,一定要有遞歸的終止條件,並且調用次數也不要過多,否則會出現內存溢出。

public void listDir(File dir){

       //參數dir是一個File類型的對象,代表是要顯示的目錄

    System.out.println(dir.getName()+"下的文件以及子目錄下的文件列表:");

       File[] files=dir.listFiles();

       for(int i=0;i<files.length;i++){

           if(files[i].isFile())

              System.out.println(files[i].getName());

           else

              listDir(files[i]);//遞歸調用 

       }

    }

優化:

public String getLevel(int level){

    StringBuilder sb = new StringBuilder();

    sb.append("|--");

    for(int x=0; x<level; x++){

        sb.insert(0,"|  ");

    }

    return sb.toString();

}

public void listDir(File dir,int level){

    System.out.println(getLevel(level)+dir.getName());

    level++;

    File[] files = dir.listFiles();

    for(int x =0; x<files.length; x++){

        if(files[x].isDirectory())//如果遍歷到的是目錄。

            listDir(files[x],level);//遞歸。

        else

            System.out.println(getLevel(level)+files[x].getName());

    }

}

 

文件過濾器  FileFilter

FileFilter接口:用於抽象路徑名的過濾器。此接口的實例可傳遞給 File 類的 listFiles(FileFilter) 方法。

成員方法: boolean accept(File pathname)
測試指定抽象路徑名是否應該包含在某個路徑名列表中。

package file;

import java.io.*;

public class TestFileFilter {

    public static void main(String[] args) {

           File f=new File("f:\\aa");

       MyFileFilter mff=new MyFileFilter("txt");

       File[] files=f.listFiles(mff);

       for(File f1:files){

           System.out.println(f1.getName());

       }     

    }

}

構造方法

package file;

 

import java.io.File;

import java.io.FileFilter;

public class MyFileFilter implements FileFilter {

    String externName;

    //通過構造函數設定好過濾器

    public MyFileFilter(String externName){

       this.externName=externName;

    }

    @Override

    public boolean accept(File pathname) {//驗證是否符合過濾條件

       // TODO Auto-generated method stub

       if(pathname.isDirectory())

           return false;

       //不是目錄

       String filename=pathname.getName();

       int n=filename.indexOf(".");//找.的位置

       if(n==-1||n==filename.length()-1)//.在字符串中沒有,返回false

           return false;

       if(filename.substring(n+1).equals(externName))

           return true;

       return false;

    }

}

 

隨機文件操作  RandomAccessFile類

RandomAccessFile類可以對文件進行隨機讀寫操作。

1、構造方法—該對象只能對文件進行操作

       RandomAccessFile(File file,String mode) ;

RandomAccessFile(String name,String mode);

注: r:只讀;rw:可讀可寫

例如:File   file=new  File(“d:\\mydata\\a.txt”);

RandomAccessFile  rf=new RandomAccessFile( file,”rw”) ;

//

RandomAccessFile rfile=new RandomAccessFile(“d:\\lx\\a.txt”,”rw”);

    2、讀寫數據的常用方法

讀、寫基本數據類型: readInt()、writeInt(int n)等;

讀、寫UTF字符串:  readUTF()、writeUTF(String str);

讀取文件中的一行: readLine();

3、文件隨機讀寫流的讀取指針控制

long getFilePointer() ---得到當前的文件讀取指針。

void seek(long pos) ---把指針從開始移動到pos位置。

long length() ---得到文件的長度(有多少個字節) 。

void setLength(long newLength)

    事例:

        package file;

import java.io.*;

public class DemoRandomAccess {

//隨機訪問

           public static void main(String[] args) throws IOException {

                     File f=new File("f:\\test.txt");

              RandomAccessFile raf=new RandomAccessFile(f,"rw");

              raf.writeInt(1234);

              raf.writeDouble(1.235);

              raf.seek(0);

              int n=raf.readInt();

              double d=raf.readDouble();

              System.out.println(n);

              System.out.println(d);

              System.out.println(raf.getFilePointer());//找位置

              raf.seek(4);//定位位置

           f.readDouble();

              System.out.println(d1);

              raf.close();

           }

}

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