IO流
- 前言
- File類
- File類概述和構造方法
- File類的介紹
- File類的構造方法
- File類創建功能
- File類判斷和獲取功能
- File類洗掉功能
- IO流
- - IO流介紹
- 位元組流
- 位元組流抽象基類
- 位元組輸出流
- 位元組輸出流寫資料的三種方式
- 寫資料的兩個小問題
- 位元組輸入流
- 位元組緩沖流
前言
IO流
什么是IO?
Java中I/O操作主要是指使用Java進行輸入,輸出操作. Java所有的I/O機制都是基于資料流進行輸入輸出,這些資料流表示了字符或者位元組資料的流動序列,Java的I/O流提供了讀寫資料的標準方法,任何Java中表示資料源的物件都會提供以資料流的方式讀寫它的資料的方法,
什么是流?
在 Java 中所有資料都是使用流讀寫的,流是一組有序的資料序列,將資料從一個地方帶到另一個地方,根據資料流向的不同,可以分為輸入(Input)流和輸出(Output)流兩種
File類
File類概述和構造方法
File類的介紹
- 它是檔案和目錄路徑名的抽象表示
- 檔案和目錄是可以通過File封裝成物件的
- 對于File而言,其封裝的并不是一個真正存在的檔案,僅僅是一個路徑名而已,它可以是存在的,也可以是不存在的,將來是要通過具體的操作把這個路徑的內容轉換為具體存在的
File類的構造方法
| 方法名 | 說明 |
|---|---|
| File(String pathname) | 通過將給定的路徑名字串轉換為抽象路徑名來創建新的 File實體 |
| File(String parent, String child) | 從父路徑名字串和子路徑名字串創建新的 File實體 |
| File(File parent, String child) | 從父抽象路徑名和子路徑名字串創建新的 File實體 |
//File(String pathname):通過將給定的路徑名字串轉換為抽象路徑名來創建新的 File實體,
File f1 = new File("E:\\itcast\\java.txt");
//File(String parent, String child):從父路徑名字串和子路徑名字串創建新的 File實體,
File f2 = new File("E:\\itcast","java.txt");
//File(File parent, String child):從父抽象路徑名和子路徑名字串創建新的 File實體,
File f3 = new File("E:\\itcast");
File f4 = new File(f3,"java.txt");
File類創建功能
| 方法名 | 說明 |
|---|---|
| public boolean createNewFile() | 當具有該名稱的檔案不存在時,創建一個由該抽象路徑名命名的新空檔案 |
| public boolean mkdir() | 創建由此抽象路徑名命名的目錄 |
| public boolean mkdirs() | 創建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄 |
//在E:\\itcast目錄下創建一個檔案java.txt
File f1 = new File("E:\\itcast\\java.txt");
f1.createNewFile();
//在E:\\itcast目錄下創建一個目錄JavaSE
File f2 = new File("E:\\itcast\\JavaSE");
f2.mkdir();
//在E:\\itcast目錄下創建一個多級目錄JavaWEB\\HTML
File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
f3.mkdirs();
File類判斷和獲取功能
-
判斷功能
方法名 說明 public boolean isDirectory() 測驗此抽象路徑名表示的File是否為目錄 public boolean isFile() 測驗此抽象路徑名表示的File是否為檔案 public boolean exists() 測驗此抽象路徑名表示的File是否存在 -
獲取功能
方法名 說明 public String getAbsolutePath() 回傳此抽象路徑名的絕對路徑名字串 public String getPath() 將此抽象路徑名轉換為路徑名字串 public String getName() 回傳由此抽象路徑名表示的檔案或目錄的名稱 public String[] list() 回傳此抽象路徑名表示的目錄中的檔案和目錄的名稱字串陣列 public File[] listFiles() 回傳此抽象路徑名表示的目錄中的檔案和目錄的File物件陣列
File f = new File("myFile\\java.txt");
// public boolean isDirectory():測驗此抽象路徑名表示的File是否為目錄
// public boolean isFile():測驗此抽象路徑名表示的File是否為檔案
// public boolean exists():測驗此抽象路徑名表示的File是否存在
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.exists());
// public String getAbsolutePath():回傳此抽象路徑名的絕對路徑名字串
// public String getPath():將此抽象路徑名轉換為路徑名字串
// public String getName():回傳由此抽象路徑名表示的檔案或目錄的名稱
System.out.println(f.getAbsolutePath());
System.out.println(f.getPath());
System.out.println(f.getName());
File類洗掉功能
| 方法名 | 說明 |
|---|---|
| public boolean delete() | 洗掉由此抽象路徑名表示的檔案或目錄 |
IO流
- IO流介紹
- IO流就是用來處理設備間資料傳輸問題的,常見的應用:檔案復制;檔案上傳;檔案下載
- IO流的分類
- 按照資料的流向
- 輸入流:讀資料
- 輸出流:寫資料
- 按照資料型別來分
- 位元組流
- 位元組輸入流
- 位元組輸出流
- 字符流
- 字符輸入流
- 字符輸出流
- 位元組流
- 按照資料的流向
- IO流的使用場景
- 如果操作的是純文本檔案,優先使用字符流
- 如果操作的是圖片、視頻、音頻等二進制檔案,優先使用位元組流
- 如果不確定檔案型別,優先使用位元組流,位元組流是萬能的流
位元組流
位元組流抽象基類
- InputStream:這個抽象類是表示位元組輸入流的所有類的超類
- OutputStream:這個抽象類是表示位元組輸出流的所有類的超類
- 子類名特點:子類名稱都是以其父類名作為子類名的后綴
位元組輸出流
FileOutputStream(String name) 寫資料
位元組輸出流寫資料的三種方式
| 方法名 | 說明 |
|---|---|
| void write(int b) | 將指定的位元組寫入此檔案輸出流 一次寫一個位元組資料 |
| void write(byte[] b) | 將 b.length位元組從指定的位元組陣列寫入此檔案輸出流 一次寫一個位元組陣列資料 |
| void write(byte[] b, int off, int len) | 將 len位元組從指定的位元組陣列開始,從偏移量off開始寫入此檔案輸出流 一次寫一個位元組陣列的部分資料 |
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
//void write(int b):將指定的位元組寫入此檔案輸出流
fos.write(97);
fos.write(98);
fos.write(99);
fos.write(100);
fos.write(101);
// void write(byte[] b):將 b.length位元組從指定的位元組陣列寫入此檔案輸出流
byte[] bys = {97, 98, 99, 100, 101};
//byte[] getBytes():回傳字串對應的位元組陣列
byte[] bys = "abcde".getBytes();
fos.write(bys);
//void write(byte[] b, int off, int len):將 len位元組從指定的位元組陣列開始,從偏移量off開始寫入此檔案輸出流
fos.write(bys,1,3);
寫資料的兩個小問題
-
位元組流寫資料如何實作換行
- windows:\r\n
- linux:\n
- mac:\r
-
位元組流寫資料如何實作追加寫入
- public FileOutputStream(String name,boolean append)
- 創建檔案輸出流以指定的名稱寫入檔案,如果第二個引數為true ,則位元組將寫入檔案的末尾而不是開頭
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);
//寫資料
for (int i = 0; i < 10; i++) {
fos.write("hello".getBytes());
fos.write("\r\n".getBytes());
}
位元組輸入流
FileInputStream(String name) 讀資料
read()方法;
位元組緩沖流
-
BufferOutputStream:該類實作緩沖輸出流, 通過設定這樣的輸出流,應用程式可以向底層輸出流寫入位元組,而不必為寫入的每個位元組導致底層系統的呼叫
-
BufferedInputStream:創建BufferedInputStream將創建一個內部緩沖區陣列, 當從流中讀取或跳過位元組時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多位元組
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\bos.txt"));
//寫資料
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
//釋放資源
bos.close();
//位元組緩沖輸入流:BufferedInputStream(InputStream in)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myByteStream\\bos.txt"));
//一次讀取一個位元組資料
// int by;
// while ((by=bis.read())!=-1) {
// System.out.print((char)by);
// }
//一次讀取一個位元組陣列資料
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355321.html
標籤:java
