一剧辐、File類
- File概述
打開API,搜索File類洒忧。閱讀其描述:File文件和目錄路徑名的抽象表示形式。即够颠,Java中把文件或者目錄(文件夾)都封裝成File對象熙侍。也就是說如果我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可,那么我們就要研究研究File這個類中都有那些功能可以操作文件或者文件夾呢
- File類的構造函數
- File(String pathname) :將一個字符串路徑封裝成File對象
- File(String parent,String child):傳入一個父級路徑和子級路徑
- File(File parent,String child):傳入一個File類型的父級路徑和子級路徑
- 案例代碼一:
package com.neuedu.demo; import java.io.File; /* * File:文件和目錄路徑名的抽象表示形式履磨,F(xiàn)ile 類的實例是不可變的 * * 構造方法: * 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) : 根據指定的父路徑和文件路徑創(chuàng)建File對象 //File f2 = new File("D:\\a","b.txt"); //File(File parent, String child) :根據指定的父路徑對象和文件路徑創(chuàng)建File對象 //File parent = new File("D:\\a"); //File f3 = new File(parent,"b.txt"); File f4 = new File(new File("D:\\a"),"b.txt"); } }
- File類創(chuàng)建和刪除功能
- boolean createNewFile():指定路徑不存在該文件時時創(chuàng)建文件,返回true,否則返回false
- boolean mkdir():當指定的單級文件夾不存在時創(chuàng)建文件夾并返回true蛉抓,否則返回false
- boolean mkdirs():當指定的多級文件夾某一級文件夾不存在時,創(chuàng)建多級文件夾并返回true,否則返回false
- boolean delete():刪除文件或者刪除單級文件夾
- 案例代碼二:
package com.neuedu.demo; import java.io.File; import java.io.IOException; /* * 創(chuàng)建功能 * 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() : 當指定文件不存在時創(chuàng)建文件并返回true,否則返回false System.out.println(f2.createNewFile()); //boolean mkdir() : 當指定文件夾不存在時創(chuàng)建文件夾并返回true矛辕,否則返回false File f3 = new File("b"); System.out.println(f3.mkdir()); //boolean mkdirs() : 創(chuàng)建指定文件夾笑跛,當文件夾所在的目錄不存在,則順道一塊創(chuàng)建了 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()); } }
- File類的判斷功能
- boolean exists():判斷指定路徑的文件或文件夾是否存在
- boolean isAbsolute():判斷當前路路徑是否是絕對路徑
- boolean isDirectory():判斷當前的目錄是否存在
- boolean isFile():判斷當前路徑是否是一個文件
- boolean isHidden():判斷當前路徑是否是隱藏文件
- 案例代碼三:
package com.neuedu.demo; 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()); } }
- File類的獲取功能和修改名字功能
- File getAbsoluteFile():獲取文件的絕對路徑,返回File對象
- String getAbsolutePath():獲取文件的絕對路徑,返回路徑的字符串
- String getParent():獲取當前路徑的父級路徑,以字符串形式返回該父級路徑
- File getParentFile():獲取當前路徑的父級路徑,以字File對象形式返回該父級路徑
- String getName():獲取文件或文件夾的名稱
- String getPath():獲取File對象中封裝的路徑
- long lastModified():以毫秒值返回最后修改時間
- long length():返回文件的字節(jié)數
- boolean renameTo(File dest): 將當前File對象所指向的路徑 修改為 指定File所指向的路徑
- 案例代碼四:
package com.neuedu.demo; 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() : 返回創(chuàng)建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() : 返回文件的字節(jié)數 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()); } }
- File類的其它獲取功能
- String[] list():以字符串數組的形式返回當前路徑下所有的文件和文件夾的名稱
- File[] listFiles():以File對象的形式返回當前路徑下所有的文件和文件夾的名稱
- static File[] listRoots():獲取計算機中所有的盤符
- 案例代碼五:
package com.neuedu.demo; 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]); } } }
- File類兩個案例
- 案例代碼六
輸出指定目錄下所有的java文件名(包含子目錄)package com.neuedu.demo; 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()); } } } } } }
- 案例代碼七
刪除指定的目錄(包含子目錄)package com.neuedu.demo; 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()) { //繼續(xù)查看是否還有文件和子目錄 method(f); } } //干掉自己 System.out.println(file.getName()); file.delete(); } } }
二、字符流與字節(jié)流
- 概述
- IO流分類:
- 流向
輸入流 讀取數據 FileReader Reader
輸出流 寫出數據 FileWriter Writer- 數據類型
字節(jié)流
字節(jié)輸入流 讀取數據 InputStream
字節(jié)輸出流 寫出數據 OutputStream
字符流
字符輸入流 讀取數據 Reader
字符輸出流 寫出數據 Writer
- 利用字符流復制文本文件
利用字符流將當前工程下的IODemo.java拷貝到d盤的a文件夾下
- 案例代碼八:
package com.neuedu.demo; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 使用字符流復制文本文件 * * 數據源 IODemo.java * 目的地 d:\\IODemo.java * */ public class FileCopyDemo { public static void main(String[] args) throws IOException { //創(chuàng)建字符輸入流對象 FileReader fr = new FileReader("IODemo.java"); //創(chuàng)建字符輸出流對象 FileWriter fw = new FileWriter("d:\\IODemo.java"); //一次讀寫一個字符 /*int ch; while((ch = fr.read()) != -1) { fw.write(ch); fw.flush(); }*/ //一次讀寫一個字符數組 int len;//用于存儲讀到的字符個數 char[] chs = new char[1024]; while((len = fr.read(chs)) != -1) { fw.write(chs,0,len); fw.flush(); } //釋放資源 fw.close(); fr.close(); } }
- 利用字節(jié)流復制文本文件
利用字節(jié)流將當前工程下的IODemo.java拷貝到d盤下
- 案例代碼九:
package com.neuedu.demo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /* * 使用字節(jié)流復制文本文件 * * 數據源 IODemo.java * 目的地 d:\\a\\IODemo.java */ public class FileCopyDemo { public static void main(String[] args) throws IOException { //創(chuàng)建字節(jié)輸入流對象 FileInputStream fis = new FileInputStream("IODemo.java"); //創(chuàng)建字節(jié)輸出流對象 FileOutputStream fos = new FileOutputStream("d:\\a\\IODemo.java"); //一次讀寫一個字節(jié) /*int by; while((by = fis.read()) != -1) { fos.write(by); }*/ //一次讀寫一個字節(jié)數組 int len;//存儲讀到的字節(jié)個數 byte [] bys = new byte [1024]; while ((len = fis.read(bys)) != -1) { fos.write(bys,0,len); } //釋放資源 fos.close(); fis.close(); } }
- 復制圖片
字節(jié)流可以操作所有類型的文件,因為所有的文件在計算機中都是以字節(jié)形式存儲
而字符流只能用來操作純文本類型的文件,不能操作字節(jié)類型的文件
- 案例代碼十:
package com.neuedu.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 分別使用字符流和字節(jié)流復制圖片 * * 二進制文件只能使用字節(jié)流進行復制(使用windows自帶記事本打開讀不懂的) * 文本文件的復制即可使用字符流,也可以使用字節(jié)流 * */ public class CopyImage { public static void main(String[] args) throws IOException { //method(); //創(chuàng)建字節(jié)輸入流對象 FileInputStream fis = new FileInputStream("傳智學院.jpg"); //創(chuàng)建字節(jié)輸出流對象 FileOutputStream fos = new FileOutputStream("d:\\傳智學院.jpg"); //一次讀寫一個字節(jié)數組 int len;//用于存儲讀到的字節(jié)個數 byte[] bys = new byte[1024]; while((len = fis.read(bys)) != -1) { fos.write(bys,0,len); } //釋放資源 fos.close(); fis.close(); } private static void method() throws FileNotFoundException, IOException { //創(chuàng)建字符輸入流對象 FileReader fr = new FileReader("傳智學院.jpg"); //創(chuàng)建字符輸出流對象 FileWriter fw = new FileWriter("d:\\傳智學院.jpg"); //一次讀寫一個字符數組 int len;//用于存儲讀到的字符個數 char[] chs = new char[1024]; while((len = fr.read(chs)) != -1) { fw.write(chs,0,len); fw.flush(); } //釋放資源 fw.close(); fr.close(); } }