java_IO中File類
1.1建立一個新檔案
建立檔案:
public boolean createNewFile()
throws IOException
import java.io.File; import java.io.IOException; public class FileDemo01 { public static void main(String[] args) { File f = new File("\\test.txt"); try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } }
}
以上已經完成了檔案的建立功能,但是如果開發時按照以上的格式編寫,肯定會出現錯誤。
在各個作業系統中,實際上路徑的分隔符是不一樣的,例如:
*windows中使用反斜槓
*linux中使用正斜槓 /
如果想要讓java程式的可以執行繼續保持,則最好根據所在的作業系統來自動使用分隔符
public class FileDemo02 { public static void main(String[] args) { System.out.println("pathSeparator:" + File.pathSeparator); //呼叫靜態常量 System.out.println("separator:" + File.separator); //呼叫靜態常量 }
}
如果想讓java程式繼續保持可移植性,那麼在編寫路徑的時候就應該使用File類中的常量,修改之前的程式
import java.io.File; import java.io.IOException; public class FileDemo03 { public static void main(String[] args) { File f = new File("d:" + File.separator + "test03.txt"); try { f.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
1.2刪除檔案
在File類中使用一下方法可以刪除檔案
public boolean delete()
import java.io.File;
import java.io.IOException;
public class FileDemo04 {
public static void main(String[] args) {
File f = new File("d:" + File.separator + "test03.txt");
f.delete();
}
}
此時,檔案缺失已經刪除掉了,但是是不是應該在刪除檔案之前判斷一下檔案是不是存在之後再刪除更好呢
在File類中可以使用exists()方法判斷一個檔案是否存在
1.3綜合建立、刪除檔案的操作
現在有一個要求
給定一個路徑,如果此檔案存在,則刪除,如果檔案不存在,則建立一個新檔案
import java.io.File;
import java.io.IOException;
public class FileDemo06 {
public static void main(String[] args) {
File f = new File("d:" + File.separator + "test.txt");
if(f.exists()) {
f.delete();
}else {
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
從執行的結果中可以發現,所有的操作並不會立刻執行。因為java是通過JVM與底層進行互動的,所以所有的操作需要經過JVM完成,那麼就有可能產生延遲
提示:
對於檔案的字尾是可有可無的
1.4建立一個資料夾
使用markdir()方法建立一個資料夾
public boolean mkdir()
建立資料夾操作:
import java.io.File;
import java.io.IOException;
public class FileDemo07 {
public static void main(String[] args) {
File f = new File("d:"+File.separator + "mldn");
f.mkdir();
}
}
1.5列出制定目錄的全部檔案
如果現在給出了一個目錄,則可以直接列出目錄中的內容,但是列出的方法在File類中存在兩個:
*以字串陣列的形式返回:public String[] list()
*以File陣列的形式返回:public File[] listFile()
操作一:使用list()列出全部內容
import java.io.File;
import java.io.IOException;
public class FileDemo08 {
public static void main(String[] args) {
File f = new File("d:"+File.separator); //例項化File類的物件
String str[] = f.list(); //列出給定目錄中的內容
for(int i = 0;i < str.length;i++) {
System.out.println(str[i]);
}
}
}
執行結果:
$360Section
$RECYCLE.BIN
.temp
2017MySQL
26b6bd8c208637179819b61c20750f5b.jpg
360
360Downloads
360MoveData
360安全瀏覽器下載
360使用者檔案
360驅動大師目錄
BaiduNetdiskDownload
DUMP1fee.tmp
ECLIPSE
editplus
java
mldn
mycode
myeclipse
pagefile.sys
PTXLocalMirror
sublime
SYDownload
System Volume Information
我的檔案
新建資料夾
新建資料夾 (4)
新建資料夾 (6)
李興華Java視訊
架包
百度雲網盤
以上只是列出了全部的名字,包括資料夾的名字是或者是檔案的名字等
操作二:使用listfeli()列出全部內容
import java.io.File;
import java.io.IOException;
public class FileDemo09 {
public static void main(String[] args) {
File f = new File("d:"+File.separator); //例項化File類的物件
File files[] = f.listFiles();
for(int i = 0;i < files.length;i++) {
System.out.println(files[i]);
}
}
}
執行結果:
d:$360Section
d:$RECYCLE.BIN
d:.temp
d:\2017MySQL
d:\26b6bd8c208637179819b61c20750f5b.jpg
d:\360
d:\360Downloads
d:\360MoveData
d:\360安全瀏覽器下載
d:\360使用者檔案
d:\360驅動大師目錄
d:\BaiduNetdiskDownload
d:\DUMP1fee.tmp
d:\ECLIPSE
d:\editplus
d:\java
d:\mldn
d:\mycode
d:\myeclipse
d:\pagefile.sys
d:\PTXLocalMirror
d:\sublime
d:\SYDownload
d:\System Volume Information
d:\我的檔案
d:\新建資料夾
d:\新建資料夾 (4)
d:\新建資料夾 (6)
d:\李興華Java視訊
d:\架包
d:\百度雲網盤
後者列出的是完整的路徑。
1.6判斷一個給定的路徑是否是目錄
在File類中直接使用:public boolean isDirectory()
給定的路徑,判斷是否是目錄
import java.io.File;
import java.io.IOException;
public class FileDemo10 {
public static void main(String[] args) {
File f = new File("d:"+File.separator); //例項化File類的物件
if(f.isDirectory()) {
System.out.println(f.getPath() + "是目錄" );
}else {
System.out.println("不是目錄");
}
}
}
1.7要求:列出制定目錄的全部內容
如果給了一個目錄,則要求列出次目錄的全部檔案都列出來,但是列的時候還會存在子資料夾
應該採用遞迴的呼叫形式
import java.io.File;
public class FileDemo11 {
public static void main(String[] args) {
File my = new File("d:" + File.separator);
print(my);
}
public static void print(File file) { //遞迴呼叫
if(file != null) { //判斷物件是否為空
if(file.isDirectory()) { //判斷是不是目錄
File f[] = file.listFiles(); // 列出全部的檔案
if(f!=null) {
for(int i = 0;i < f.length;i++) {
print(f[i]);
}
}
}else {
System.out.println(file);
}
}
}
}
總結:
1.File類是在java.io包中唯一與檔案本身有關的
2.可以使用File類建立、刪除等常見的檔案操作
3.在使用File類制定路徑的時候一定要注意作業系統間的差異,儘量使用separator進行分割