一走诞、什么是I/O
我們正式的來(lái)學(xué)習(xí)IO流。那什么是IO流呢蛤高?其實(shí)我們身邊就經(jīng)常在用蚣旱,比如說(shuō):QQ上傳個(gè)圖片碑幅,更改下圖標(biāo),但凡涉及到文件傳輸了塞绿,都要用到它枕赵。接下來(lái),我們就來(lái)揭曉它的廬山真面目位隶。今天的內(nèi)容分以下兩塊:File類(lèi)的基本概述拷窜,F(xiàn)ile類(lèi)的功能使用
回想之前寫(xiě)過(guò)的程序,數(shù)據(jù)都是在內(nèi)存中涧黄,一旦程序運(yùn)行結(jié)束篮昧,這些數(shù)據(jù)都沒(méi)有了,等下次再想使用這些數(shù)據(jù)笋妥,可是已經(jīng)沒(méi)有了懊昨。那怎么辦呢?能不能把運(yùn)算完的數(shù)據(jù)都保存下來(lái)春宣,下次程序啟動(dòng)的時(shí)候酵颁,再把這些數(shù)據(jù)讀出來(lái)繼續(xù)使用呢?其實(shí)要把數(shù)據(jù)持久化存儲(chǔ)月帝,就需要把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到內(nèi)存以外的其他持久化設(shè)備(硬盤(pán)躏惋、光盤(pán)、U盤(pán)等)上嚷辅。
當(dāng)需要把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上這個(gè)動(dòng)作稱(chēng)為輸出(寫(xiě))Output操作簿姨。
當(dāng)把持久設(shè)備上的數(shù)據(jù)讀取到內(nèi)存中的這個(gè)動(dòng)作稱(chēng)為輸入(讀)Input操作。
因此我們把這種輸入和輸出動(dòng)作稱(chēng)為IO操作簸搞。
二扁位、File類(lèi)
File的概念
File類(lèi)是文件和目錄路徑名的抽象表示形式
Java中把文件或者目錄(文件夾)都封裝成File對(duì)象
我們要去操作硬盤(pán)上的文件,或者文件夾只要找到File這個(gè)類(lèi)即可
注:一般操作系統(tǒng)數(shù)據(jù)存在文件當(dāng)中趁俊,有三種形式表示域仇,文件,文件夾寺擂,路徑暇务。
java.io.File
將操作系統(tǒng)中的,文件,目錄(文件夾),路徑,封裝成File對(duì)象
提供方法,操作系統(tǒng)中的內(nèi)容
File與系統(tǒng)無(wú)關(guān)的類(lèi)
文件 file
目錄 directory
路徑 path
**public static void main(String[] args) {**
//File類(lèi)靜態(tài)成員變量
//與系統(tǒng)有關(guān)的路徑分隔符
String separator = File.pathSeparator;
System.out.println(separator);// 是一個(gè)分號(hào),目錄的分割 Linux :
//與系統(tǒng)有關(guān)的默認(rèn)名稱(chēng)分隔符
separator = File.separator;
System.out.println(separator);// 向右 \ 目錄名稱(chēng)分割 Linux /
}
FILE 構(gòu)造方法
public static void main(String [] args){
File file = new File("d:\\eclipse");//斜線寫(xiě)倆個(gè) 因?yàn)橐粋€(gè)報(bào)錯(cuò)了 會(huì)轉(zhuǎn)意
System.out.println(file);//windows 操作系統(tǒng)不區(qū)分大小寫(xiě) Linux區(qū)分
}
科普:
路徑
絕對(duì)路徑
在系統(tǒng)中具有唯一性
c:\windows\system32
相對(duì)路徑
表示路徑之間的關(guān)系
D:\develop\Java\jdk1.7.0_72\bin
D:\develop\Java\jre7
路徑之間關(guān)系
Java 父目錄是D:\develop
Java 子目錄是:jdk1.7.0_72
父路徑是 唯一性
子目錄是可以多個(gè)
FILE其他的構(gòu)造方法
/*
* File(File parent,String child)
* 傳遞路徑,傳遞File類(lèi)型父路徑,字符串子路徑
* 好處: 父路徑是File類(lèi)型,父路徑可以直接調(diào)用File類(lèi)方法
*/
public static void function_2(){
File parent = new File("d:");
File file = new File(parent,"eclipse");
System.out.println(file);
}
/*
* File(String parent,String child)
* 傳遞路徑,傳遞字符串父路徑,字符串子路徑
* 好處: 單獨(dú)操作父路徑和子路徑
*/
public static void function_1(){
File file = new File("d:","eclipse");
System.out.println(file);
}
File類(lèi)創(chuàng)建文件功能
/*
* File創(chuàng)建文件的功能
* boolean createNewFile()
* 創(chuàng)建的文件路徑和文件名,在File構(gòu)造方法中給出
* 文件已經(jīng)存在了,不在創(chuàng)建
*/
public static void function()throws IOException{
File file = new File("c:\\a.txt");
boolean b = file.createNewFile();
System.out.println(b);
}
File類(lèi)創(chuàng)建目錄功能
/*
* File創(chuàng)建文件夾功能
* boolean mkdirs() 創(chuàng)建多層文件夾
* 創(chuàng)建的路徑也在File構(gòu)造方法中給出
* 文件夾已經(jīng)存在了,不在創(chuàng)建
*/
public static void function_1(){
File file = new File("c:\\abc");
boolean b = file.mkdirs();
System.out.println(b);
}
File類(lèi)刪除功能
/*
* File類(lèi)的刪除功能
* boolean delete()
* 刪除的文件或者是文件夾,在File構(gòu)造方法中給出
* 刪除成功返回true,刪除失敗返回false
* 刪除方法,不走回收站,直接從硬盤(pán)中刪除
* 刪除有風(fēng)險(xiǎn),運(yùn)行需謹(jǐn)慎
*/
public static void function_2(){
File file = new File("c:\\a.txt");
boolean b = file.delete();
System.out.println(b);
}
File類(lèi)獲取功能
a: 方法介紹
String getName(): 返回路徑中表示的文件或者文件夾名
獲取路徑中的最后部分的名字
long length(): 返回路徑中表示的文件的字節(jié)數(shù)
String getAbsolutePath(): 獲取絕對(duì)路徑,返回String對(duì)象
File getAbsoluteFile() : 獲取絕對(duì)路徑,返回File對(duì)象
eclipse環(huán)境中,寫(xiě)一個(gè)相對(duì)路徑,絕對(duì)位置工程根目錄
String getParent(): 獲取父路徑,返回String對(duì)象
File getParentFile(): 獲取父路徑,返回File對(duì)象
/*
* File類(lèi)的獲取功能
* String getParent() 返回String對(duì)象
* File getParentFile()返回File對(duì)象
* 獲取父路徑
*/
public static void function_3(){
File file = new File("d:\\eclipse\\eclipse.exe");
File parent = file.getParentFile();
System.out.println(parent);
}
/*
* File類(lèi)獲取功能
* String getAbsolutePath() 返回String對(duì)象
* File getAbsoluteFile() 返回File對(duì)象
* 獲取絕對(duì)路徑
* eclipse環(huán)境中,寫(xiě)的是一個(gè)相對(duì)路徑,絕對(duì)位置工程根目錄
*/
public static void function_2(){
File file = new File("src");
File absolute = file.getAbsoluteFile();
System.out.println(absolute);
}
/*
* File類(lèi)獲取功能
* long length()
* 返回路徑中表示的文件的字節(jié)數(shù)
*/
public static void function_1(){
File file = new File("d:\\eclipse\\eclipse.exe");
long length = file.length();
System.out.println(length);
}
/*
* File類(lèi)的獲取功能
* String getName()
* 返回路徑中表示的文件或者文件夾名
* 獲取路徑中的最后部分的名字
*/
public static void function(){
File file = new File("d:\\eclipse\\eclipse.exe");
String name = file.getName();
System.out.println(name);
/*String path = file.getPath();
System.out.println(path);*/
// System.out.println(file);
}
File類(lèi)判斷功能
boolean exists(): 判斷File構(gòu)造方法中封裝路徑是否存在
存在返回true,不存在返回false
boolean isDirectory(): 判斷File構(gòu)造方法中封裝的路徑是不是文件夾
如果是文件夾,返回true,不是文件返回false
boolean isFile(): 判斷File構(gòu)造方法中封裝的路徑是不是文件
如果是文件,返回true,不是文件返回false
/*
* File判斷功能
* boolean isDirectory()
* 判斷File構(gòu)造方法中封裝的路徑是不是文件夾
* 如果是文件夾,返回true,不是文件返回false
*
* boolean isFile()
* 判斷File構(gòu)造方法中封裝的路徑是不是文件
*/
public static void function_1(){
File file = new File("d:\\eclipse\\eclipse.exe");
if(file.exists()){
boolean b = file.isDirectory();
System.out.println(b);
}
}
/*
* File判斷功能
* boolean exists()
* 判斷File構(gòu)造方法中封裝路徑是否存在
* 存在返回true,不存在返回false
*/
public static void function(){
File file = new File("src");
boolean b = file.exists();
System.out.println(b);
}
File類(lèi)list獲取功能
String[] list():獲取到File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)
返回只有名字
File[] listFiles():獲取到,File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)
返回的是目錄或者文件的全路徑
static File[] listRoots(): 列出可用的文件系統(tǒng)根
public static void function_2(){
//獲取系統(tǒng)中的所有根目錄
File[] fileArr = File.listRoots();
for(File f : fileArr){
System.out.println(f);
}
}
/*
* File類(lèi)的獲取功能
* File[] listFiles()
* 獲取到,File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)
* 返回的是目錄或者文件的全路徑
*/
public static void function_1(){
File file = new File("d:\\eclipse");
File[] fileArr = file.listFiles();
for(File f : fileArr){
System.out.println(f);
}
}
/*
* File類(lèi)的獲取功能
* String[] list()
* 獲取到,File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)
* 返回只有名字
*/
public static void function(){
File file = new File("c:");
String[] strArr = file.list();
System.out.println(strArr.length);
for(String str : strArr){
System.out.println(str);
}
}
遞歸遍歷全目錄
public static void main(String[] args) {
File dir = new File("d:\\eclipse");
getAllDir(dir);
}
/*
* 定義方法,實(shí)現(xiàn)目錄的全遍歷
*/
public static void getAllDir(File dir){
System.out.println(dir);
//調(diào)用方法listFiles()對(duì)目錄,dir進(jìn)行遍歷
File[] fileArr = dir.listFiles();
for(File f : fileArr){
//判斷變量f表示的路徑是不是文件夾
if(f.isDirectory()){
//是一個(gè)目錄,就要去遍歷這個(gè)目錄
//本方法,getAllDir,就是給個(gè)目錄去遍歷
//繼續(xù)調(diào)用getAllDir,傳遞他目錄
getAllDir(f);
}else{
System.out.println(f);
}
}
}