----------------------ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------
黑馬程序員_java基礎File類篇Day4
今天學習了文件類File(其實我把文件和流混淆在一起),現在就簡單的對文件的一些細節,基礎操作做一下總結。
題外話(其實除了學習知識外,還要感謝陪伴我的兄弟姐妹們,特別是我的爸爸媽媽爺爺奶奶。)
File中跨平臺的問題
1,當我們寫File f=new File(“c:/demo.txt”);一般我就會這麼寫,但是這有一個問題,它不是跨平臺的,java中給我們提供了一個方法File.separator 它代表的是文件間隔符,當我們這樣寫File f=new File(“c:”+File.separator+”demo.txt”).其實這裏只是指出了,一個跨平臺的例子,還有如:newLine
File類常見的方法
1,創建,2刪除,3,判斷,4獲取信息
創建
創建單個文件
File f=new File(“F:/demo.txt”)
If(!f.exists())
{
f.createNewFile();
}
創建文件夾
File f=new File(“F:/demo”)
If(!f.exists())
{
F.mkdir();//如果創建的是多層文件夾,那麼用mkdirs()
}
注意在指定位置創建文件,如果該文件已經存在,則不創建和輸出流不一樣,建立就是創建文件。同時我們也可以將改成File f=new File(“F:/demo”),創建文件夾。
刪除
有兩個delete和deleteOnExit()
分析代碼
File f=new File(“F:/demo.txt”)
Code()
F.delete();
上面代碼是有問題的,如果code(),執行異常,那麼F.delete();不能刪除文件的,像我們打開一個視頻,在刪除它,那是不被允許的。
但是始終是有辦法的。
如:在File f=new File(“F:/demo.txt”)
後面加上f.deleteOnExit(),告訴虛擬機,等我退出時,幫我刪除這個文件。
判斷
獲取信息
列出一個文件夾中的文件
File f=new File("F:/");
if(f.exists())
{
File[] fname=f.listFiles();
for(int i=0;i<fname.length;i++)
{
System.out.println("l"+fname.length+"f:"+fname[i].getName());
}
}
但這樣只能把第一層文件列出,如果F:/下還有文件夾呢?這個就要用到遞歸的思想了。
核心代碼:
public static void showdir(File f,BufferedWriter bw) throws IOException
{
if(f.exists())
{
File[] file=f.listFiles();
for(int i=0;i<file.length;i++)
{
if(file[i].isDirectory())
{
showdir(file[i],bw);
}else
{
}
}
在主函數中調用這個函數就行了,如:
File f=new File("d:/1");
FileWriter fr=null;
BufferedWriter br=null;
fr=new FileWriter("d:/filelist.txt");
br=new BufferedWriter(fr);
showdir(f,br);
練習:刪除所有文件夾中的內容,最後只是一些空的文件夾。其實這個也是遞歸的思想。
public static void main(String[] args) {
// TODO Auto-generated method stub
File f=new File("d:/1");
diriskong(f);
}
public static void diriskong(File f)
{
File[] fs=f.listFiles();
for(int i=0;i<fs.length;i++)
{
if(fs[i].isDirectory())
{
diriskong(fs[i]);
}
else
{
fs[i].delete();
}
}
}
----------------------ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------