File類檔案的操作
阿新 • • 發佈:2019-02-12
File類可以對我們資源管理器裡邊的資料夾及檔案進行一些操作
下邊的是建立及使用的基本規則
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) {
// 硬碟上的任何檔案在Java中都可以使用File 類表示
// pathname表示檔案的路徑
File f1 = new File("D:\\JavaTest\\1.txt");
// 通過第一個\來獲取第二個\的本來含義 轉義字元
File f2 = new File("D:/JavaTest/2.txt");
System.out.println("f1檔案是否存在:" + f1.exists());
System.out.println("f2檔案是否存在:" + f2.exists());
File f3 = new File("3.txt");
System.out.println("f3檔案是否存在:" + f3.exists());
// 絕對路徑: 從碟符開始的路徑 "D:\JavaTest\2.txt"
// 相對路徑: 從當前資料夾開始的路徑 .\3.txt
// .表示當前資料夾, 可以省略
// 相對路徑是相對WorkSpace專案的資料夾為起始
// 獲取物件的路徑
System.out.println(f3.getAbsolutePath());
// 不同的作業系統對路徑中的分隔符有不同的表示方式
// File.separator 常量能自動根據作業系統設定分隔符
// 解決跨平臺路徑不一致的問題,推薦寫法
File f4 = new File("D:"+File.separator + "JavaTest" + File.separator + "3.txt");
// 建立或者刪除的時候,一定要先試用exists()判斷檔案是否存在
// 只有檔案存在時才進行刪除操作,不存在才進行建立操作
// 建立和刪除操作可能需要延遲
f1.delete();
try {
f1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 重新命名
File f5 = new File("D:JavaTest/5.txt");
f1.renameTo(f5);
// File 沒有複製操作
// File只操作檔案,不處理裡面的內容
}
}
File的一些方法的使用
import java.io.File;
public class FileTest2 {
public static void main(String[] args) {
File f1 = new File("D:\\JavaTest");
if (f1.exists()) {
System.out.println("檔案存在!");
// 必須保證資料夾中沒有任何內容才能刪除
boolean flag = f1.delete();
if (flag) {
System.out.println("刪除成功");
}else {
System.out.println("刪除失敗");
}
}else {
// 建立資料夾 必須保證路徑上每一個資料夾都存在
boolean flag = f1.mkdir();
if (flag) {
System.out.println("建立成功");
}else {
System.out.println("建立失敗");
}
}
// DOS命令:mkdir make directory 建立檔案
// mkdir() 必須保證路徑上的父資料夾都存在
System.out.println("建立是否成功:" + f1.mkdir());
// mkdirs() 建立路徑上所有不存在的資料夾
System.out.println("建立是否成功:" + f1.mkdirs());
}
}
import java.io.File;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
public class FileTest4 {
public static void main(String[] args) {
File f1 = new File("D:/JavaTest/1.txt");
System.out.println("是不是檔案:" + f1.isFile());
System.out.println("是不是資料夾:" + f1.isDirectory());
System.out.println("可讀:" + f1.canRead() );
System.out.println("可寫:" + f1.canWrite() );
System.out.println("是否是隱藏檔案" + f1.isHidden());
System.out.println("大小:" + f1.length()); // 位元組
// 時間戳 : 從1970年1月1日00:00:00到指定時間經過了多少毫秒
System.out.println("最後修改時間:" + f1.lastModified());
// 時間戳轉化為對應的日期 1
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(System.currentTimeMillis()/1000, 0,ZoneOffset.ofHours(8));
System.out.println(localDateTime);
// 時間戳轉化為對應的日期 2
Date date = new Date(f1.lastModified());
System.out.println(date);
File f2 = new File("D:/JavaTest");
// 不包含資料夾中的檔案大小
System.out.println("資料夾大小:" + f2.length());
}
}
使用File類的方法,可以寫一個遍歷資料夾的方法
使用的遞迴的方法.
import java.io.File;
public class FileTest5 {
public static void main(String[] args) {
File f1 = new File("D:/");
String[] names = f1.list();
for (String name : names) {
// System.out.println(name);
}
// 當前資料夾下所有的檔案物件
File[] files = f1.listFiles();
// 遍歷所有物件
for (File file : files) {
// System.out.println(file.getName());
}
int x = getDirectoryLength(f1);
System.out.println(x);
}
public static int getDirectoryLength(File file){
int result = 0;
// 大小 = 所有檔案的大小 + 所有資料夾的大小
// 1.獲取所有的檔案
File[] files = file.listFiles();
// 2.遍歷進行累加
for (File file2 : files) {
if (file2.isFile()) {
// 普通檔案通過length() 獲取長度進行類加
result += file2.length();
System.out.println(file2.getName());
}else if(file2.isDirectory()) {
// 資料夾通過自己的方法再獲取長度
result += getDirectoryLength(file2);
// 方法內部呼叫自己的方式叫做遞迴
// 一定存在終止的條件,否則就會產生死迴圈
// 一定會有一個資料夾沒有子資料夾
}
}
return result;
}
}