1.1、File概述
文件和目錄路徑名的抽象表示形式。
用戶界面和操作系統使用與系統相關的路徑名字符串 來命名文件和目錄。此類呈現分層路徑名的一個抽象的、與系統無關的視圖。抽象路徑名 有兩個組件:
"/"
表示 UNIX 中的根目錄,"http:////"
表示 Microsoft Windows UNC 路徑名。字段摘要 | |
---|---|
static String | pathSeparator 與系統有關的路徑分隔符,為了方便,它被表示為一個字符串。 |
static char | pathSeparatorChar 與系統有關的路徑分隔符。 |
static String | separator 與系統有關的默認名稱分隔符,為了方便,它被表示為一個字符串。 |
static char | separatorChar 與系統有關的默認名稱分隔符。 |
構造方法摘要 | |
---|---|
File(File parent, String child) 根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。 | |
File(String pathname) 通過將給定路徑名字符串轉換為抽象路徑名來創建一個新 File 實例。 | |
File(String parent, String child) 根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。 | |
File(URI uri) 通過將給定的 file: URI 轉換為一個抽象路徑名來創建一個新的 File 實例。 |
方法摘要 | |
---|---|
boolean | canExecute() 測試應用程序是否可以執行此抽象路徑名表示的文件。 |
boolean | canRead() 測試應用程序是否可以讀取此抽象路徑名表示的文件。 |
boolean | canWrite() 測試應用程序是否可以修改此抽象路徑名表示的文件。 |
int | compareTo(File pathname) 按字母順序比較兩個抽象路徑名。 |
boolean | createNewFile() 當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。 |
static File | createTempFile(String PRefix, String suffix) 在默認臨時文件目錄中創建一個空文件,使用給定前綴和后綴生成其名稱。 |
static File | createTempFile(String prefix, String suffix, File directory) 在指定目錄中創建一個新的空文件,使用給定的前綴和后綴字符串生成其名稱。 |
boolean | delete() 刪除此抽象路徑名表示的文件或目錄。 |
void | deleteOnExit() 在虛擬機終止時,請求刪除此抽象路徑名表示的文件或目錄。 |
boolean | equals(Object obj) 測試此抽象路徑名與給定對象是否相等。 |
boolean | exists() 測試此抽象路徑名表示的文件或目錄是否存在。 |
File | getAbsoluteFile() 返回此抽象路徑名的絕對路徑名形式。 |
String | getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串。 |
File | getCanonicalFile() 返回此抽象路徑名的規范形式。 |
String | getCanonicalPath() 返回此抽象路徑名的規范路徑名字符串。 |
long | getFreeSpace() 返回此抽象路徑名指定的分區中未分配的字節數。 |
String | getName() 返回由此抽象路徑名表示的文件或目錄的名稱。 |
String | getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null 。 |
File | getParentFile() 返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null 。 |
String | getPath() 將此抽象路徑名轉換為一個路徑名字符串。 |
long | getTotalSpace() 返回此抽象路徑名指定的分區大小。 |
long | getUsableSpace() 返回此抽象路徑名指定的分區上可用于此虛擬機的字節數。 |
int | hashCode() 計算此抽象路徑名的哈希碼。 |
boolean | isAbsolute() 測試此抽象路徑名是否為絕對路徑名。 |
boolean | isDirectory() 測試此抽象路徑名表示的文件是否是一個目錄。 |
boolean | isFile() 測試此抽象路徑名表示的文件是否是一個標準文件。 |
boolean | isHidden() 測試此抽象路徑名指定的文件是否是一個隱藏文件。 |
long | lastModified() 返回此抽象路徑名表示的文件最后一次被修改的時間。 |
long | length() 返回由此抽象路徑名表示的文件的長度。 |
String[] | list() 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。 |
String[] | list(FilenameFilter filter) 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。 |
File[] | listFiles() 返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。 |
File[] | listFiles(FileFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。 |
File[] | listFiles(FilenameFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。 |
static File[] | listRoots() 列出可用的文件系統根。 |
boolean | mkdir() 創建此抽象路徑名指定的目錄。 |
boolean | mkdirs() 創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。 |
boolean | renameTo(File dest) 重新命名此抽象路徑名表示的文件。 |
boolean | setExecutable(boolean executable) 設置此抽象路徑名所有者執行權限的一個便捷方法。 |
boolean | setExecutable(boolean executable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的執行權限。 |
boolean | setLastModified(long time) 設置此抽象路徑名指定的文件或目錄的最后一次修改時間。 |
boolean | setReadable(boolean readable) 設置此抽象路徑名所有者讀權限的一個便捷方法。 |
boolean | setReadable(boolean readable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的讀權限。 |
boolean | setReadOnly() 標記此抽象路徑名指定的文件或目錄,從而只能對其進行讀操作。 |
boolean | setWritable(boolean writable) 設置此抽象路徑名所有者寫權限的一個便捷方法。 |
boolean | setWritable(boolean writable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的寫權限。 |
String | toString() 返回此抽象路徑名的路徑名字符串。 |
URI | toURI() 構造一個表示此抽象路徑名的 file: URI。 |
URL | toURL() 已過時。 此方法不會自動轉義 URL 中的非法字符。建議新的代碼使用以下方式將抽象路徑名轉換為 URL:首先通過 toURI 方法將其轉換為 URI,然后通過 URI.toURL 方法將 URI 裝換為 URL。 |
1.2、File創建與刪除
import java.io.*;class FileDemo1 { public static void main(String[] args) { method1(); } public static void method1() { //創建File對象 File f1=new File("a.txt"); //第二種 File f2=new File("d://abc","b.txt"); //第三種 File dir=new File("d://bcd"); File f3=new File(dir,"c.txt"); //使用分隔符 File f4=new File("d:"+File.separator+"abc"+File.separator+"d.txt"); //輸出 System.out.println("f1="+f1);//a.txt System.out.println("f2="+f2);//d:/abc/b.txt System.out.println("f3="+f3);//d:/bcd/c.txt System.out.println("f4="+f4);//d:/abc/d.txt }}
創建文件
//創建文件,在指定位置創建文件,如果該文件已經存在,則不創建,返回 false public static void method1() throws IOException { File f=new File("d://file.txt"); //創建 sop("create: "+f.createNewFile()); //刪除,刪除失敗返回false //sop("delete:"+f.delete()); //在退出時刪除指定文件 f.deleteOnExit(); }
1.3、File判斷 File獲取
package com.pb.day20.io.file;import java.io.File;import java.io.IOException;public class FileDemo2 { public static void main(String[] args) throws IOException { File f1=new File("d://a.txt"); File f2=new File("e://c.txt"); File dir1=new File("d://dbc"); File dir2=new File("d://dbc//dd//aa//d//f//dsf//fsd"); //判斷文件是否存在,不存在就創建 if(!f1.exists()){ f1.createNewFile(); } //判斷文件夾是否存在 if(!dir1.exists()){ dir1.mkdir();//創建一層文件夾 } //創建多層文件夾 if(!dir2.exists()){ dir2.mkdirs(); } //判斷 sop("f1是文件嗎?"+f1.isFile()); sop("dir1是文件夾嗎?"+dir1.isDirectory()); sop("f1是可執行文件嗎?"+f1.canExecute()); sop("f1可讀嗎?"+f1.canRead()); sop("f1可寫嗎?"+f1.canWrite()); sop("f1是隱藏文件嗎?"+f1.isHidden()); //獲取文件信息 sop(f1.getName());//文件名 sop(f1.getPath());//相對路徑 sop(f1.getAbsolutePath());//獲取絕對路徑,返回值是字符串 sop(f1.getAbsoluteFile());//獲取絕對路徑,返回值是File類對象 sop(f1.lastModified());//最后修改時間 長整型 sop(f1.length());//文件字節大小,長整型 //重命名 sop(f1.renameTo(f2));//剪切的作用 } public static void sop(Object obj){ System.out.println(obj); }}
1.4、File文件列表
package com.pb.day20.io.file;import java.io.File;import java.io.FilenameFilter;public class FileDemo3 { public static void main(String[] args) { method3(); } //列出當前目錄下的指定文件 public static void method3(){ File f=new File("d://"); File [] files=f.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //返回txt文件 return name.endsWith(".txt"); } }); for(File ff:files){ System.out.println(ff.getName()+"..."+ff.length()); } } //列表當前目錄下的所有文件包含文件夾名字 public static void method2(){ File f=new File("c://"); String [] names=f.list();//必須是目錄,否則就是空指針異常 for(String s:names){ System.out.println(s); } } //列出當前系統的所有盤符 public static void method1(){ File [] files=File.listRoots(); for(File f:files){ System.out.println(f); } }}
1.6、File列出所有遞歸
package com.pb.day20.io.file;/** * 遞歸調用, * 列表指定目錄下的,所有文件包括子目錄中的文件 */import java.io.File;public class FileDemo4 { public static void main(String[] args) { File dir=new File("d://"); getFiles(dir); } //遞歸 public static void getFiles(File dir){ System.out.println(dir); //獲取文件數組,列表 File[] files=dir.listFiles(); //遍歷 for(File file:files){ //判斷是不是文件夾 if(file.isDirectory()){ //是文件夾就再次調用 getFiles(file); }else{ //不是就列表 System.out.println(file); } } }}
遞歸:
限定條件
注意遞歸的次數,盡量避免內存溢出
1.7、File刪除帶文件的目錄
package com.pb.day20.io.file;import java.io.File;public class FileDemo5 { public static void main(String[] args) { File dir=new File("d://kk"); removeDir(dir); } //刪除,帶有文件的多層文件夾 public static void removeDir(File dir){ File [] files =dir.listFiles(); for(int x=0;x<files.length;x++){ if(files[x].isDirectory()){ removeDir(files[x]); }else{ //刪除文件 System.out.println(files[x]+"----file----"+files[x].delete()); } } //刪除空文件夾 System.out.println(dir+"----dir----"+dir.delete()); }}
1.8、將一個文件夾的的所有文件,包含子目錄都復制要另一個目錄下
/*將一個文件夾的的所有文件,包含子目錄都復制要另一個目錄下*/import java.io.*;class IOCopy { public static void main(String[] args) { //源文件 File src=new File("D://music"); //目的文件 File des=new File("e://test"); copyDir(src,des); System.out.println("復制完成!"); } /* 遞歸復制 */ public static void copyDir(File src,File des) { //獲取列表 File[] files=src.listFiles(); //判斷目標文件是否存在 if(!des.exists()){ //創建目錄 des.mkdir(); } //遍歷 for(File f:files) { //判斷是不是目錄 if(f.isDirectory()) { //獲取路徑,拼接文件名,再次調用自己 copyDir(new File(f.getPath()),new File(des+"http://"+f.getName())); //是不是文件 }else if (f.isFile()) { //復制 copyFile(new File(f.getPath()),new File(des+"http://"+f.getName())); } } } //使用IO流復制文件 public static void copyFile(File src,File des) { BufferedInputStream bis=null; BufferedOutputStream bos=null; try { bis=new BufferedInputStream(new FileInputStream(src)); bos=new BufferedOutputStream(new FileOutputStream(des)); //聲明緩沖區 int len=0; while((len=bis.read())!=-1) { bos.write(len); } } catch (IOException e) { e.printStackTrace(); }finally { try { if(bos!=null) bos.close(); } catch (IOException e) { e.printStackTrace(); } try { if(bis!=null) bis.close(); } catch (IOException e) { e.printStackTrace(); } } }}
2.1、Properties概述
構造方法摘要 | |
---|---|
Properties() 創建一個無默認值的空屬性列表。 | |
Properties(Properties defaults) 創建一個帶有指定默認值的空屬性列表。 |
方法摘要 | |
---|---|
String | getProperty(String key) 用指定的鍵在此屬性列表中搜索屬性。 |
String | getProperty(String key, String defaultValue) 用指定的鍵在屬性列表中搜索屬性。 |
void | list(PrintStream out) 將屬性列表輸出到指定的輸出流。 |
void | list(PrintWriter out) 將屬性列表輸出到指定的輸出流。 |
void | load(InputStream inStream) 從輸入流中讀取屬性列表(鍵和元素對)。 |
void | load(Reader reader) 按簡單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對)。 |
void | loadFromxml(InputStream in) 將指定輸入流中由 XML 文檔所表示的所有屬性加載到此屬性表中。 |
Enumeration<?> | propertyNames() 返回屬性列表中所有鍵的枚舉,如果在主屬性列表中未找到同名的鍵,則包括默認屬性列表中不同的鍵。 |
void | save(OutputStream out, String comments) 已過時。 如果在保存屬性列表時發生 I/O 錯誤,則此方法不拋出 IOException。保存屬性列表的首選方法是通過 store(OutputStream out, String comments) 方法或 storeToXML(OutputStream os, String comment) 方法來進行。 |
Object | setProperty(String key, String value) 調用 Hashtable 的方法 put 。 |
void | store(OutputStream out, String comments) 以適合使用 load(InputStream) 方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流。 |
void | store(Writer writer, String comments) 以適合使用 load(Reader) 方法的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出字符。 |
void | storeToXML(OutputStream os, String comment) 發出一個表示此表中包含的所有屬性的 XML 文檔。 |
void | storeToXML(OutputStream os, String comment, String encoding) 使用指定的編碼發出一個表示此表中包含的所有屬性的 XML 文檔。 |
Set<String> | stringPropertyNames() 返回此屬性列表中的鍵集,其中該鍵及其對應值是字符串,如果在主屬性列表中未找到同名的鍵,則還包括默認屬性列表中不同的鍵。 |
Properties
類表示了一個持久的屬性集。Properties
可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。
2.2、存取功能
public static void setAndGet(){ //聲明 Properties prop=new Properties(); //設置 prop.setProperty("username", "root"); prop.setProperty("passWord","root"); //獲取用戶名對應的值 System.out.println(prop.getProperty("username")); //修改密碼 prop.setProperty("password","root123"); //獲取全部key Set<String> keys=prop.stringPropertyNames(); //遍歷 for(String s:keys){ System.out.println(s+": "+prop.getProperty(s)); } }
2.3、存取配置文件
public static void method2() throws IOException { // 聲明Properties集合 Properties prop = new Properties(); FileInputStream fis = new FileInputStream("D:/info.txt"); FileOutputStream fos = new FileOutputStream("D://info.txt"); //加載數組到集合 prop.load(fis); System.out.println(prop); prop.list(System.out); //修改 prop.setProperty("sex", "woman"); prop.store(fos, "sex is woman"); System.out.println(prop); fos.close(); fis.close(); } public static void method1() throws IOException { // 文件流 BufferedReader br = new BufferedReader(new FileReader("D://info.txt")); // 聲明Properties集合 Properties prop = new Properties(); String line = null; // 遍歷 while ((line = br.readLine()) != null) { // System.out.println(line); String[] arr = line.split("="); // System.out.println(arr[0]+"..."+arr[1]); prop.setProperty(arr[0], arr[1]); } System.out.println(prop); br.close(); }
示例
public static void method() throws IOException{ File file=new File("a.txt"); //判斷文件是否存在 if(!file.exists()){ file.createNewFile(); } FileInputStream fis=new FileInputStream(file); //聲明集合 Properties prop=new Properties(); prop.load(fis); int count=0; String value=prop.getProperty("times"); if(value!=null){ count=Integer.parseInt(value); //判斷次數 if(count>=5){ System.out.println("使用次數已經用完,請續費!"); return; } } //次數+1 count++; //把KEY和VALUE放回去 prop.setProperty("times", count+""); FileOutputStream fos=new FileOutputStream(file); prop.store(fos, "次數+1"); fos.close(); fis.close(); }
3.1、PrintWriter與PrintStream
package com.pb.io.properties.demo1;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;/** * 從鍵盤接收數據,并輸出在控制臺 * 使用PrintWriter * */public class PrintWriterDemo { public static void main(String[] args) throws IOException { //從鍵盤接收數據,并輸出在控制臺 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //使用打印流輸出,并自動刷新 PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)),true); String line=null; System.out.println("請輸入內容,以over結束!"); while((line=br.readLine())!=null){ if("over".equals(line)){ break; } pw.println(line); } pw.close(); br.close(); }}
3.2、序列流--SequenceInputStream
SequenceInputStream
表示其他輸入流的邏輯串聯。它從輸入流的有序集合開始,并從第一個輸入流開始讀取,直到到達文件末尾,接著從第二個輸入流讀取,依次類推,直到到達包含的最后一個輸入流的文件末尾為止。
構造方法摘要 | |
---|---|
SequenceInputStream(Enumeration<? extends InputStream> e) 通過記住參數來初始化新創建的 SequenceInputStream ,該參數必須是生成運行時類型為 InputStream 對象的 Enumeration 型參數。 | |
SequenceInputStream(InputStream s1, InputStream s2) 通過記住這兩個參數來初始化新創建的 SequenceInputStream (將按順序讀取這兩個參數,先讀取 s1 ,然后讀取 s2 ),以提供從此 SequenceInputStream 讀取的字節。 |
方法摘要 | |
---|---|
int | available() 返回不受阻塞地從當前底層輸入流讀?。ɑ蛱^)的字節數的估計值,方法是通過下一次調用當前底層輸入流的方法。 |
void | close() 關閉此輸入流并釋放與此流關聯的所有系統資源。 |
int | read() 從此輸入流中讀取下一個數據字節。 |
int | read(byte[] b, int off, int len) 將最多 len 個數據字節從此輸入流讀入 byte 數組。 |
4.1、合并流
package com.pb.io.properties.demo1;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.Enumeration;import java.util.Vector;public class SequenceDemo { public static void main(String[] args) throws IOException { Vector<FileInputStream> v=new Vector<FileInputStream>(); v.add(new FileInputStream("d://1.txt")); v.add(new FileInputStream("d://2.txt")); v.add(new FileInputStream("d://3.txt")); //轉換為枚舉 Enumeration<FileInputStream> en=v.elements(); //合并流 SequenceInputStream sis=new SequenceInputStream(en); //目標文件 FileOutputStream fos=new FileOutputStream("d://4.txt"); //聲明緩沖區 byte[] buf=new byte[1024]; int len=0; while((len=sis.read(buf))!=-1){ fos.write(buf,0,len); } fos.close(); sis.close(); }}
5.1、分割流
package com.pb.io.properties.demo1;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.Iterator;/** * 將文件切割 * 再合并 * */public class SplitDemo { public static void main(String[] args) throws IOException { //split(); merge(); } //合并 public static void merge() throws IOException{ File src=new File("D://split"); File [] files=src.listFiles(); ArrayList<FileInputStream> list=new ArrayList<FileInputStream>(); for(File f:files){ list.add(new FileInputStream(f)); } Iterator<FileInputStream> it=list.iterator(); //創建枚舉 Enumeration<FileInputStream> en=new Enumeration<FileInputStream>() { @Override public FileInputStream nextElement() { return it.next(); } @Override public boolean hasMoreElements() { return it.hasNext(); } }; //創建合并流 SequenceInputStream sis=new SequenceInputStream(en); FileOutputStream fos=new FileOutputStream("D://split//t.mp3"); byte[] buf=new byte[1024]; int len=0; while((len=sis.read(buf))!=-1){ fos.write(buf,0,len); } fos.close(); sis.close(); } //切割 public static void split() throws IOException{ //源文件 File file=new File("D://gm.mp3"); FileInputStream fis=new FileInputStream(file); //目標 FileOutputStream fos=null; //緩沖區 byte[] buf=new byte[1024*1024]; int len=0; int count=1; while((len=fis.read(buf))!=-1){ fos=new FileOutputStream("D://split//"+(count++)+".part"); fos.write(buf,0,len); } fos.close(); fis.close(); }}
新聞熱點
疑難解答