1. 程式人生 > 其它 >Java高階---I/O

Java高階---I/O

技術標籤:I/Ojava

Java高階—I/O

一、檔案的建立

File file  = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test\\test.txt");	//檔案路徑

二、File的主要方法

1、建立:
createNewFile() 在指定位置建立一個空檔案,成功就返回true,如果已存在就不建立,然後返回false。
mkdir() 在指定位置建立一個單級資料夾。
mkdirs() 在指定位置建立一個多級資料夾。
renameTo(File dest) 如果目標檔案與原始檔是在同一個路徑下,那麼renameTo的作用是重新命名, 如果目標檔案與原始檔不是在同一個路徑下,那麼renameTo的作用就是剪下,而且還不能操作資料夾。

2、刪除:
delete() 刪除檔案或者一個空資料夾,不能刪除非空資料夾,馬上刪除檔案,返回一個布林值。
deleteOnExit() jvm退出時刪除檔案或者資料夾,用於刪除臨時檔案,無返回值。

3、判斷:
exists() 檔案或資料夾是否存在。
isFile() 是否是一個檔案,如果不存在,則始終為false。
isDirectory() 是否是一個目錄,如果不存在,則始終為false。
isHidden() 是否是一個隱藏的檔案或是否是隱藏的目錄。
isAbsolute() 測試此抽象路徑名是否為絕對路徑名。

4、獲取:
getName() 獲取檔案或資料夾的名稱,不包含上級路徑。

getAbsolutePath() 獲取檔案的絕對路徑,與檔案是否存在沒關係
length() 獲取檔案的大小(位元組數),如果檔案不存在則返回0L,如果是資料夾也返回0L。
getParent() 返回此抽象路徑名父目錄的路徑名字串;如果此路徑名沒有指定父目錄,則返回null。
lastModified() 獲取最後一次被修改的時間。

5、資料夾相關:
static File[] listRoots()列出所有的根目錄(Window中就是所有系統的碟符)
list() 返回目錄下的檔案或者目錄名,包含隱藏檔案。對於檔案這樣操作會返回null。
listFiles() 返回目錄下的檔案或者目錄物件(File類例項),包含隱藏檔案。對於檔案這樣操作會返回null。

list(FilenameFilter filter) 返回指定當前目錄中符合過濾條件的子檔案或子目錄。對於檔案這樣操作會返回null。
listFiles(FilenameFilter filter) 返回指定當前目錄中符合過濾條件的子檔案或子目錄。對於檔案這樣操作會返回null。

三、檔案的輸入與輸出

1、最基本的輸入

File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt");
//開啟檔案輸入流
FileInputStream fis = new FileInputStream(file);
int temp = 0;      				 //臨時儲存讀取的字元
while ((temp=fis.read())!=-1){	//直到讀到檔案結束
    System.out.print((char) temp);
}
//關閉
fis.close();

結果顯示
aa.txt裡面的內容:
在這裡插入圖片描述
控制檯輸出的內容:
在這裡插入圖片描述
這裡亂碼是因為檔案的字元編碼格式問題,等我們先寫在讀就不會出現這種問題。
【注意:UTF-8中漢字一般佔3位】

2、位元組流輸入-FileInputStream

File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt");
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[fis.available()];
fis.read(b);
String s = new String(b);
System.out.println(s);
fis.close();

3、位元組流輸出-FileOutputStream

File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\b.txt");
FileOutputStream fos = new FileOutputStream(file);	//還可以追加,第二個引數寫 true
String s = "\nPPPPPPPPPPPPPPPP66車釐子哈哈……&777";
byte b[] = s.getBytes();
fos.write(b);
fos.close();

5、字元流輸入 。。。。明天寫
6、字元流輸出

例子:
1、實現檔案的複製

File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt");		//要複製的檔案
FileInputStream fis = new FileInputStream(file);
File file2 = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\b.txt");		//貼上在這裡
FileOutputStream fos = new FileOutputStream(file2);
byte[] b = new byte[fis.available()];
fis.read(b);
//String s = new String(b);		//這兩行可加可不加,就是在控制檯上看看複製的內容
//System.out.println(s);
fos.write(b);
fis.close();
fos.close();

2、實現檔案的遍歷
利用遞迴實現檔案的遍歷

public class FileSearch {
    public static void search(String inPath) {
        if(null==inPath)
            return;
        File file = new File(inPath);
        if(file.exists()){									//首先判斷檔案是否存在
            File[] files = file.listFiles();
            if(files.length==0){
                System.out.println("空資料夾");
                return;
            }else {
                for(File f:files){
                    if(f.isDirectory()) {
                        System.out.println(f.getName());	//輸出資料夾名
                        search(f.getAbsolutePath());		//如果是目錄,就讓它繼續遍歷
                    }else {
                        System.out.println(f.getName());	//如果是檔案,輸出檔名
                    }
                }
            }
        }else {
            System.out.println("檔案不存在");
        }
    }

    public static void main(String[] args) {
        search("D:\\soft\\DeskTopShare");
    }
}