IO處理的是什麼?
- 操作系統對於硬件設備進行了進一步的抽象 把硬件設備都視爲一個一個的文件 也就是一切皆文件思想
- 而IO操作就是處理的就是這些文件 例如通過網卡傳過來的數據 從網卡中接收數據的操作類似於讀文件 往網卡中發送數據的操作就類似於寫文件
- 那什麼是文件? 我們日常生活中txt doc exe .java lib mp3 等等都是一些文件
- 文件簡單理解 在外設硬盤上面保存數據的一種方式
- 文件一共可以由兩部分構成:屬性(文件大小,文件名,文件類型等)+內容(就是文件裏面放的是什麼)
- 所以我們學 JavaIO ,學什麼呢?就學對文件的屬性和內容進行操作,而實際寫入或者讀取的過程,我們稱之爲IO
絕對路徑與相對路徑
- 絕對路徑
以c: 或者 D: 盤開頭的路徑 就叫做絕對路徑 如 D:\java\test\more - 絕對路徑
必須先指定一個工作目錄 然後用.
或者..
開頭的路徑 表示一個具體的文件位置 相對路徑的參照點就是當前這個工作的目錄(..
表示從當前目錄的上一級目錄開始找)
例如:
D:\java\test 是絕對路徑 而 .\study.txt
是相對路徑
D:\java\test\more 是絕對路徑 而 ..\study.txt
是相對路徑
- 當工作目錄發生變化的時候 此時的相對路徑的寫法就會發生變化 但我們下面構造File對象的時候使用相對路徑和絕對路徑都是可以的 具體文件是否存在 需要使用 existi 方法判斷
- file.getAbsolutePath() 方法獲取File對象的絕對路徑
File類的常用方法
- 在 java.io 包之中,用 File 類來對文件進行操作(創建、刪除、取得信息等)
File類的準備工作
- 常用構造方法
- public File(String pathname) 創建指定路徑文件對象
- public File(String parent, String child) 同上,但可指明父路徑和子路徑
import java.io.File;
public class IOTest {
public static void main(String[] args) {
String path = "D:\\java\\test\\more";
String pathname = path + "\\moreTest.txt";
File file = new File(pathname);
}
}
File類的基本文件操作
- public boolean exists() 測試指定路徑中文件或者目錄是否存在
- public boolean isDirectory() 判定一個文件是目錄
- public boolean isFile() 判定是否是文件
- public boolean delete() 刪除文件
- public boolean createNewFile() throws IOException 創建一個新文件
import java.io.File;
import java.io.IOException;
public class IOTest {
public static void main(String[] args) {
String path = "D:\\java\\test\\more";
String pathname = path + "\\moreTest.txt";
File file = new File(pathname);
//判斷是否存在
System.out.print("判斷是否存在");
System.out.println(file.exists());
//如果存在就查看是否爲目錄或者文件
if (file.exists()) {
//判斷是否目錄
System.out.println("判斷是否目錄" + file.isDirectory());
//判斷是否文件
System.out.println("判斷是否文件" + file.isFile());
}
//刪除文件
System.out.print("刪除文件");
System.out.println(file.delete());
if(!file.exists()){
System.out.println("刪除文件成功!");
} else {
System.out.println("刪除文件失敗!");
}
//創建文件
if (! file.exists()) {
try {
System.out.print(file.createNewFile());
System.out.println("創建成功");
} catch (IOException e) {
System.out.println("創建失敗");
}
} else {
System.out.println("file存在不需要創建");
}
System.out.println("最後file是否存在" + file.exists());
}
}
File類的目錄操作
- public boolean mkdir() 創建一個空目錄
- public boolean mkdirs() 創建目錄(無論有多少級父目錄,都會創建)
- public String getParent() 取得父路徑
- public File getParentFile() 取得父File對象
import java.io.File;
public class IOTest2 {
public static void main(String[] args) {
String path = "D:\\java\\test\\more";
//要創建的目錄
String dir = "\\dir1\\dir2\\dir3";
String pathname = path + dir;
File file = new File(pathname);
System.out.println("file是否存在" +file.exists());
System.out.println("創建成功"+ file.mkdirs());
System.out.println("file是否存在" +file.exists());
System.out.println("獲得父路徑" + file.getParent());
File filePar = file.getParentFile();
System.out.println("獲得父對象" + filePar);
}
}
File類的文件屬性操作
- public long length() 取得文件大小(字節)
- public long lastModified() 最後一次修改日期
import javax.xml.crypto.Data;
import java.io.File;
import java.util.Date;
public class IOTest3 {
public static void main(String[] args) {
String path = "D:\\java\\test\\more\\";
String name = "moreTest.txt";
File file = new File(path + name);
//獲得文件字節大小 注意返回的是long類型
System.out.println("moreTest.txt" + "大小爲" + file.length());
//最近修改時間
System.out.println("moreTest.txt最近修改時間爲" + new Date(file.lastModified()));
}
}
File類的其他操作
- public File[] listFiles() 列出一個目錄指定的全部組成
import java.io.File;
public class IOTest4 {
public static void main(String[] args) {
File file = new File("D:\\java");
File[] files = file.listFiles();
for (File f : files
) {
System.out.println(f);
}
}
}
實現遞歸打印文件目錄列表
- 雖然File提供有 listFiles() 方法,但是這個方法本身只能夠列出本目錄中的第一級信息。如果要求列出目錄中所有級的信息,必須自己來處理。這種操作就必須通過遞歸的模式來完成。
import java.io.File;
public class IOTest4 {
public static void main(String[] args) {
File file = new File("D:\\java");
listAllFiles(file);
/* File[] files = file.listFiles();
for (File f : files
) {
System.out.println(f);
}*/
}
private static void listAllFiles(File file) {
if (file.isDirectory()) {
//如果是目錄 就獲得其目錄的所有組成
File[] files = file.listFiles();
//遞歸遍歷所有組成
assert files != null;
for (File f : files
) {
listAllFiles(f);
}
} else {
//說明是文件就輸出其路徑
System.out.println(file);
}
}
}