IO流01 1.文件基礎知識 什麼是文件? 文件,我們並不陌生。文件是保存數據的地方。比如大家經常使用的word文檔,txt文件,excel文件等,都是文件。它既可以保存一張圖片,也可以保存聲音、視頻…… 文件流 文件在程式中是以流的形式來操作的: 流:數據在數據源(文件)和程式(記憶體)之間經歷的路 ...
IO流01
1.文件基礎知識
什麼是文件?
文件,我們並不陌生。文件是保存數據的地方。比如大家經常使用的word文檔,txt文件,excel文件等,都是文件。它既可以保存一張圖片,也可以保存聲音、視頻……
-
文件流
文件在程式中是以流的形式來操作的:
流:數據在數據源(文件)和程式(記憶體)之間經歷的路徑
輸入流:數據從數據源(文件)到程式(記憶體)之間的路徑
輸出流:數據從程式(記憶體)到數據源(文件)之間的路徑
2.常用的文件操作
2.1創建文件
-
創建文件對象相關構造器和方法
相關方法:
new File(String pathname)//根據路徑構建一個File對象 new File(File patent,String child)//根據父目錄文件+子路徑構建 new File(String parent,String child)//根據父目錄+子路徑構建
例子:應用案例演示:FileCreate
package li.io.file;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
//演示創建文件
public class FileCreate {
public static void main(String[] args) {
}
//方式一 new File(String pathname)//根據路徑構建一個File對象
@Test
public void creat01() {
String filePath = "d:\\news1.txt";
File file = new File(filePath);//在記憶體中創建一個File對象
try {
file.createNewFile();//創建文件
System.out.println("文件創建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
//方式二 new File(File patent,String child)//根據父目錄文件+子路徑構建
//例如:d:\\news.txt,父目錄文件就是 d:\\
@Test
public void creat02() {
File parenFile = new File("d:\\");
String fileName = "news2.txt";
//這裡的file對象,在java程式中只是一個java對象而已
//只有執行了createNewFile方法,才會真正地在磁碟創建文件
File file = new File(parenFile, fileName);
try {
file.createNewFile();//創建文件
System.out.println("創建成功~");
} catch (IOException e) {
e.printStackTrace();
}
}
//方式三 new File(String parent,String child)//根據父目錄+子路徑構建
@Test
public void creat03() {
String parentPath = "d:\\"; //這裡的兩個 \\,其中有一個是轉義符號,或者直接用 d:/
String filePath = "news3.txt";
File file = new File(parentPath, filePath);
try {
file.createNewFile();
System.out.println("創建文件成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.2獲取文件的相關信息
- getName()
- getAbsolutePath()
- getParent()
- length()
- exists()
- isFile()
- isDirectory()
例子:
package li.io.file;
import org.junit.jupiter.api.Test;
import java.io.File;
public class FileInformation {
public static void main(String[] args) {
}
//獲取文件的信息
@Test
public void info() {
//先創建文件對象
File file = new File("d:\\news1.txt");
//調用相應方法,得到對應信息
//文件名字-getName()
System.out.println("文件名字="+file.getName());//文件名字=news1.txt
//文件的絕對路徑-getAbsolutePath()
System.out.println("文件的絕對路徑="+file.getAbsolutePath());//文件的絕對路徑=d:\news1.txt
//文件的父級目錄-getParentFile()
System.out.println("文件的父級目錄="+file.getParentFile());//文件的父級目錄=d:\
//文件的大小(位元組)-length()
System.out.println("文件的大小(位元組)="+file.length());//文件的大小(位元組)=12 Hello World!
//文件是否存在-exists()
System.out.println("文件是否存在="+file.exists());//文件是否存在=true
//是否為文件-isFile()
System.out.println("是否為文件="+file.isFile());//是否為文件=true
//是否為目錄-isDirectory()
System.out.println("是否為目錄="+file.isDirectory());//是否為目錄=false
}
}
2.3目錄的操作和文件刪除
-
mkdir():創建一級目錄
-
mkdirs():創建多級目錄
-
delete():刪除空目錄或者文件
例子:
package li.io.file;
import org.junit.jupiter.api.Test;
import java.io.File;
public class Directory_ {
public static void main(String[] args) {
}
//判斷 d:\\news1.txt是否存在,如果存在就刪除
@Test
public void m1() {
String filePath = "d:\\news1.txt";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.println(filePath + "刪除成功");
} else {
System.out.println("刪除失敗...");
}
} else {
System.out.println("該文件不存在...");
}
}
//判斷 d:\\demo02 是否存在,存在就刪除,否則就提示不存在
//這裡我們需要體會到,在java中,目錄也被當做文件
@Test
public void m2() {
String filePath = "d:\\demo02";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.println(filePath + "刪除成功");//d:\demo02刪除成功(先在d盤下創建一個名為 demo02的目錄)
} else {
System.out.println("刪除失敗...");
}
} else {
System.out.println("該目錄不存在...");
}
}
//判斷d:\\demo\\a\\b\\c目錄是否存在,如果存在就提示已經存在,否則創建
@Test
public void m3() {
String directoryPath = "d:\\demo\\a\\b\\c";
File file = new File(directoryPath);
if (file.exists()) {
System.out.println("該目錄已經存在");
} else {
if (file.mkdirs()) {//多級目錄使用 mkdirs方法,一級目錄使用 mkdir
System.out.println(directoryPath + "創建成功...");
} else {
System.out.println("創建失敗...");
}
}
}
}
3.IO流原理及流的分類
3.1Java IO流原理
- I/O是Input/Output的縮寫,I/O技術是非常實用的技術,用於處理數據傳輸。如讀/寫文件,網路通訊等
- Java程式中,對於數據的輸入/輸出操作以”流(Stream)“的方式進行
- java.io包下提供了各種“流”類和介面,用以獲取不同種類的數據,並通過方法輸入或輸出數據
- 輸入input:讀取外部數據(磁碟、光碟等存儲設備的數據)到程式(記憶體)中
- 輸出output:將程式(記憶體)數據輸出到磁碟、光碟等存儲設備中
3.2流的分類
-
按操作數據單位不同分為:位元組流(8bit)、字元流(按字元)
位元組流適用於二進位文件,字元流適用於文本文件
-
按數據流的流向不同分為:輸入流、輸出流
-
按流的角色不同分為:節點流、處理流(也叫包裝流)
抽象基類 | 位元組流 | 字元流 |
---|---|---|
輸入流 | InputStream | Reader |
輸出流 | OutputStream | Writer |
1)Java的IO流共涉及到40 多個類,實際上非常規則,都是從如上4個抽象基類派生的
InputStream、OutputStream、Reader、Writer都是抽象類,在使用的時候要去創建它們的實現子類
2)由這四個類派生出來的子類名稱都是以其父類名作為子類名尾碼
4.常用的類
InputStream抽象類是所有類位元組輸入流的超類
InputStream常用的子類:
-
FileInputStream:文件輸入流
-
BufferedInputStream:緩衝位元組輸入流
-
ObjectInputStream:對象位元組輸入流