基本
概念
流:流動、流向 從一段移動到另一端 源頭與目的地
程序 與 文件|數組|網絡連接|數據庫 ,以程序爲中心
IO流分類
流向:輸入流和輸出流
數據:字節流:二進制,可以包含一切文件,包括純文本、doc、音頻、視頻等等
字符流:文本文件,只能處理純文本
功能:節點:包括源頭
處理:增強功能,提供性能
字符流與字節流 與 文件
字節流
//輸入流
InputStream
read(byte[] b)
read(byte[] b,int off,int len) + close()
FileInputStream()
// 輸出流
OutputStream
write(byte[] b)
write(byte[] b,int off,int len) + flush() + close()
FileOutputStream
字符流
//輸入流
Reader
read(char[] cbuf)
read(char[] cbuf,int off,int len) + close()
FileReader()
//輸出流
Writer
write(charp[] cbuf)
write(char[] cbuf,int off,int len) + flush() + close()
write(String str,int off,int len) + flush() + close()
FileWriter()
兩個常量
1、路徑分隔符
2、文件分隔符
package com.iotest.file;
import java.io.File;
/**
* 兩個常亮
* 1、路徑分隔符
* 2、文件分隔符
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println(File.pathSeparator);
System.out.println(File.separator);
// 路徑表現形式
String path = "D:\\REMEM\\lv1111.png";
path = "D:"+File.separator+"REMEN"+File.separator+"lv1111.png";
// 推薦方式
path = "D:/REMEN/lv1111.png";
}
}
相對路徑與絕對路徑構造File對象
package com.iotest.file;
import java.io.File;
/**
* 相對路徑與絕對路徑構造File對象
*/
public class Demo02 {
/**
*
*/
public static void main(String[] args) {
String parentPath = "D:/REMEN";
String name = "test.png";
// 相對路徑
File src = new File(parentPath, name);
src = new File(new File(parentPath), name);
// out
System.out.println(src.getName());
System.out.println(src.getPath());
// 絕對路徑
src = new File("D:/REMEN/test.png");
// out
System.out.println(src.getName());
System.out.println(src.getPath());
// 沒有盤符 以user.dir構建
src = new File("text.png");
System.out.println(src.getName());
System.out.println(src.getPath());
System.out.println(src.getAbsolutePath());
}
}
常用方法
1、文件名
- getName() 文件名、路徑名
- getPath() 路徑名
- getAbsoluteFile() 以絕對路徑所對應的File對象
- getAbsolutePath() 絕對路徑名
- getParent() 父目錄,相對路徑的父目錄,可能爲null,入,刪除本身後的結果
2、判斷信息
- exists() 是否存在
- canWrite() 文件是否可以寫
- isFile() 是否文件
- isDirectory() 是否文件夾,沒有真實存在的,默認是文件夾
- isAbsolute() 消除平臺差異,以盤符開頭,其他以/開頭
3、長度
- length() 字節數,單位爲字節。不能讀取文件夾的長處
4、創建和刪除文件
- createNewFile() 不存在創建新文件,con系統關鍵字無法創建
- delete() 刪除文件
- static createTempFile(前綴3個字節長,後綴默認.temp) 默認臨時空間
- static createTempFIle(前綴3個人字節長,後綴默認.,temp,目錄)
- deleteOnExit() 退出虛擬機刪除,常用語刪除臨時文件。
package com.iotest.file;
import java.io.File;
import java.io.IOException;
/**
* 常用方法
* 1、文件名
* getName() 文件名、路徑名
* getPath() 路徑名
* getAbsoluteFile() 以絕對路徑所對應的File對象
* getAbsolutePath() 絕對路徑名
* getParent() 父目錄,相對路徑的父目錄,可能爲null,入,刪除本身後的結果
* 2、判斷信息
* exists() 是否存在
* canWrite() 文件是否可以寫
* isFile() 是否文件
* isDirectory() 是否文件夾,沒有真實存在的,默認是文件夾
* isAbsolute() 消除平臺差異,以盤符開頭,其他以/開頭
* 3、長度
* length() 字節數,單位爲字節。不能讀取文件夾的長處
* 4、創建和刪除文件
* createNewFile() 不存在創建新文件,con系統關鍵字無法創建
* delete() 刪除文件
* static createTempFile(前綴3個字節長,後綴默認.temp) 默認臨時空間
* static createTempFIle(前綴3個人字節長,後綴默認.,temp,目錄)
* deleteOnExit() 退出虛擬機刪除,常用語刪除臨時文件。
*/
public class Demo03 {
public static void main(String[] args) {
test3();
//test1();
}
public static void test1() {
// 建立聯繫
File src = new File("2t.txt");
//File src = new File("D:/REMEN/test.png");
System.out.println(src.getName()); // 返回名稱
System.out.println(src.getPath()); // 如果是絕對路徑,返回完成路徑,否則相對路徑
System.out.println(src.getAbsolutePath()); // 返回絕對路徑
System.out.println(src.getParent()); // 返回上一級目錄,可能爲null
}
public static void test2() {
String path = "D:/Code/Java/IO/src/main/resources/test.png";
File src = new File(path);
System.out.println("是否存在" + src.exists());
System.out.println("是否可寫" + src.canWrite());
if (src.isFile()) {
System.out.println("文件");
} else {
System.out.println("文件夾");
}
System.out.println("是否是絕對路徑" + src.isAbsolute());
System.out.println("長度" + src.length());
}
public static void test3() {
String path = "D:/Code/Java/IO/src/main/resources/200.png";
File src = new File(path);
if (!src.exists()) {
boolean flag = false;
try {
flag = src.createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.out.println("create file fail");
}
System.out.println(flag ? "success" : "fail");
}
boolean flag = src.delete();
System.out.println(flag ? "delete success" : "d false");
try {
File temp = File.createTempFile("tes", ".temp", new File("D:/Code/Java/IO/src/main/resources"));
try {
// 2s後刪除
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 退出即刪除
temp.deleteOnExit();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、操作目錄
- mkdir() 創建目錄 必須確保父目錄存在 如果不存在則創建失敗
- mkdirs() 創建目錄 如果父目錄不存在 一同創建
- list() 子目錄-文件名 字符串形式
- listFiles() 子目錄-文件file對象 file形式;後可以加filter過濾器
- static listRoots() 根路徑
package com.iotest.file;
import java.io.File;
import java.io.FileFilter;
/**
* 5、操作目錄
* mkdir() 創建目錄 必須確保父目錄存在 如果不存在則創建失敗
* mkdirs() 創建目錄 如果父目錄不存在 一同創建
* list() 子目錄-文件名 字符串形式
* listFiles() 子目錄-文件file對象 file形式;後可以加filter過濾器
* static listRoots() 根路徑
*
*/
public class Demo04 {
public static void main(String[] args) {
test1();
test2();
}
public static void test1() {
String path = "D:/Code/Java/IO/src/main/resources/testfile/test";
File src = new File(path);
//src.mkdir();
src.mkdirs();
}
public static void test2(){
String path = "D:/Code/Java/IO/src/main/resources";
File src = new File(path);
System.out.println("=========子目錄-文件名=========");
if (src.isDirectory()){
String[] subNames = src.list();
for (String temp:subNames){
System.out.println(temp);
}
}
System.out.println("=========子目錄-文件File對象=========");
if (src.isDirectory()){
File[] subFiles = src.listFiles();
for (File temp:subFiles){
System.out.println(temp.getAbsolutePath());
}
}
System.out.println("=========子目錄-.java對象=========");
if (src.isDirectory()){
File[] subFiles = src.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(".java");
}
});
for (File temp:subFiles){
System.out.println(temp.getAbsolutePath());
}
}
}
}
輸出子孫級目錄-文件的名稱
package com.iotest.file;
import java.io.File;
import java.util.Arrays;
/**
* 輸出子孫級目錄-文件的名稱
* 1、listFiles()
* 2、遞歸
*/
public class Demo05 {
public static void main(String[] args) {
String path = "D:/Code/Java/IO/src/main/resources";
File parent = new File(path);
//printName(parent);
File[] roots = File.listRoots();
System.out.println(Arrays.toString(roots));
}
public static void printName(File src) {
if (null == src || !src.exists()){
return;
}
System.out.println(src.getAbsolutePath());
if (src.isDirectory()) {
for (File sub:src.listFiles()){
printName(sub);
}
}
}
}