Java高階---I/O
Java高階—I/O
一、檔案的建立
File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test\\test.txt"); //檔案路徑
二、File的主要方法
1、建立:
createNewFile() 在指定位置建立一個空檔案,成功就返回true,如果已存在就不建立,然後返回false。
mkdir() 在指定位置建立一個單級資料夾。
mkdirs() 在指定位置建立一個多級資料夾。
renameTo(File dest) 如果目標檔案與原始檔是在同一個路徑下,那麼renameTo的作用是重新命名, 如果目標檔案與原始檔不是在同一個路徑下,那麼renameTo的作用就是剪下,而且還不能操作資料夾。
2、刪除:
delete() 刪除檔案或者一個空資料夾,不能刪除非空資料夾,馬上刪除檔案,返回一個布林值。
deleteOnExit() jvm退出時刪除檔案或者資料夾,用於刪除臨時檔案,無返回值。
3、判斷:
exists() 檔案或資料夾是否存在。
isFile() 是否是一個檔案,如果不存在,則始終為false。
isDirectory() 是否是一個目錄,如果不存在,則始終為false。
isHidden() 是否是一個隱藏的檔案或是否是隱藏的目錄。
isAbsolute() 測試此抽象路徑名是否為絕對路徑名。
4、獲取:
getName() 獲取檔案或資料夾的名稱,不包含上級路徑。
length() 獲取檔案的大小(位元組數),如果檔案不存在則返回0L,如果是資料夾也返回0L。
getParent() 返回此抽象路徑名父目錄的路徑名字串;如果此路徑名沒有指定父目錄,則返回null。
lastModified() 獲取最後一次被修改的時間。
5、資料夾相關:
static File[] listRoots()列出所有的根目錄(Window中就是所有系統的碟符)
list() 返回目錄下的檔案或者目錄名,包含隱藏檔案。對於檔案這樣操作會返回null。
listFiles() 返回目錄下的檔案或者目錄物件(File類例項),包含隱藏檔案。對於檔案這樣操作會返回null。
listFiles(FilenameFilter filter) 返回指定當前目錄中符合過濾條件的子檔案或子目錄。對於檔案這樣操作會返回null。
三、檔案的輸入與輸出
1、最基本的輸入
File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt");
//開啟檔案輸入流
FileInputStream fis = new FileInputStream(file);
int temp = 0; //臨時儲存讀取的字元
while ((temp=fis.read())!=-1){ //直到讀到檔案結束
System.out.print((char) temp);
}
//關閉
fis.close();
結果顯示
aa.txt裡面的內容:
控制檯輸出的內容:
這裡亂碼是因為檔案的字元編碼格式問題,等我們先寫在讀就不會出現這種問題。
【注意:UTF-8中漢字一般佔3位】
2、位元組流輸入-FileInputStream
File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt");
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[fis.available()];
fis.read(b);
String s = new String(b);
System.out.println(s);
fis.close();
3、位元組流輸出-FileOutputStream
File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\b.txt");
FileOutputStream fos = new FileOutputStream(file); //還可以追加,第二個引數寫 true
String s = "\nPPPPPPPPPPPPPPPP66車釐子哈哈……&777";
byte b[] = s.getBytes();
fos.write(b);
fos.close();
5、字元流輸入 。。。。明天寫
6、字元流輸出
例子:
1、實現檔案的複製
File file = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\aa.txt"); //要複製的檔案
FileInputStream fis = new FileInputStream(file);
File file2 = new File("D:\\soft\\ApiProject\\src\\IO20210129\\Test2\\b.txt"); //貼上在這裡
FileOutputStream fos = new FileOutputStream(file2);
byte[] b = new byte[fis.available()];
fis.read(b);
//String s = new String(b); //這兩行可加可不加,就是在控制檯上看看複製的內容
//System.out.println(s);
fos.write(b);
fis.close();
fos.close();
2、實現檔案的遍歷
利用遞迴實現檔案的遍歷
public class FileSearch {
public static void search(String inPath) {
if(null==inPath)
return;
File file = new File(inPath);
if(file.exists()){ //首先判斷檔案是否存在
File[] files = file.listFiles();
if(files.length==0){
System.out.println("空資料夾");
return;
}else {
for(File f:files){
if(f.isDirectory()) {
System.out.println(f.getName()); //輸出資料夾名
search(f.getAbsolutePath()); //如果是目錄,就讓它繼續遍歷
}else {
System.out.println(f.getName()); //如果是檔案,輸出檔名
}
}
}
}else {
System.out.println("檔案不存在");
}
}
public static void main(String[] args) {
search("D:\\soft\\DeskTopShare");
}
}