了解輸入輸出技術(shù)
1犹褒,數(shù)據(jù)都在內(nèi)存中,想要把數(shù)據(jù)持久化正塌,需要使用系統(tǒng)中的一些輸入和輸出技術(shù)。
2义钉,Java程序調(diào)用jvm椿争,jvm調(diào)用所在系統(tǒng)的輸入和輸出內(nèi)容完成Java程序的輸入和輸出亮曹。
3猿推,簡單理解:內(nèi)容數(shù)據(jù)持久化到硬盤:輸出。將硬盤數(shù)據(jù)讀取到內(nèi)容運(yùn)算:輸入匪凉。后面還有很多的設(shè)備屉更。
4,輸入和輸出結(jié)束洒缀;解決的問題是操作設(shè)備上的數(shù)據(jù)。
5欺冀,java中的輸入輸出技術(shù)相關(guān)的對象都定義在java.io包树绩。
IO技術(shù)中的File對象
1,描述文件和文件夾的對象隐轩。
2饺饭,提供了和系統(tǒng)平臺相關(guān)的分隔符 File.separator
3,提供了一些用于操作文件的方法职车。
3.1 獲取操作:getXXX.獲取文件大小瘫俊,名稱,目錄悴灵,修改時間....
3.2 增加 createNewFile():創(chuàng)建文件扛芽,mkdir():創(chuàng)建目錄 mkdirs():創(chuàng)建多級目錄。
刪除delete()积瞒,判斷存在exists()川尖。
3.3 注意:創(chuàng)建文件:文件已存在不創(chuàng)建,不存在則創(chuàng)建茫孔,該方法拋IOException叮喳。
刪除文件:文件不存在,以及文件存在正在被使用缰贝,刪除都為false馍悟。
刪除目錄:目錄內(nèi)容為空,可以直接刪除剩晴,目錄內(nèi)容不為空锣咒,刪除不了,必須從里往外刪李破。
3.4 獲取目錄中的內(nèi)容宠哄。
String[] list():獲取目錄中的文件和文件夾名稱。
File[] listFiles():獲取目錄中的所有的文件和文件File對象嗤攻。
File[] listFiles(FileFilter):根據(jù)指定的文件過濾器進(jìn)行獲取毛嫉。
File[] listFiles(FilenameFilter):根據(jù)指定的文件名稱過濾器進(jìn)行獲取。
如何創(chuàng)建文件對象
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
/*
* File類的構(gòu)造函數(shù)妇菱。
* 如何創(chuàng)建文件對象承粤。
*/
String pathName = "/Users/yangxiooping/Desktop/test/hello.java";
File f1 = new File(pathName);//將Test22文件封裝成File對象暴区。注意;有可以封裝不存在文件或者文件夾辛臊,變成對象仙粱。
System.out.println(f1);
File f2 = new File("/Users/yangxiooping/Desktop/test","hello1.java");
System.out.println(f2);
//將parent封裝成file對象。
File dir = new File("/Users/yangxiooping/Desktop/test");
File f3 = new File(dir,"hello2.java");
System.out.println(f3);
File f4 = new File(File.separator+"Users"+File.separator+"yangxiooping"+File.separator+"Desktop"+File.separator+"test"+File.separator+"hello3.java");
System.out.println(f4);
}
}
File獲取文件相關(guān)信息
import java.io.File;
public class FileDemo {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File("Test22.java");
String absPath = file.getAbsolutePath();
String path = file.getPath();//File中封裝的路徑是什么獲取到的就是什么彻舰。
String filename = file.getName();
long size = file.length();
long time = file.lastModified();
/*
absPath=/Users/yangxiooping/Desktop/test/Test22.java
path=Test22.java
filename=Test22.java
size=6934
time=1532072939000
2018年7月20日 下午03時48分59秒
*/
System.out.println("absPath="+absPath);
System.out.println("path="+path);
System.out.println("filename="+filename);
System.out.println("size="+size);
System.out.println("time="+time);
// 毫秒值--Date--格式化--字符串文本
String str_date = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).format(new Date(time));
System.out.println(str_date);
}
}
File類中方法-文件以及文件夾的創(chuàng)建刪除存在
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("file.txt");
/*
* 創(chuàng)建文件伐割,如果文件不存在,創(chuàng)建 true 如果文件存在刃唤,則不創(chuàng)建 false隔心。 如果路徑錯誤,IOException尚胞。
*/
// boolean b1 = file.createNewFile();
// System.out.println("b1=" + b1);
// 文件刪除硬霍,如果文件存在,返回true 如果文件不存在或者正在被使用笼裳,返回false唯卖。
// boolean b2 = file.delete();//注意:不去回收站。慎用躬柬。
// System.out.println("b2="+b2);
// 需要判斷文件是否存在拜轨。
// boolean b3 = file.exists();
// System.out.println("b3="+b3);
// 對目錄操作 創(chuàng)建,刪除楔脯,判斷撩轰。
File dir = new File("file");
// boolean b4 = dir.mkdirs();//創(chuàng)建多級目錄。//dir.mkdirs();
// System.out.println("b4="+b4);
boolean b5 = dir.delete();// 刪除目錄時昧廷,如果目錄中有內(nèi)容堪嫂,無法直接刪除。
// // 只有將目錄中的內(nèi)容都刪除后木柬,保證該目錄為空皆串。這時這個目錄才可以刪除。
System.out.println("b5=" + b5);
// System.out.println("-----------判斷文件眉枕,目錄------------");
// File f = new File("e:\\javahaha");//要判斷是否是文件還是目錄恶复,必須先判斷存在。
// System.out.println(f.isFile());
// System.out.println(f.isDirectory());
}
}
對給定的目錄獲取內(nèi)部的文件和目錄
public class FileMethodDemo3 {
public static void main(String[] args) {
//需求:對給定的目錄獲取內(nèi)部的內(nèi)容速挑。
File dir = new File("file");
//健壯性判斷谤牡。1,必須是存在的姥宝,2翅萤,必須是目錄。否則容易引發(fā)返回數(shù)組為null腊满,出現(xiàn)NullPointerException
String[] names = dir.list();//獲取的是目錄下的當(dāng)前的文件以及文件夾的名稱套么。
// System.out.println(names);
for(String name : names){
// System.out.println(name);
}
File[] files = dir.listFiles();//獲取目錄下當(dāng)前文件以及文件對象培己。
for(File file : files){
System.out.println(file.lastModified());
}
}
}
File類中方法-過濾器
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileFilter;
/*
* 過濾文件加的過濾器。
*/
public class FileFilterByDir implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
/**
* 用于過濾指定擴(kuò)展名的文件胚泌。
*/
public class FilenameFilterBySuffix implements FilenameFilter {
private String suffix;
public FilenameFilterBySuffix(String suffix) {
super();
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
public class FileMethodDemo4 {
public static void main(String[] args) {
/*
* 需求2:獲取目錄中的內(nèi)容省咨,但是只要.java文件。
*/
File dir = new File("file");
File[] files = dir.listFiles(new FilenameFilterBySuffix(".java"));// 需要傳遞一個文件名過濾器 FilenameFilter對象玷室。
/*listFiles源碼解析零蓉。
public File[] listFiles(FilenameFilter filter) {//FilenameFilter filter = new FilenameFilterByJava()
String ss[] = list();//調(diào)用了File類中的list()獲取到所有的名稱數(shù)組 ss。
if (ss == null) return null;//健壯性判斷穷缤,如果數(shù)組為null壁公,就返回。
ArrayList<File> files = new ArrayList<>();//創(chuàng)建一個集合绅项。元素是File類型。
for (String s : ss)//遍歷名稱數(shù)組比肄。
if ((filter == null) || filter.accept(this, s))//對遍歷的名稱進(jìn)行過濾器的判斷快耿。將 當(dāng)前目錄this,遍歷到名稱s傳遞給accept方法芳绩。
//一旦條件滿足過濾器的過濾條件掀亥。
files.add(new File(s, this));//將滿足過濾條件添加到集合中。添加是 將文件名稱和當(dāng)前目錄封裝成File對象妥色。new File(dir,name);
return files.toArray(new File[files.size()]);//將集合轉(zhuǎn)成數(shù)組返回搪花,為啥呢?不需要增刪操作嘹害。
}
*/
for (File file : files) {
System.out.println(file.getName());
}
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者