程序員可通過File類在硬盤上操作文件和目錄。File類只能表示文件/目錄的信息(如名稱、大小),不能用於文件的訪問。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
/*
* 假設在F盤下有一個文件Java
* 由於\是轉義字符,所以在路徑中要用雙斜槓
*/
File file1=new File("F:\\Java"); //File類的構造函數
/*
* File.separator用於設置分隔符 這樣任何系統都認識中間的分隔符
*/
File file11=new File("F:"+File.separator+"Java");
System.out.println(file1.exists()); //判斷文件/文件夾是否存在 true
System.out.println(file11.exists()); //判斷文件/文件夾是否存在 true
File file2=new File("F:\\Java\\IO\\File");
if(!file2.exists()){
/*
* 創建多級目錄用mkdirs(),創建一級目錄用mkdir()
*/
file2.mkdirs();//文件不存在,自動創建IO和File
//file2.mkdir(); //僅僅創建IO
}
else{
file2.delete();//如果目錄存在,刪除文件夾File
}
/*
* 判斷是否是一個目錄
* 如果是目錄返回true,如果不是目錄或者目錄不存在返回false
*/
System.out.println(file1.isDirectory()); //true
/*
* 判斷是否是一個文件
*/
System.out.println(file1.isFile()); //false
File file3=new File("F:\\Java\\IO\\File\\日記1.txt");
//File file33=new File("F:\\Java\\IO\\File","日記1.txt"); //功能與上面的語句相同
System.out.println(file3.isFile()); //false
if(!file3.exists())
try{
file3.createNewFile(); //自動添加異常處理
}catch(IOException e){
e.printStackTrace();
}
else
file3.delete();
System.out.println(file3.isFile()); //true
/*
* 常用的File對象的API
*/
//直接打印file1,打印的是file1.toString()的內容
System.out.println(file1); //F:\Java
System.out.println(file1.getAbsolutePath());//功能與上面的語句相同
System.out.println(file1.getName());//打印最後的目錄名 Java
System.out.println(file1.getParent());//得到父目錄的路徑 F:\
System.out.println(file1.getParentFile());//功能與上面的語句相同
System.out.println(file3.getName()); //日記1.txt
System.out.println(file3.getParent()); //F:\Java\IO\File
System.out.println(file3.getParentFile());
}
}
import java.io.File;
import java.io.IOException;
/*
* 列出File類的一些常用操作 比如過濾、遍歷等操作
* 假設F盤下有一個文件夾名爲java,java下有一文件夾名爲IO
* IO下有一文件夾名爲new,還有一文件名爲new.txt
* new下有一文件夾名爲new1,還有一文件名爲new1.txt
*/
class FileUtils {
/**
* 列出指定目錄下(包括其子目錄下)的所有文件
* @param dir
* @throws IOException
*/
public static void listDirectory(File dir)throws IOException{
if(!dir.exists()){
throw new IllegalArgumentException("目錄:"+dir+"不存在.");
}
//list()方法用於列出當前目錄下文件名和文件夾名
String[] filenames=dir.list();
System.out.println("目錄"+dir+"下的文件名和文件夾名:");
for(String f:filenames){
System.out.println(f); //不包含子目錄下的文件名和文件夾名
}
/*System.out.println("目錄"+dir+"的子目錄:");
for(String f:filenames){
System.out.println(dir+"\\"+f);
}*/ //該註釋掉的內容與下面的listFiles()方法功能相同
//listFiles()方法用於返回子目錄
File[] files=dir.listFiles();
System.out.println("目錄"+dir+"的子目錄:");
for(File file:files){
System.out.println(file);
}
System.out.println();
if(files!=null&&files.length>0){ //files!=null用來判斷是否有子目錄
for(File file:files){
if(file.isDirectory()){
//遞歸
System.out.println("將目錄 "+file+" 傳給listDirectory()進行遞歸:");
listDirectory(file);
}
}
}
}
}
public class FileUtilsTest{
public static void main(String[] args)throws IOException{
FileUtils.listDirectory(new File("F:\\Java"));
}
}
運行結果:
目錄F:\Java下的文件名和文件夾名:
IO
XML
字符編碼
目錄F:\Java的子目錄:
F:\Java\IO
F:\Java\XML
F:\Java\字符編碼
將目錄 F:\Java\IO 傳給listDirectory()進行遞歸:
目錄F:\Java\IO下的文件名和文件夾名:
new
new.txt
目錄F:\Java\IO的子目錄:
F:\Java\IO\new
F:\Java\IO\new.txt
將目錄 F:\Java\IO\new 傳給listDirectory()進行遞歸:
目錄F:\Java\IO\new下的文件名和文件夾名:
new1
new1.txt
目錄F:\Java\IO\new的子目錄:
F:\Java\IO\new\new1
F:\Java\IO\new\new1.txt
將目錄 F:\Java\IO\new\new1 傳給listDirectory()進行遞歸:
目錄F:\Java\IO\new\new1下的文件名和文件夾名:
目錄F:\Java\IO\new\new1的子目錄:
將目錄 F:\Java\XML 傳給listDirectory()進行遞歸:
目錄F:\Java\XML下的文件名和文件夾名:
books.txt
books.xml
目錄F:\Java\XML的子目錄:
F:\Java\XML\books.txt
F:\Java\XML\books.xml
將目錄 F:\Java\字符編碼 傳給listDirectory()進行遞歸:
目錄F:\Java\字符編碼下的文件名和文件夾名:
目錄F:\Java\字符編碼的子目錄: