1. 程式人生 > >第1章 File類

第1章 File類

Java

1.1 File概述
打開API,搜索File類。閱讀其描述:File文件和目錄路徑名的抽象表示形式。即,Java中把文件或者目錄(文件夾)都封裝成File對象。也就是說如果我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可,那麽我們就要研究研究File這個類中都有那些功能可以操作文件或者文件夾呢
1.2 File類的構造函數
File(String pathname) :將一個字符串路徑封裝成File對象
File(String parent,String child):傳入一個父級路徑和子級路徑
File(File parent,String child):傳入一個File類型的父級路徑和子級路徑
1.2.1 案例代碼一:

package com.itheima_01;
import java.io.File;
/*
 * File:文件和目錄路徑名的抽象表示形式,File 類的實例是不可變的
 *
 * 構造方法:
 * File(File parent, String child)
 * File(String pathname)
 * File(String parent, String child) 
 *
 *
 */
public class FileDemo {
public static void main(String[] args) {
//File(String pathname) :將指定的路徑名轉換成一個File對象
//File f = new File("D:\\a\\b.txt");
//File(String parent, String child) : 根據指定的父路徑和文件路徑創建File對象
//File f2 = new File("D:\\a","b.txt");
//File(File parent, String child) :根據指定的父路徑對象和文件路徑創建File對象
//File parent = new File("D:\\a");
//File f3 = new File(parent,"b.txt");
File f4 = new File(new File("D:\\a"),"b.txt");
}
}

1.3 File類創建和刪除功能
boolean createNewFile():指定路徑不存在該文件時時創建文件,返回true,否則返回false
boolean mkdir():當指定的單級文件夾不存在時創建文件夾並返回true,否則返回false
boolean mkdirs():當指定的多級文件夾某一級文件夾不存在時,創建多級文件夾並返回true,否則返回false
boolean delete():刪除文件或者刪除單級文件夾
1.3.1 案例代碼二:

package com.itheima_01;

import java.io.File;
import java.io.IOException;

/*
 * 創建功能
 * boolean createNewFile() 
 * boolean mkdir() 
 * boolean mkdirs() 
 * 刪除功能
 * boolean delete()
 *
 *  絕對路徑:固定不可改變的路徑,以盤符開頭
 *  相對路徑:相對某個參照物,不能以盤符開頭
 *          在eclipse中相對路徑相對應當前項目的根目錄
 * 
 * 
 *  註意:刪除一個文件夾,這個文件夾下面不能有其他的文件和文件夾

 */
public class FileDemo2 {
public static void main(String[] args) throws IOException {
  File f = new File("d:\\a\\b.txt");//絕對路徑
  File f2 = new File("a.txt");//相對路徑
 //boolean createNewFile() : 當指定文件不存在時創建文件並返回true,否則返回false
 System.out.println(f2.createNewFile());

//boolean mkdir()   : 當指定文件夾不存在時創建文件夾並返回true,否則返回false
File f3 = new File("b");
System.out.println(f3.mkdir());
//boolean mkdirs() : 創建指定文件夾,當文件夾所在的目錄不存在,則順道一塊創建了
File f4 = new File("c\\d\\e");
System.out.println(f4.mkdir());
System.out.println(f4.mkdirs());
File f5 = new File("c.txt");
System.out.println(f5.mkdir());
//boolean delete() :當指定的文件或文件夾存在時刪除文件或者文件夾 並返回true,否則返回false
System.out.println(f2.delete());
System.out.println(f3.delete());

File f6 = new File("c");
System.out.println(f6.delete());
}
}

1.4 File類的判斷功能
boolean exists():判斷指定路徑的文件或文件夾是否存在
boolean isAbsolute():判斷當前路路徑是否是絕對路徑
boolean isDirectory():判斷當前的目錄是否存在
boolean isFile():判斷當前路徑是否是一個文件
boolean isHidden():判斷當前路徑是否是隱藏文件
1.4.1 案例代碼三:

package com.itheima_01;
import java.io.File;
import java.io.IOException;

/*
 *        判斷功能
 * boolean exists() 
 * boolean isAbsolute() 
 * boolean isDirectory()
         boolean isFile() 
         boolean isHidden()
 */
public class FileDemo3 {
public static void main(String[] args) throws IOException {
//method();
//method2();
//method3();
method4();
}

private static void method4() {
File f = new File("d:\\a\\b.txt");
//boolean isHidden() :判斷File對象指向的路徑是否有隱藏屬性,如果隱藏了則返回true,否則返回false
System.out.println(f.isHidden());
}

private static void method3() {
File f = new File("a.txt");
File f2 = new File("b");
//boolean isDirectory() :判斷File對象指向的路徑是否是文件夾,如果是則返回true,否則返回false
//boolean isFile()  : 判斷File對象指向的路徑是否是文件,如果是則返回true,否則返回false
//System.out.println(f.isDirectory());
//System.out.println(f2.isDirectory());
System.out.println(f.isFile());
System.out.println(f2.isFile());
}

private static void method2() {
//File f = new File("a.txt");
File f2 = new File("d:\\a\b.txt");
//boolean isAbsolute() :判斷File對象指向的路徑是否是絕對路徑,如果是絕對路徑則返回true,否則返回false
System.out.println(f2.isAbsolute());
}

private static void method() {
File f = new File("a.txt");
//f.createNewFile();
//boolean exists() : 判斷文件或者文件夾是否存在,如果存在則返回true,否則返回false
System.out.println(f.exists());
}
}

1.5 File類的獲取功能和修改名字功能
File getAbsoluteFile():獲取文件的絕對路徑,返回File對象
String getAbsolutePath():獲取文件的絕對路徑,返回路徑的字符串
String getParent():獲取當前路徑的父級路徑,以字符串形式返回該父級路徑
File getParentFile():獲取當前路徑的父級路徑,以字File對象形式返回該父級路徑
String getName():獲取文件或文件夾的名稱
String getPath():獲取File對象中封裝的路徑
long lastModified():以毫秒值返回最後修改時間
long length():返回文件的字節數
boolean renameTo(File dest): 將當前File對象所指向的路徑 修改為 指定File所指向的路徑
1.5.1 案例代碼四:

package com.itheima_01;[/align] 
import java.io.File;
import java.io.IOException;

/*
 *        獲取功能
         File getAbsoluteFile() 
 * String getAbsolutePath()
 * String getParent() 
 * File getParentFile()
 * String getName()
 * String getPath() 
          long lastModified()
          long length()
          修改功能:
         boolean renameTo(File dest)
 */
public class FileDemo4 {
public static void main(String[] args) throws IOException  {
//method();
//method2();
//method3();
File f = new File("d.txt");
File f2 = new File("e.txt");
//boolean renameTo(File dest) : 將當前File對象所指向的路徑 修改為 指定File所指向的路徑
//註意:修改的文件路徑不能存在,如果存在則修改失敗
System.out.println(f.renameTo(f2));
}

private static void method3() {
File f = new File("a.txt");
File f2 = new File("d:\\a\\b.txt");
File f3 = new File("b");
//String getName() : 獲取文件和文件夾的名稱
//System.out.println(f.getName());
//System.out.println(f2.getName());
//System.out.println(f3.getName());
//String getPath() : 返回創建File對象時給的路徑
//System.out.println(f.getPath());
//System.out.println(f2.getPath());
//System.out.println(f3.getPath());
//long lastModified() : 以毫秒值的形式返回最後修改時間
//System.out.println(f.lastModified());
//2514023311294
//Date d = new Date(2514023311294L);
//System.out.println(d.toLocaleString());
//long length() : 返回文件的字節數
System.out.println(f.length());
System.out.println(f3.length());
}

private static void method2() throws IOException {
//File f = new File("a.txt");
//File f2 = new File("b","c.txt");
//System.out.println(f2.createNewFile());
File parent = new File("b");
File f3 = new File(parent,"c.txt");
if(!parent.exists()) {
parent.mkdirs();
}
System.out.println(f3.createNewFile());
//String getParent()
System.out.println(f3.getParent());
//File getParentFile()
System.out.println(f3.getParentFile());
}

private static void method() {
File f = new File("d:\\a\\b.txt");
File f2 = new File("a.txt");
//File getAbsoluteFile()  :以File對象的形式返回當前File對象所有指向的絕對路徑
System.out.println(f2.getAbsoluteFile());
//String getAbsolutePath() : 返回File對象所指向的絕對路徑
System.out.println(f2.getAbsolutePath());
}

}

1.6 File類的其它獲取功能
String[] list():以字符串數組的形式返回當前路徑下所有的文件和文件夾的名稱
File[] listFiles():以File對象的形式返回當前路徑下所有的文件和文件夾的名稱
static File[] listRoots():獲取計算機中所有的盤符
1.6.1 案例代碼五:

package com.itheima_01;
import java.io.File;

/*
 * String[] list()
         File[] listFiles()
         static File[] listRoots()
 */
public class FileDemo5 {
public static void main(String[] args)  {
//method();
//method2();
//static File[] listRoots() :  返回的是所有盤符
File[] files = File.listRoots();
for (File file : files) {
System.out.println(file);
}
}

private static void method2() {
File f = new File("b");
File f2 = new File("D:\\workspace\\myFile");
File f3 = new File("c.txt");
//File[] listFiles()
File[] files = f3.listFiles();
for (File file : files) {
System.out.println(file.getName());
}
}

private static void method() {
File f = new File("b");
File f2 = new File("D:\\workspace\\myFile");
File f3 = new File("c.txt");
//String[] list() : 返回當前路徑下所有的文件和文件夾名稱
//註意:只有指向文件夾的File對象才可以調用該方法
String[] files = f3.list();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}

}
 [[/i]/mw_shl_code][/align][b][font=華文楷體][size=16pt]1.7 [/size][/font][b][font=華文楷體][size=16pt]F[/size][/font][/b][b][font=&quot;][size=16pt]ile[font=華文楷體]類[/font][/size][/font][/b][b][font=華文楷體][size=16pt]兩個[/size][/font][/b][b][font=&quot;][size=16pt][font=華文楷體]案例[/font][/size][/font][/b][/b]
[b][font=黑體][size=14pt]1.7.1 [/size][/font][b][font=黑體][size=14pt]案例[/size][/font][/b][b][font=&quot;][size=14pt][font=黑體]代碼六[/font][/size][/font][/b][/b][align=left][font=微軟雅黑]輸出指定目錄下所有的[/font]java文件名(包含子目錄)[/align][align=left][mw_shl_code=applescript,true] 
package com.itheima_02;

import java.io.File;

/*
 * 需求:輸出指定目錄下所有的java文件名(包含子目錄)
 */
public class RecurrenceTest {
public static void main(String[] args) {
File f = new File("src");
//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");
method(f);
}
public static void method(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判斷是否是文件對象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
else if(f.isDirectory()){
//是一個目錄對象
method(f);
}
}
}
}
//輸出指定目錄下的所有java文件名(不包含子目錄)
public static void method2(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判斷是否是文件對象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
}
}
}
}

1.7.2 案例代碼七
刪除指定的目錄(包含子目錄)

package com.itheima_02;[/align] 
import java.io.File;

/*
 * 需求:刪除指定的目錄(包含子目錄)
 *
 * 註意:如果要刪除一個目錄,則需要先刪除這個目錄下的所有子文件和子目錄
 *
 */
public class RecurrenceTest2 {
public static void main(String[] args) {
File f = new File("d:\\a");
method(f);
}
//刪除指定目錄下所有文件和目錄
public static void method(File file) {
if(file.isDirectory()) {
//幹掉自己所有的子文件和子目錄
//獲取所有的子文件和子目錄
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
//直接幹掉他
System.out.println(f.getName());
f.delete();
}
else if(f.isDirectory()) {
//繼續查看是否還有文件和子目錄
method(f);
}
}
//幹掉自己
System.out.println(file.getName());
file.delete();
}
}
}

1.7.3 案例代碼八
將指定目錄(包含內容)復制到另一個目錄中

package com.itheima_02;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 需求:將指定目錄(包含內容)復制到另一個目錄中
 *
 * 源目錄        目標目錄
 *
 *
 * 分析:
 * 首先我們要獲取源目錄下所有的文件和子目錄,
 * 我們可以把源目錄封裝成一個File對象,
 * 我們可以調用File類listFiles()方法,
 * 我們可以獲取源目錄下所有的文件和子目錄所對應的File對象。
 * 如果我們獲取到的是文件
 * 先在目標目錄中創建該文件所對應的目錄,
 * 進行文件的復制。
 * 如果我們獲取到的是子目錄
 * 看看子目錄下面是否還有其他的文件和更深層次的子目錄
 *
 *
 *

 */
public class RecurrenceTest3 {
public static void main(String[] args) throws IOException  {
//源目錄
File src = new File("d:\\myAPI");
//目標目錄
File dest = new File("d:\\a");
copyDir(src,dest);
}
public static void copyDir(File src,File dest) throws IOException {
//為了嚴謹起見,我們首先對源目錄和目標目錄進行判斷,看他們到底是不是目錄
if(src.isDirectory() && dest.isDirectory()) {
File newDir = new File(dest , src.getName());
if(!newDir.exists()) {
newDir.mkdir();
}
//獲取源目錄下所有的文件和子目錄
File[] files = src.listFiles();
for (File file : files) {
if(file.isFile()) {
//如果File對象是文件,我們就進行文件的復制
/*
 *
 * 假設file對象指向的文件是d:\\myAPI\\classpath,
 * 我們要把這個文件復制到d:\\a\\myAPI
 *
 * src:        d:\\myAPI
 * dest:        d:\\a
 * file:        d:\\myAPI\\classpath
 *
 * "d:\\a" + "myAPI" =  d:\\a\\myAPI
 *
 */
//d:\\a\\myAPI
/*File newDir = new File(dest , src.getName());
if(!newDir.exists()) {
newDir.mkdir();
}*/
//創建輸入流對象
FileInputStream fis = new FileInputStream(file);
//創建輸出流對象
// "d:\\a\\myAPI" + "classpath" = d:\\a\\myAPI\\classpath
FileOutputStream fos = new FileOutputStream(new File(newDir,file.getName()));
byte[] bys = new byte[1024];
int len;
while((len = fis.read(bys)) != -1) {
fos.write(bys, 0, len);
}
fis.close();
fos.close();
}
else if(file.isDirectory()) {
//如果File對象是子目錄,遞歸,看看子目錄下面到底有什麽
/*
 * src: d:\\myAPI
 * dest: d:\\a
 *
 * 新的源目錄:d:\\myAPI\\bin
 * 新目標目錄:d:\\a\\myAPI
 *
 *
 */
//File newDir = new File(dest,src.getName());
copyDir(file,newDir);
}
}
}
}

}

第1章 File類