IO中的分隔符應該用 "/"來表示 而不是"\" 因爲在linux的盤符中無法識別"\" 而"/"可以兼容linux和windows
如 : d:/abc/123.txt 而不是 d:\abc\123.txt
基本方法
File f1 = new File("c:/abc","123.txt");
//獲取文件的絕對路徑
String absolutePath = f1.getAbsolutePath();//c:\abc\123.txt
File absoluteFile = f1.getAbsoluteFile();//c:\abc\123.txt
//file和String互相轉換
File f2 = new File(absolutePath);
String path1 = f2.toString();
//獲取文件路徑
String path = f2.getPath();//c:\abc\123.txt
//獲取文件名
String name = f2.getName();//123.txt
//獲取上級文件夾名稱
String parent = f2.getParent();//c:\abc
//獲取上級文件夾
File parentFile = f2.getParentFile();//c:\abc
//file本身也只是一個路徑,跟String是一樣的
---------------------------------------------------------------------
//是否可執行 --只要能打開就算可執行的文件
boolean canExecute = f2.canExecute();//true
//是否可讀 --可讀可寫和系統文件權限有關(可以手動設置)
boolean canRead = f2.canRead();//true
//是否可寫 --可讀可寫和系統文件權限有關(可以手動設置)
boolean canWrite = f2.canWrite();//true
//是否爲隱藏文件
boolean hidden = f2.isHidden();//false
//最後修改時間(格林威治時間)
long lastModified = f2.lastModified();//1527592541180
//字節長度
long length = f2.length();//6
File f1 = new File("c:/abc","123333.txt");
//是否是文件
boolean file = f1.isFile();//true
//新建文件 --判斷是否存在,不存在則新建
boolean exists = f1.exists();//false
if(!exists){
boolean createNewFile = f1.createNewFile();
}else{
//存在該文件則重命名
//f1.renameTo(new File("c:/abc/1.txt"));
//刪除文件對象
boolean delete = f1.delete();
//java虛擬機退出時刪除文件對象
f1.deleteOnExit();
}
//創建臨時文件 -- prefix(String)前綴 文件名 --suffix(String)後綴 文件類型
//--directory(File)存放到哪個文件夾 默認爲windows/Temp文件夾
File.createTempFile("xxx",".textsd",new File("c:/abc"));//C:\abc\xxx7183939415209379196.textsd
-----------------------------------------------------------------------------------
File f1 = new File("c:/abc","123333.txt");
//是否爲目錄
boolean directory = f1.isDirectory();//false 非文件夾
//目錄是否存在
boolean exists = f1.exists();//true 存在文件..但是不存在文件夾
File f2 = new File("c:/abc/dis/12");
//創建目錄(單層目錄) --注意文件和文件夾也不能重名
boolean mkdir = f2.mkdir();
//多層目錄創建(此時用mkdir方法無效)
f2 = new File("c:abc/12/123/aaa");
boolean mkdirs = f2.mkdirs();
//獲取該目錄下的文件的名稱(目錄和文件)
f2 = new File("c:abc");
String[] list = f2.list();
for(String a : list){
System.out.println(a);
}
//獲取該目錄下的文件
File[] listFiles = f2.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
//獲取系統所有磁盤根目錄 C:\ D:\ E:\ F:\ G:\ (只在windows上應用)
File[] listRoots = File.listRoots();
for (File file : listRoots) {
System.out.println(file);
}
練習 :找出一個目錄下的所有子文件 遞歸
public static void main(String[] args) throws IOException {
File f1 = new File("c:/Program");
File[] listFiles = f1.listFiles();
getFiles(listFiles);
}
private static void getFiles(File[] f) {
for (File file : f) {
if(file.isDirectory()){
getFiles(file.listFiles());
}else{
System.out.println(file);
}
}
}
----文件名過濾器
public static void main(String[] args) throws IOException {
File fs = new File("c:/abc");
//獲取目錄下的所有文件
File[] listFiles = fs.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
/* 輸出所有文件和文件夾
c:\abc\1.txt
c:\abc\12
c:\abc\123.txt
c:\abc\123333.txt
c:\abc\dis
c:\abc\xxx7183939415209379196.textsd
*/
System.out.println("---------------");
//只輸出爲txt類型的文件
File[] listFiles2 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要過濾掉文件夾
if(new File(dir,name).isFile() && name.endsWith(".txt")){
return true;
}else{
return false;
}
}
});
for (File file : listFiles2) {
System.out.println(file);
}
/* 只有.txt類型的文件
c:\abc\1.txt
c:\abc\123.txt
c:\abc\123333.txt
*/
//可將代碼優化爲 --效果同上
File[] listFiles3 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要過濾掉文件夾
return new File(dir,name).isFile() && name.endsWith(".txt");
}
});
}