1. 程式人生 > >java 基礎---IO File類

java 基礎---IO File類

arr 抽象 lock 隱藏 closed flag 一次 dsw 有關

Java File類
Java文件類以抽象的方式代表文件名和目錄路徑名。該類主要用於文件和目錄的創建、文件的查找和文件的刪除等。
File對象代表磁盤中實際存在的文件和目錄。通過以下構造方法創建一個File對象。


字段摘要
static String pathSeparator //與系統有關的路徑分隔符,為了方便,它被表示為一個字符串。
static char pathSeparatorChar / /與系統有關的路徑分隔符。
static String separator //與系統有關的默認名稱分隔符,為了方便,它被表示為一個字符串。
static char separatorChar //與系統有關的默認名稱分隔符。


構造方法摘要
File(File parent, String child) //根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。
File(String pathname) //通過將給定路徑名字符串轉換為抽象路徑名來創建一個新 File 實例。
File(String parent, String child) //根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。
File(URI uri) //通過將給定的 file: URI 轉換為一

方法摘要
boolean canExecute() 測試應用程序是否可以執行此抽象路徑名表示的文件。
boolean canRead() 測試應用程序是否可以讀取此抽象路徑名表示的文件。
boolean canWrite() 測試應用程序是否可以修改此抽象路徑名表示的文件。
int compareTo(File pathname) 按字母順序比較兩個抽象路徑名。
boolean createNewFile() 當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。
static File createTempFile(String prefix, String suffix) 在默認臨時文件目錄中創建一個空文件,使用給定前綴和後綴生成其名稱。
static File createTempFile(String prefix, String suffix, File directory) 在指定目錄中創建一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。
boolean delete() 刪除此抽象路徑名表示的文件或目錄。
void deleteOnExit() 在虛擬機終止時,請求刪除此抽象路徑名表示的文件或目錄。
boolean equals(Object obj) 測試此抽象路徑名與給定對象是否相等。
boolean exists() 測試此抽象路徑名表示的文件或目錄是否存在。
File getAbsoluteFile() 返回此抽象路徑名的絕對路徑名形式。
String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串。
File getCanonicalFile() 返回此抽象路徑名的規範形式。
String getCanonicalPath() 返回此抽象路徑名的規範路徑名字符串。
long getFreeSpace() 返回此抽象路徑名指定的分區中未分配的字節數。
String getName() 返回由此抽象路徑名表示的文件或目錄的名稱。
String getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。
File getParentFile() 返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null。
String getPath() 將此抽象路徑名轉換為一個路徑名字符串。
long getTotalSpace() 返回此抽象路徑名指定的分區大小。
long getUsableSpace() 返回此抽象路徑名指定的分區上可用於此虛擬機的字節數。
int hashCode() 計算此抽象路徑名的哈希碼。
boolean isAbsolute() 測試此抽象路徑名是否為絕對路徑名。
boolean isDirectory() 測試此抽象路徑名表示的文件是否是一個目錄。
boolean isFile() 測試此抽象路徑名表示的文件是否是一個標準文件。
boolean isHidden() 測試此抽象路徑名指定的文件是否是一個隱藏文件。
long lastModified() 返回此抽象路徑名表示的文件最後一次被修改的時間。
long length() 返回由此抽象路徑名表示的文件的長度。
String[] list() 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。
String[] list(FilenameFilter filter) 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。
File[] listFiles() 返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。
File[] listFiles(FileFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。
File[] listFiles(FilenameFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。
static File[] listRoots() 列出可用的文件系統根。
boolean mkdir() 創建此抽象路徑名指定的目錄。
boolean mkdirs() 創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
boolean renameTo(File dest) 重新命名此抽象路徑名表示的文件。
boolean setExecutable(boolean executable) 設置此抽象路徑名所有者執行權限的一個便捷方法。
boolean setExecutable(boolean executable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的執行權限。
boolean setLastModified(long time) 設置此抽象路徑名指定的文件或目錄的最後一次修改時間。
boolean setReadable(boolean readable) 設置此抽象路徑名所有者讀權限的一個便捷方法。
boolean setReadable(boolean readable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的讀權限。
boolean setReadOnly() 標記此抽象路徑名指定的文件或目錄,從而只能對其進行讀操作。
boolean setWritable(boolean writable) 設置此抽象路徑名所有者寫權限的一個便捷方法。
boolean setWritable(boolean writable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的寫權限。
String toString() 返回此抽象路徑名的路徑名字符串。
URI toURI() 構造一個表示此抽象路徑名的 file: URI。
URL toURL() 已過時。 此方法不會自動轉義 URL 中的非法字符。建議新的代碼使用以下方式將抽象路徑名轉換為 URL:首先通過 toURI 方法將其轉換為 URI,然後通過 URI.toURL 方法將 URI 裝換為 URL。

技術分享
package com.bdqn.io;


import java.io.File;

/**
 * 兩個常量
 * 1、路徑分隔符  ;
 * 2、名稱分隔符 /(windows)  /(linux 等)
 * 
 * 
 * @author Administrator
 *
 */
public class Demo01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.separator);
        //路徑表示形式
        String path ="E:\\xp\\test\\2.jpg";
        path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg";
        //推薦方式
        path="E:/xp/test/2.jpg";
        System.out.println(path);
    }

}
/* ;
  E:/xp/test/2.jpg  */
demo1 技術分享
package com.bdqn.io;
import java.io.File;

/**
 * 相對路徑與絕對路徑構造 File對象
 * 1、相對路徑
    File(String parent, String child)  ==>File("E:/xp/test","2.jpg")
    File(File parent, String child)     ==> File(new File("E:/xp/test"),"2.jpg")
    2、絕對路徑
    File(String name);
 * @author Administrator
 *
 */
public class Demo02 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String parentPath ="E:/xp/test";
        String name ="2.jpg";
        //相對路徑
        File src =new File(parentPath,name);
        src =new File(new File(parentPath),name);
        //輸出
        System.out.println(src.getName());
        System.out.println(src.getPath());
        //絕對路徑
        src =new File("E:/xp/test/2.jpg");
        System.out.println(src.getName());
        System.out.println(src.getPath());
        //沒有盤符: 以 user.dir構建
        src =new File("test.txt");
        src =new File(".");
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println(src.getAbsolutePath());
    }

}
/*   2.jpg
E:\xp\test\2.jpg
2.jpg
E:\xp\test\2.jpg
.
.
D:\workspace\demos\.
      */
demo2 技術分享
package com.bdqn.io;


import java.io.File;
import java.io.IOException;

/**
 * 常用方法:
1、文件名
getName() 文件名、路徑名
getPath()路徑名
getAbsoluteFile() 絕對路徑所對應的File對象
getAbsolutePath() 絕對路徑名
getParent() 父目錄 ,相對路徑的父目錄,可能為null 如. 刪除本身後的結果
2、判斷信息
exists()
canWrite()
canRead()
isFile()
isDirectory()
isAbsolute():消除平臺差異,ie以盤符開頭,其他以/開頭
3、長度 字節數  不能讀取文件夾的長度
length()
4、創建、刪除
createNewFile() 不存在創建新文件,存在返回false
delete() 刪除文件
static createTempFile(前綴3個字節長,後綴默認.temp) 默認臨時空間
staticcreateTempFile(前綴3個字節長,後綴默認.temp,目錄)
deleteOnExit() 退出虛擬機刪除,常用於刪除臨時文件


 * @author Administrator
 *
 */
public class Demo03 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        test1();
        test2();
        try {
            test3();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件操作失敗");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //創建刪除文件
    public static void test3() throws IOException, InterruptedException{
        //createNewFile() 不存在創建新文件
        //String path="E:/xp/test/con"; //con系統關鍵字
        String path="E:/xp/test/200.jpg";
        //String path="E:/xp/test/1.jpg";
        File src =new File(path);
        if(!src.exists()){
            boolean flag =src.createNewFile();
            System.out.println(flag?"成功":"失敗");
        }
        
        //刪除文件
        boolean flag =src.delete();
        System.out.println(flag?"成功":"失敗");
        
        
        //static createTempFile(前綴3個字節長,後綴默認.temp) 默認臨時空間
        //static createTempFile(前綴3個字節長,後綴默認.temp,目錄)
        File temp= File.createTempFile("tes", ".temp",new File("e:/xp/test"));        
        Thread.sleep(10000);        
        temp.deleteOnExit(); //創建臨時文件,10秒後刪除
        
    }
    
    

    //2、判斷信息
    //3、長度 length()
    public static void test2(){
        //String path ="2.txt";
        String path="E:/xp/test/200.jpg";
        //String path="E:/xp/test/200.jpg";
        File src =new File(path);
        //是否存在
        System.out.println("文件是否存在:"+src.exists());
        //是否可讀 寫 canWrite() canRead()
        System.out.println("文件是否可寫"+src.canWrite());
        System.out.println("============");
        //isFile()
        //isDirectory()
        if(src.isFile()){
            System.out.println("文件");
        }else if(src.isDirectory()){            
            System.out.println("文件夾");
        }else{
            System.out.println("文件不存在");
        }
        
        System.out.println("是否為絕對路徑"+src.isAbsolute());
        System.out.println("長度為:"+src.length());
        
    }
    //1、名稱
    public static void test1(){
        //File src =new File("E:/xp/test/2.jpg");
        //建立聯系
        File src =new File("2.txt");
        System.out.println(src.getName()); //返回名稱
        System.out.println(src.getPath()); //如果是絕對路徑,返回完整路徑,否則相對路徑
        System.out.println(src.getAbsolutePath());//返回絕對路徑
        System.out.println(src.getParent());//返回上一級目錄,如果是相對,返回null
    }

}
/*
 2.txt
2.txt
D:\workspace\demos\2.txt
null
文件是否存在:false
文件是否可寫false
============
文件不存在
是否為絕對路徑true
長度為:0
成功
成功
 */
demo3 技術分享
package com.bdqn.io;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

/**
 * 5、操作目錄
mkdir() 創建目錄,必須確保 父目錄存在,如果不存在,創建失敗
mkdirs() 創建目錄,如果父目錄鏈不存在一同創建
list() 文件|目錄 名字符串形式
listFiles()
static listRoots() 根路徑
 * @author Administrator
 *
 */
public class Demo04 {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        String path ="E:/xp/test/";
        String path2 ="E:/xp/test/a.java";
        File src2=new File(path2);
        src2.createNewFile();
        File src =new File(path); //文件夾
        if(src.isDirectory()){ //存在並且為目錄
            System.out.println("======子目錄|文件名===");
            String[] subNames =src.list();
            
            for(String temp:subNames){
                //輸出是test文件夾下,文件夾的集合和文件集合
                System.out.println(temp);
            }
            System.out.println("=====子目錄|文件File對象====");
            File[] subFiles =src.listFiles();
            for(File temp:subFiles){
                //返回的是絕對路徑文件夾和文件的集合
                System.out.println(temp.getAbsolutePath());
            }
            System.out.println("=====子文件.java對象====");
            /**
             * 命令設計模式
             * 過濾 .java 文件
             * 
             * 
             */
            subFiles =src.listFiles(new FilenameFilter(){
                    
                @Override
                /**
                 * dir 代表src
                 */
                public boolean accept(File dir, String name) {
                    //System.out.println(dir.getAbsolutePath());
                    return  new File(dir,name).isFile()&&name.endsWith(".java");
                }
                
            });
            for(File temp:subFiles){
                System.out.println(temp.getAbsolutePath());
            }
            
            
        }
    }
    public static void test1(){
        String path ="E:/xp/test/parent/p/test";
        File src =new File(path);
        //mkdirs() 創建目錄,如果父目錄鏈不存在一同創建
        src.mkdirs();
    }

}
/*======子目錄|文件名===
a.java
adsf
adsf.java
asdf.txt
parent
=====子目錄|文件File對象====
E:\xp\test\a.java
E:\xp\test\adsf
E:\xp\test\adsf.java
E:\xp\test\asdf.txt
E:\xp\test\parent
=====子文件.java對象====
E:\xp\test\a.java
*/
demo4 技術分享
package com.bdqn.io;


import java.io.File;
import java.util.Arrays;

/**
 * 輸出  子孫級目錄|文件的名稱集合(絕對路徑)
 * 1、listFiles()
 * 2、遞歸
 * 
 * static listRoots() 根路徑
 * @author Administrator
 *
 */
public class Demo05 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String path ="E:/xp/test";
        File parent =new File(path);
        printName(parent);
        
        /*File[] roots =File.listRoots();
        System.out.println(Arrays.toString(roots));
        for(File temp:roots){
            //printName(temp);
            
        }*/
    }
    /**
     * 輸出路徑
     */
    public static void printName(File src){
        if(null==src || !src.exists()){
            return ;
        }
        System.out.println("++"+src.getAbsolutePath());
        if(src.isDirectory()){ //文件夾
            for(File sub:src.listFiles()){
                printName(sub);
            }
            
        }
    }

}
/*++E:\xp\test
++E:\xp\test\a.java
++E:\xp\test\adsf
++E:\xp\test\adsf.java
++E:\xp\test\asdf.txt
++E:\xp\test\parent
++E:\xp\test\parent\p
++E:\xp\test\parent\p\test
*/
demo5

java 基礎---IO File類