在Java中提供了操做文件及目錄(即咱們所說的文件夾)類File。有如下幾點注意事項: java
(1)不管是文件仍是目錄都使用File類操做; 編程
(2)File類只提供操做文件及目錄的方法,並不能訪問文件的內容,因此他描述的是文件自己的屬性; 數組
(3)若是要訪問文件自己,用到了咱們之後要學習的IO流. ide
下面讓咱們開始File的學習吧。
學習
一:構造方法
測試
File 文件名/目錄名 = new File("文字路徑字符串");
spa
在Java中提供了幾種建立文件及目錄的構造方法,但大致上都是用參數中的文字路徑字符串來建立,路徑能夠是相對路徑或絕對路徑,區別在於:
orm
(1)絕對路徑名包含了他所在文件的所有信息 對象
(2)相對路徑必須依據其餘路徑名的信息進行解釋
blog
二:通常方法
(1)文件檢測相關方法
a:boolean isDirectory():判斷File對象是否是目錄
b:boolean isFile():判斷File對象是否是文件
c:boolean exists():判斷File對象對應的文件或目錄是否是存在
d:boolean canWrite():判斷FIle對象對應的文件或目錄是否可寫
e:boolean canRead():判斷FIle對象對應的文件或目錄是否可讀
(2)文件操做的相關方法
a:boolean createNewFile():路徑名指定的文件不存在時,建立一個新的空文件
b:boolean delete():刪除File對象對應的文件或目錄
(3)目錄操做的相關方法
a:boolean mkdir():單層建立空文件夾
b:boolean mkdirs():多層建立文件夾
c:String[] list():支隊File爲文件夾時有效,返回這個目錄下的全部文件及子目錄
d:File[] listFiles():返回File對象表示的路徑下的全部文件對象數組
(4)訪問文件相關方法
a:String getName():得到文件或目錄的名字
b:String getPath() :得到文件或目錄的相對路徑
c:String getAbsolutePath():得到文件目錄的絕對路徑
d:String getParent():得到對象對應的目錄的父級目錄
e:long lastModified():得到文件或目錄的最後修改時間
f:long length() :得到文件內容的長度
g:boolean renameTo("新名字"):重命名此對象的名字,成功返回true,不然返回false
三:文件操做
1:目錄的建立
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
class
MyFile {
public
static
void
main(String[] args) {
//建立一個目錄
File file1 =
new
File("d:\\test");
//判斷對象是否是目錄
System.out.println("是目錄嗎?"+file1.isDirectory());
//判斷對象是否是文件
System.out.println("是文件嗎?"+file1.isFile());
//得到目錄名
System.out.println("名稱:"+file1.getName());
//得到相對路徑
System.out.println("相對路徑:"+file1.getPath());
//得到絕對路徑
System.out.println("絕對路徑:"+file1.getAbsolutePath());
//最後修改時間
System.out.println("修改時間:"+file1.lastModified());
//文件大小
System.out.println("文件大小:"+file1.length());
}
}
|
|
程序首次運行結果:
1
2
3
4
5
6
7
|
是目錄嗎?false
是文件嗎?false
名稱:test
相對路徑:d:\test
絕對路徑:d:\test
修改時間:0
文件大小:0
|
|
細心的你能夠看到,file1對象是目錄啊,怎麼在判斷「是否是目錄」時輸出了false呢?這是由於只是建立了表明他是目錄的對象,尚未真正的建立,這時候要用到mkdir()/mkdirs()方法,以下:
1
2
3
4
5
6
7
8
9
|
public
class
MyFile {
public
static
void
main(String[] args) {
//建立一個目錄
File file1 =
new
File("d:\\test\\test");
file1.mkdirs();//建立了多級目錄
//判斷對象是否是目錄
System.out.println("是目錄嗎?"+file1.isDirectory());
}
}
|
|
程序首次運行結果:
2:文件的建立
1
2
3
4
5
6
7
8
9
|
public
class
MyFile {
public
static
void
main(String[] args) {
//建立一個文件
File file1 =
new
File("d:\\a.txt");
//判斷對象是否是文件
System.out.println("是文件嗎?"+file1.isFile());
}
}
|
|
首次運行結果:
一樣會發現相似於上面的問題,這是由於他只是表明了一個文件對象,並無真正的建立,要用到createNewFile()方法,以下
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
class
MyFile {
public
static
void
main(String[] args) {
//建立一個文件對象
File file1 =
new
File("d:\\a.txt");
try
{
file1.createNewFile();//建立真正的文件
}
catch
(IOException e) {
e.printStackTrace();
}
//判斷對象是否是文件
System.out.println("是文件嗎?"+file1.isFile());
}
}
|
|
結果:
3:文件夾與文件的建立目錄
文件時存放在文件夾下的,因此應該先建立文件夾,後建立文件,以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
class
MyFile {
public
static
void
main(String[] args) {
//表明一個文件夾對象,單層的建立
File f3 =
new
File("d:/test");
File f4 =
new
File("d:/test/a.txt");
f3.mkdir();//先建立文件夾,才能在文件夾下建立文件
try
{
f4.createNewFile();
}
catch
(IOException e) {
e.printStackTrace();
}
//表明一個文件夾對象,多層的建立
File f5=
new
File("d:/test/test/test");
File f6 =
new
File("d:/test/test/test/a.txt");
f5.mkdirs();//多層建立
try
{
f6.createNewFile();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
|
|
運行結果爲,在D磁盤的test文件夾下有一個a.txt,在D磁盤的test/test/test下有一個a.txt文件。
4:編程:判斷是否是有這個文件,如有則刪除,沒有則建立
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
class
TestFileCreatAndDele {
public
static
void
main(String[] args) {
File f1 =
new
File("d:/a.txt");
if(f1.exists()){//文件在嗎
f1.delete();//在就刪除
}else{//不在
try
{
f1.createNewFile();//就從新建立
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
}
|
|
5:文件的篩選
在File中的list()方法中能夠接受一個FileNameFilter的參數,FileNameFilter是個過濾器也是一個接口,能夠經過匿名內部類的形式實現他的accept()方法,從而達到篩選的目的 ,以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//篩選出文件名爲.java後綴的文件
public
class
TestFileFilter {
public
static
void
main(String[] args) {
File file =
new
File("d:/test");//建立目錄
File[] f = file.listFiles(new
FileFilter(){//列出目錄下的符合條件的文件
@Override
public
boolean
accept(File ff) {//重寫accept方法
if(ff.getName().endsWith(".java")){//name以.java結尾的爲符合條件,將被篩出
return
true;
}else{
return
false;
}
}
});
for(File g:f){//輸出篩出的文件
System.out.println(g.getName());
}
}
}
|
|
測試以前,在d:/test目錄下導入一些文件,以便測試哦。。。結果爲篩出了全部.java文件
6:文件的逐層讀取
File的listFiles()只能列出當前文件夾下的文件及目錄,那麼其子目錄下的文件及目錄該如何獲取呢?解決的辦法有不少,在這運用遞歸解決。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//逐層獲取文件及目錄
public
class
TestFindFile {
public
static
void
openAll(File f) {// 遞歸的實現
File[] arr = f.listFiles();// 先列出當前文件夾下的文件及目錄
for
(File ff : arr) {
if
(ff.isDirectory()) {// 列出的東西是目錄嗎
System.out.println(ff.getName());
openAll(ff);// 是就繼續得到子文件夾,執行操做
}
else
{
// 不是就把文件名輸出
System.out.println(ff.getName());
}
}
}
public
static
void
main(String[] args) {
File file =
new
File("d:/test");// 建立目錄對象
openAll(file);// 打開目錄下的全部文件及文件夾
}
}
|
|
原文地址:
http://cinderella7.blog.51cto.com/7607653/1259097