Java IO流学习总结二:File
轉(zhuǎn)載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/54581478
本文出自【趙彥軍的博客】
Java IO流學習總結(jié)一:輸入輸出流
Java IO流學習總結(jié)二:File
Java IO流學習總結(jié)三:緩沖流-BufferedInputStream、BufferedOutputStream
Java IO流學習總結(jié)四:緩沖流-BufferedReader、BufferedWriter
Java IO流學習總結(jié)五:轉(zhuǎn)換流-InputStreamReader、OutputStreamWriter
Java IO流學習總結(jié)六:ByteArrayInputStream、ByteArrayOutputStream
Java IO流學習總結(jié)七:Commons IO 2.5-FileUtils
2021年 Java Okio-更加高效易用的IO庫
Java File類的功能非常強大,利用java基本上可以對文件進行所有操作。
首先來看File類的構(gòu)造函數(shù)的源碼
從源碼可以看出File類的構(gòu)造函數(shù)有6個,精簡如下
public File(String pathname) //文件的絕對路徑 public File(URI uri) //文件的URI地址public File(String parent, String child) //指定父文件絕對路徑、子文件絕對路徑 public File(File parent, String child) //指定父文件、子文件相對路徑//下面這兩個是File類中私有的構(gòu)造函數(shù),外面不能調(diào)用 private File(String child, File parent) private File(String pathname, int prefixLength)現(xiàn)在就看的比較清楚了,6個構(gòu)造函數(shù),可以分為2類。4個公共構(gòu)造函數(shù),2個私有構(gòu)造函數(shù)。
構(gòu)造函數(shù)1:
//電腦d盤中的cat.png 圖片的路徑 String filePath1 = "D:/cat.png" ; File file = new File( filePath1 ) ;構(gòu)造函數(shù)2:
String parentFilePath = "E:/cat" ;String childFilePath = "small_cat.txt" ;//創(chuàng)建parentFile文件 File parentFile = new File( parentFilePath ) ; parentFile.mkdir() ;//如果parentFile不存在,就會報異常 File file = new File( parentFilePath , childFilePath ) ;try {file.createNewFile() ; } catch (IOException e) {e.printStackTrace(); }構(gòu)造函數(shù)3:
String parentFilePath = "E:/cat" ;//構(gòu)造父文件 File parent = new File( parentFilePath ) ; parent.mkdir(); //如果parent文件不存在,就會報異常 File file = new File( parent , "small_cat.txt" ) ;try {file.createNewFile() ; } catch (IOException e) {e.printStackTrace(); }- 創(chuàng)建目錄
如果創(chuàng)建成功,返回 true , 創(chuàng)建失敗,返回false。如果這個文件夾已經(jīng)存在,則返回false.
只能創(chuàng)建一級目錄,如果父目錄不存在,返回false.
- 創(chuàng)建多級目錄
創(chuàng)建多級目錄,創(chuàng)建成功,返回true,創(chuàng)建失敗,返回false。如果父目錄不存在,就創(chuàng)建,并且返回true.
- 創(chuàng)建一個新的文件
如果文件不存在就創(chuàng)建該文件,創(chuàng)建成功,返回 true ;創(chuàng)建失敗,返回false。如果這個文件已經(jīng)存在,則返回false.
- 判斷方法
獲取文件的信息
String file.getName() //獲取文件的名字,只是名字,沒有路徑String file.getParent() //獲取父目錄的絕對路徑,返回值是一個字符串。如果文件有父目錄,那么返回父目錄的絕對路徑,(比如:`E:\cat`) , 如果文件本身就在磁盤的根目錄,那么返回磁盤的路徑,(比如:`E:\`)。File file.getParentFile() //獲取父文件,返回值是一個File對象。long time = file.lastModified() ; //返回文件最后一次修改的時間 Date dt = new Date(time);boolean renameTo(File file) //文件命名long file.length() //返回文件的大小,單位字節(jié)boolean file.delete() //刪除文件String[] file.list() //獲取該目錄下的所有的文件的名字。如果`file`為文件,返回值為`null`,在使用時記得判空;但是如果`file`為目錄,那么返回這個目錄下所有文件的名字,只是名字,不含路徑;如果`file`是一個空目錄,返回一個長度為0的數(shù)組;從上面的結(jié)果可以看出,`list()` 方法,只是對`file`為目錄時有效,當`file`為一個文件的時候,該方法毫無意義。File[] file.listFiles() //獲取該目錄下的所有的文件。如果`file`為文件,返回值為`null`,在使用時記得判空;但是如果`file`為目錄,那么返回這個目錄下所有的文件 ;如果`file`是一個空目錄,返回一個長度為0的數(shù)組;從上面的結(jié)果可以看出,`listFiles()` 方法,只是對`file`為目錄時有效,當`file`為一個文件的時候,該方法毫無意義。實戰(zhàn)經(jīng)驗1: file.list() , file.listFiles()
String filePath = "E:/cat" ; File file = new File( filePath ) ; file.mkdir() ;String[] names = file.list() ;for( int i = 0 ; i < names.length ; i++ ){System.out.println( "names: " +names[i]); }File[] files = file.listFiles() ; for( int i = 0 ; i < files.length ; i++ ){System.out.println( "files: "+ files[i].getAbsolutePath() ); }實戰(zhàn)經(jīng)驗2:掃描F盤所有的文件
public class A3 {public static void main(String[] args) throws IOException {String filePath = "F:/" ;File file = new File( filePath ) ;getFile(file);}private static void getFile( File file ){File[] files = file.listFiles() ;for( File f : files ){if ( f.isHidden() ) continue ;if(f.isDirectory() ){getFile( f ); }else{System.out.println( f.getAbsolutePath() + " " + f.getName() );}}} }效果圖:
在上面的實戰(zhàn)演練中用到了,file.list() , file.listFiles() 。這是兩個無參的方法,實際上還有兩個有參的方法,分別是
file.list(FilenameFilter filter) ;file.listFiles( FilenameFilter filter) ;file.listFiles(FileFilter filter)FileFilter
FileFilter是io包里面的一個接口,從名字上可以看出,這個類是文件過濾功能的。
需要重寫accept方法
比如:
實戰(zhàn):獲取指定目錄的所有文件夾
package com.app; import java.io.File; import java.io.FileFilter; import java.io.IOException;public class A3 {public static void main(String[] args) throws IOException {String filePath = "F:/" ;File file = new File( filePath ) ;getFile(file);}/*** 獲取指定目錄的所有文件夾* @param file*/private static void getFile( File file ){MyFileFilter myFileFilter = new MyFileFilter() ;File[] files = file.listFiles( myFileFilter ) ;for( File f : files ){if ( f.isHidden() ) continue ;System.out.println( f.getAbsolutePath() );}}static class MyFileFilter implements FileFilter {MyFileFilter(){}//pathname:文件的絕對路徑+ 文件名 , 比如:F:\安來寧 - 難得.mp3 , 或者: F:\文件夾1@Overridepublic boolean accept(File pathname) {if( pathname.isDirectory() ){return true ;}return false;}}}FilenameFilter
FileFilter是io包里面的一個接口,從名字上可以看出,這個類是文件名字過濾功能的。
需要重寫里面的accept方法。
比如:
實戰(zhàn):掃描出指定路徑的所有圖片
package com.app; import java.io.File; import java.io.FilenameFilter; import java.io.IOException;public class A3 {public static void main(String[] args) throws IOException {String filePath = "F:/" ;File file = new File( filePath ) ;getFile(file);}/*** 掃描出指定路徑的所有圖片* @param file*/private static void getFile( File file ){MyFilenameFilter myFileFilter = new MyFilenameFilter( ".png") ;File[] files = file.listFiles( myFileFilter ) ;for( File f : files ){if ( f.isHidden() ) continue ;System.out.println( f.getAbsolutePath() );}}static class MyFilenameFilter implements FilenameFilter {//type為需要過濾的條件,比如如果type=".jpg",則只能返回后綴為jpg的文件private String type; MyFilenameFilter( String type){this.type = type ;}@Overridepublic boolean accept(File dir, String name) {//dir表示文件的當前目錄,name表示文件名;return name.endsWith( type ) ;}}}運行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的Java IO流学习总结二:File的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android local.proper
- 下一篇: Java IO流学习总结六:ByteAr