生活随笔
收集整理的這篇文章主要介紹了
Java基础day17
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java基礎day17 Java基礎day17-File&遞歸&字節流 1.File類 1.1File類概述和構造方法 1.2File類創建功能 1.3File類判斷和獲取功能 1.4File類刪除功能 2.遞歸 3.IO流 3.1 IO流概述和分類 3.2字節流寫數據 3.3字節流寫數據的三種方式 3.4字節流寫數據的兩個小問題 3.5字節流寫數據加異常處理 3.6字節流讀數據(一次讀一個字節數據) 3.7字節流復制文本文件 3.8字節流讀數據(一次讀一個字節數組數據) 3.9字節流復制圖片
Java基礎day17-File&遞歸&字節流
1.File類
1.1File類概述和構造方法
File類介紹 它是文件和目錄路徑名的抽象表示 文件和目錄是可以通過File封裝成對象的 對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已。它可以是存在的,也可以 是不存在的。將來是要通過具體的操作把這個路徑的內容轉換為具體存在的 File類的構造方法
方法名說明 File(String pathname) 通過將給定的路徑名字符串轉換為抽象路徑名來創建新的 File實例 File(String parent, String child) 從父路徑名字符串和子路徑名字符串創建新的 File實例 File(File parent, String child) 從父抽象路徑名和子路徑名字符串創建新的 File實例
import java
. io
. File
; public class test1 { public static void main ( String
[ ] args
) { File f1
= new File ( "E:\\itcast\\java.txt" ) ; System
. out
. println ( f1
) ; File f2
= new File ( "E:\\itcast" , "java.txt" ) ; System
. out
. println ( f2
) ; File f3
= new File ( "E:\\itcast" ) ; File f4
= new File ( f3
, "java.txt" ) ; System
. out
. println ( f4
) ; }
1.2File類創建功能
方法名說明 public boolean createNewFile() 當具有該名稱的文件不存在時,創建一個由該抽象路徑名命名的新空文件 public boolean mkdir() 創建由此抽象路徑名命名的目錄 public boolean mkdirs() 創建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄
import java
. io
. File
;
import java
. io
. IOException
; public class test2 { public static void main ( String
[ ] args
) throws IOException
{ File f1
= new File ( "E:\\itcast\\java.txt" ) ; System
. out
. println ( f1
. createNewFile ( ) ) ; System
. out
. println ( "------" ) ; File f2
= new File ( "E:\\itcast\\javase" ) ; System
. out
. println ( f2
. mkdir ( ) ) ; System
. out
. println ( "------" ) ; File f3
= new File ( "E:\\itcast\\JavaWEB\\HTML" ) ; System
. out
. println ( f3
. mkdirs ( ) ) ; System
. out
. println ( "-------" ) ; File f4
= new File ( "E:\\itcast\\javase.txt" ) ; System
. out
. println ( f4
. createNewFile ( ) ) ; }
}
1.3File類判斷和獲取功能
方法名說明 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對象數組
import java
. io
. File
; public class test3 { public static void main ( String
[ ] args
) { File f
= new File ( "myFile\\java.txt" ) ; System
. out
. println ( f
. isDirectory ( ) ) ; System
. out
. println ( f
. isFile ( ) ) ; System
. out
. println ( f
. exists ( ) ) ; System
. out
. println ( f
. getAbsoluteFile ( ) ) ; System
. out
. println ( f
. getPath ( ) ) ; System
. out
. println ( f
. getName ( ) ) ; System
. out
. println ( "-------" ) ; File f2
= new File ( "E:\\itcast" ) ; String
[ ] list
= f2
. list ( ) ; for ( String s
: list
) { System
. out
. println ( s
) ; } System
. out
. println ( "------" ) ; File
[ ] files
= f2
. listFiles ( ) ; for ( File file
: files
) {
if ( file
. isFile ( ) ) { System
. out
. println ( file
. getName ( ) ) ; } } }
}
1.4File類刪除功能
方法名說明 public boolean delete() 刪除由此抽象路徑名表示的文件或目錄
import java
. io
. File
;
import java
. io
. IOException
; public class test4 { public static void main ( String
[ ] args
) throws IOException
{ File f1
= new File ( "src\\java.txt" ) ; System
. out
. println ( f1
. createNewFile ( ) ) ; System
. out
. println ( f1
. delete ( ) ) ; System
. out
. println ( "----" ) ; File f2
= new File ( "src\\itcast" ) ; System
. out
. println ( f2
. mkdir ( ) ) ; System
. out
. println ( f2
. delete ( ) ) ; System
. out
. println ( "--------" ) ; File f3
= new File ( "src\\itcast" ) ; f3
. mkdir ( ) ; File f4
= new File ( "src\\itcast\\java.txt" ) ; System
. out
. println ( f4
. createNewFile ( ) ) ; System
. out
. println ( f4
. delete ( ) ) ; System
. out
. println ( f3
. delete ( ) ) ;
}
}
絕對路徑和相對路徑的區別 絕對路徑:完整的路徑名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\itcast\java.txt 相對路徑:必須使用取自其他路徑名的信息進行解釋。例如:myFile\java.txt
2.遞歸
2.1遞歸
遞歸的介紹 以編程的角度來看,遞歸指的是方法定義中調用方法本身的現象 把一個復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解 遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算 遞歸的基本使用
public class test5 { public static void main ( String
[ ] args
) { int [ ] arr
= new int [ 20 ] ; arr
[ 0 ] = 1 ; arr
[ 1 ] = 1 ; for ( int i
= 2 ; i
< arr
. length
; i
++ ) { arr
[ i
] = arr
[ i
- 1 ] + arr
[ i
- 2 ] ; } System
. out
. println ( arr
[ 19 ] ) ; System
. out
. println ( f ( 20 ) ) ; } public static int f ( int n
) { if ( n
== 1 || n
== 2 ) { return 1 ; } else { return f ( n
- 1 ) + f ( n
- 2 ) ; } }
}
遞歸的注意事項 遞歸一定要有出口。否則內存溢出 遞歸雖然有出口,但是遞歸的次數也不宜過多。否則內存溢出
2.2遞歸求階乘
案例需求 用遞歸求5的階乘,并把結果在控制臺輸出 代碼實現
public class test6 { public static void main ( String
[ ] args
) { int s
= f ( 5 ) ; System
. out
. println ( s
) ; } public static int f ( int i
) { if ( i
== 1 ) { return 1 ; } else { return i
* f ( i
- 1 ) ; } }
}
2.3遞歸遍歷目錄
案例需求 給定一個路徑(E:\itcast),通過遞歸完成遍歷該目錄下所有內容,并把所有文件的絕對路徑輸出在控制臺 代碼實現
import java
. io
. File
; public class test7 { public static void main ( String
[ ] args
) { File f1
= new File ( "E:\\itcast" ) ; getAllFilePath ( f1
) ; } private static void getAllFilePath ( File f1
) { File
[ ] files
= f1
. listFiles ( ) ; if ( files
!= null
) { for ( File file
: files
) { if ( file
. isDirectory ( ) ) { getAllFilePath ( file
) ; } else { System
. out
. println ( file
. getAbsolutePath ( ) ) ; } } } }
}
3.IO流
3.1 IO流概述和分類
- IO流介紹IO:輸入/輸出(Input/Output)流:是一種抽象概念,是對數據傳輸的總稱。也就是說數據在設備間的傳輸稱為流,流的本質是數據傳輸IO流就是用來處理設備間數據傳輸問題的。常見的應用:文件復制;文件上傳;文件下載
- IO流的分類按照數據的流向輸入流:讀數據輸出流:寫數據按照數據類型來分字節流字節輸入流字節輸出流字符流字符輸入流字符輸出流
- IO流的使用場景如果操作的是純文本文件,優先使用字符流如果操作的是圖片、視頻、音頻等二進制文件。優先使用字節流如果不確定文件類型,優先使用字節流。字節流是萬能的流
3.2字節流寫數據
字節流抽象基類 InputStream:這個抽象類是表示字節輸入流的所有類的超類 OutputStream:這個抽象類是表示字節輸出流的所有類的超類 子類名特點:子類名稱都是以其父類名作為子類名的后綴 字節輸出流 FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件 使用字節輸出流寫數據的步驟 創建字節輸出流對象(調用系統功能創建了文件,創建字節輸出流對象,讓字節輸出流對象指向文件) 調用字節輸出流對象的寫數據方法 釋放資源(關閉此文件輸出流并釋放與此流相關聯的任何系統資源) 示例代碼
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test8 { public static void main ( String
[ ] args
) throws IOException
{ FileOutputStream fos
= new FileOutputStream ( "src\\fos.txt" ) ; fos
. write ( 97 ) ; fos
. write ( 55 ) ; fos
. close ( ) ; }
}
3.3字節流寫數據的三種方式
方法名說明 void write(int b) 將指定的字節寫入此文件輸出流 一次寫一個字節數據 void write(byte[] b) 將 b.length字節從指定的字節數組寫入此文件輸出流 一次寫一個字節數組數據 void write(byte[] b, int off, int len) 將 len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流一次寫一個字節數組的部分數據
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test9 { public static void main ( String
[ ] args
) throws IOException
{ FileOutputStream fos
= new FileOutputStream ( "src\\fos.txt" ) ; fos
. write ( 97 ) ; fos
. write ( 98 ) ; fos
. write ( 99 ) ; fos
. write ( 100 ) ; fos
. write ( 101 ) ;
byte [ ] bys
= "abcdef" . getBytes ( ) ;
fos
. write ( bys
, 0 , 3 ) ; fos
. close ( ) ; }
}
3.4字節流寫數據的兩個小問題
字節流寫數據如何實現換行 windows:\r\n linux:\n mac:\r 字節流寫數據如何實現追加寫入 public FileOutputStream(String name,boolean append) 創建文件輸出流以指定的名稱寫入文件。如果第二個參數為true ,則字節將寫入文件的末尾而不是開頭 示例代碼
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test10 { public static void main ( String
[ ] args
) throws IOException
{ FileOutputStream fos
= new FileOutputStream ( "src\\fos.txt" , true ) ; for ( int i
= 0 ; i
< 10 ; i
++ ) { fos
. write ( "hello" . getBytes ( ) ) ; fos
. write ( "\r\n" . getBytes ( ) ) ; } fos
. close ( ) ; }
}
3.5字節流寫數據加異常處理
try { 可能出現異常的代碼
;
} catch ( 異常類名 變量名
) { 異常的處理代碼
;
} finally { 執行所有清除操作
;
}
finally特點被finally控制的語句一定會執行,除非JVM退出
import java
. io
. FileNotFoundException
;
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test11 { public static void main ( String
[ ] args
) { FileOutputStream fos
= null
; try { fos
= new FileOutputStream ( "src\\fos.txt" ) ; fos
. write ( "hello" . getBytes ( ) ) ; } catch ( FileNotFoundException e
) { e
. printStackTrace ( ) ; } catch ( IOException e
) { e
. printStackTrace ( ) ; } finally { if ( fos
!= null
) { try { fos
. close ( ) ; } catch ( IOException e
) { e
. printStackTrace ( ) ; } } } }
}
3.6字節流讀數據(一次讀一個字節數據)
字節輸入流 FileInputStream(String name):通過打開與實際文件的連接來創建一個FileInputStream ,該文件由文 件系統中的路徑名name命名 字節輸入流讀取數據的步驟 創建字節輸入流對象 調用字節輸入流對象的讀數據方法 釋放資源 示例代碼
import java
. io
. FileInputStream
;
import java
. io
. FileNotFoundException
;
import java
. io
. IOException
; public class test12 { public static void main ( String
[ ] args
) throws IOException
{ FileInputStream fis
= new FileInputStream ( "src\\fos.txt" ) ; int by
; while ( ( by
= fis
. read ( ) ) != - 1 ) { System
. out
. println ( ( char ) by
) ; } fis
. close ( ) ; }
}
3.7字節流復制文本文件
案例需求 把“E:\itcast\窗里窗外.txt”復制到模塊目錄下的“窗里窗外.txt” 實現步驟 復制文本文件,其實就把文本文件的內容從一個文件中讀取出來(數據源),然后寫入到另一個文件中(目的地) 數據源: E:\itcast\窗里窗外.txt — 讀數據 — InputStream — FileInputStream 目的地: myByteStream\窗里窗外.txt — 寫數據 — OutputStream — FileOutputStream 代碼實現
import java
. io
. FileInputStream
;
import java
. io
. FileNotFoundException
;
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test13 { public static void main ( String
[ ] args
) throws IOException
{ FileInputStream fis
= new FileInputStream ( "E:\\itcast\\窗里窗外.txt" ) ; FileOutputStream fos
= new FileOutputStream ( "src\\窗里窗外.txt" ) ; int by
; while ( ( by
= fis
. read ( ) ) != - 1 ) { fos
. write ( by
) ; } fos
. close ( ) ; fis
. close ( ) ; }
}
3.8字節流讀數據(一次讀一個字節數組數據)
一次讀一個字節數組的方法 public int read(byte[] b):從輸入流讀取最多b.length個字節的數據 返回的是讀入緩沖區的總字節數,也就是實際的讀取字節個數 示例代碼
import java
. io
. FileInputStream
;
import java
. io
. IOException
; public class test14 { public static void main ( String
[ ] args
) throws IOException
{ FileInputStream fis
= new FileInputStream ( "src\\fos.txt" ) ; byte [ ] bys
= new byte [ 1024 ] ; int len
; while ( ( len
= fis
. read ( bys
) ) != - 1 ) { System
. out
. print ( new String ( bys
, 0 , len
) ) ; } fis
. close ( ) ; }
}
3.9字節流復制圖片
import java
. io
. FileInputStream
;
import java
. io
. FileOutputStream
;
import java
. io
. IOException
; public class test15 { public static void main ( String
[ ] args
) throws IOException
{ FileInputStream fis
= new FileInputStream ( "E:\\itcast\\mn.jpg" ) ; FileOutputStream fos
= new FileOutputStream ( "src\\mn.jpg" ) ; byte [ ] bys
= new byte [ 1024 ] ; int len
; while ( ( len
= fis
. read ( bys
) ) != - 1 ) { fos
. write ( bys
, 0 , len
) ; } fos
. close ( ) ; fis
. close ( ) ; }
}
總結
以上是生活随笔 為你收集整理的Java基础day17 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。