欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中文件的讀寫方法之IO流詳解

 更新時間:2022年04月13日 13:55:35   作者:一計之長  
這篇文章主要介紹了Java中文件的讀寫方法之IO流詳解,本文中的代碼所涉及到的路徑或者文件都是本人的,大家得換成自己的,并且大家可以在網(wǎng)上自行找一些材料作為讀入或者寫入的材料,不過路徑最好是英文的,不要包含中文,防止JVM讀取失敗

1.File類

1.1File類概述和構(gòu)造方法

  • File類介紹
    • 它是文件和目錄路徑名的抽象表示
    • 文件和目錄是可以通過File封裝成對象的
    • 對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已。它可以是存在的,也可以是不存在的。將來是要通過具體的操作把這個路徑的內(nèi)容轉(zhuǎn)換為具體存在的
  • File類的構(gòu)造方法

Java之文件IO流詳解首卷_java

  • 示例代碼
public class FileDemo01 {
public static void main(String[] args) {
//File(String pathname):通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例。
File f1 = new File("E:\\yijizhichang\\java.txt");
System.out.println(f1);

//File(String parent, String child):從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例。
File f2 = new File("E:\\yijizhichang","java.txt");
System.out.println(f2);

//File(File parent, String child):從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例。
File f3 = new File("E:\\yijizhichang");
File f4 = new File(f3,"java.txt");
System.out.println(f4);
}
}

這是我的目錄,大家在執(zhí)行代碼的時候?qū)⒛夸洆Q成自己電腦上的,不過目錄中最好全是英文,不能包含中文。

1.2File類創(chuàng)建功能

  • 方法分類

Java之文件IO流詳解首卷_java_02

  • 示例代碼
public class FileDemo02 {
public static void main(String[] args) throws IOException {
//需求1:我要在E:\\yijizhichang目錄下創(chuàng)建一個文件java.txt
File f1 = new File("E:\\yijizhichang\\java.txt");
System.out.println(f1.createNewFile());
System.out.println("--------");

//需求2:我要在E:\\yijizhichang目錄下創(chuàng)建一個目錄JavaSE
File f2 = new File("E:\\yijizhichang\\JavaSE");
System.out.println(f2.mkdir());
System.out.println("--------");

//需求3:我要在E:\\yijizhichang目錄下創(chuàng)建一個多級目錄JavaWEB\\HTML
File f3 = new File("E:\\yijizhichang\\JavaWEB\\HTML");
// System.out.println(f3.mkdir());
System.out.println(f3.mkdirs());
System.out.println("--------");

//需求4:我要在E:\\yijizhichang目錄下創(chuàng)建一個文件javase.txt
File f4 = new File("E:\\yijizhichang\\javase.txt");
// System.out.println(f4.mkdir());
System.out.println(f4.createNewFile());
}
}

同理,大家也要把相關(guān)的目錄換成自己的。

1.3File類判斷和獲取功能

  • 判斷功能

Java之文件IO流詳解首卷_File_03

  • 獲取功能

Java之文件IO流詳解首卷_java_04

  • 示例代碼
public class FileDemo04 {
public static void main(String[] args) {
//創(chuàng)建一個File對象
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.getAbsolutePath());
System.out.println(f.getPath());
System.out.println(f.getName());
System.out.println("--------");
File f2 = new File("E:\\yijizhichang");

String[] strArray = f2.list();
for(String str : strArray) {
System.out.println(str);
}
System.out.println("--------");

File[] fileArray = f2.listFiles();
for(File file : fileArray) {
if(file.isFile()) {
System.out.println(file.getName());
}
}
}
}

1.4File類刪除功能

  • 方法分類

Java之文件IO流詳解首卷_java_05

  • 示例代碼
public class FileDemo03 {
public static void main(String[] args) throws IOException {
//需求1:在當前模塊目錄下創(chuàng)建java.txt文件
File f1 = new File("myFile\\java.txt");

//需求2:刪除當前模塊目錄下的java.txt文件
System.out.println(f1.delete());
System.out.println("--------");

//需求3:在當前模塊目錄下創(chuàng)建yijizhichang目錄
File f2 = new File("myFile\\yijizhichang");

//需求4:刪除當前模塊目錄下的yijizhichang目錄
System.out.println(f2.delete());
System.out.println("--------");

//需求5:在當前模塊下創(chuàng)建一個目錄yijizhichang,然后在該目錄下創(chuàng)建一個文件java.txt
File f3 = new File("myFile\\yijizhichang");
File f4 = new File("myFile\\yijizhichang\\java.txt");

//需求6:刪除當前模塊下的目錄yijizhichang
System.out.println(f4.delete());
System.out.println(f3.delete());
}
}
  • 絕對路徑和相對路徑的區(qū)別:
    • 絕對路徑:完整的路徑名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\yijizhichang\java.txt
    • 相對路徑:必須使用取自其他路徑名的信息進行解釋。例如:myFile\\java.txt

2.遞歸

2.1遞歸

  • 遞歸的介紹
    • 以編程的角度來看,遞歸指的是方法定義中調(diào)用方法本身的現(xiàn)象
    • 把一個復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解
    • 遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算
  • 遞歸的基本使用
public class DiGuiDemo {
public static void main(String[] args) {
//回顧不死神兔問題,求第20個月兔子的對數(shù)
//每個月的兔子對數(shù):1,1,2,3,5,8,...
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);
}
}
}
  • 遞歸的注意事項:
    • 遞歸一定要有出口。否則內(nèi)存溢出
    • 遞歸雖然有出口,但是遞歸的次數(shù)也不宜過多。否則內(nèi)存溢出

2.2遞歸求階乘

  • 案例需求

? 用遞歸求5的階乘,并把結(jié)果在控制臺輸出

  • 代碼實現(xiàn)
public class DiGuiDemo01 {
public static void main(String[] args) {
//調(diào)用方法
int result = jc(5);
//輸出結(jié)果
System.out.println("5的階乘是:" + result);
}

//定義一個方法,用于遞歸求階乘,參數(shù)為一個int類型的變量
public static int jc(int n) {
//在方法內(nèi)部判斷該變量的值是否是1
if(n == 1) {
//是:返回1
return 1;
} else {
//不是:返回n*(n-1)!
return n*jc(n-1);
}
}
}

2.3遞歸遍歷目錄

  • 案例需求

? 給定一個路徑(E:\\yijizhichang),通過遞歸完成遍歷該目錄下所有內(nèi)容,并把所有文件的絕對路徑輸出在控制臺

  • 代碼實現(xiàn)
public class DiGuiDemo02 {
public static void main(String[] args) {
//根據(jù)給定的路徑創(chuàng)建一個File對象
File srcFile = new File("E:\\yijizhichang");

//調(diào)用方法
getAllFilePath(srcFile);
}

public static void getAllFilePath(File srcFile) {
//獲取給定的File目錄下所有的文件或者目錄的File數(shù)組
File[] fileArray = srcFile.listFiles();
//遍歷該File數(shù)組,得到每一個File對象
if(fileArray != null) {
for(File file : fileArray) {
//判斷該File對象是否是目錄
if(file.isDirectory()) {
//是:遞歸調(diào)用
getAllFilePath(file);
} else {
//不是:獲取絕對路徑輸出在控制臺
System.out.println(file.getAbsolutePath());
}
}
}
}
}

3.IO流

3.1 IO流概述和分類

  • IO流介紹
  • IO:輸入/輸出(Input/Output)
    • :是一種抽象概念,是對數(shù)據(jù)傳輸?shù)目偡Q。也就是說數(shù)據(jù)在設(shè)備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸
    • IO流就是用來處理設(shè)備間數(shù)據(jù)傳輸問題的。
    • 常見的應(yīng)用:文件復(fù)制;文件上傳;文件下載
  • IO流的分類
  • 按照數(shù)據(jù)的流向
    • 輸入流:讀數(shù)據(jù)
    • 輸出流:寫數(shù)據(jù)
  • 按照數(shù)據(jù)類型來分
  • 字節(jié)流
    • 字節(jié)輸入流
    • 字節(jié)輸出流
  • 字符流
    • 字符輸入流
    • 字符輸出流
  • IO流的使用場景
    • 如果操作的是純文本文件,優(yōu)先使用字符流
    • 如果操作的是圖片、視頻、音頻等二進制文件。優(yōu)先使用字節(jié)流
    • 如果不確定文件類型,優(yōu)先使用字節(jié)流。字節(jié)流是萬能的流

3.2字節(jié)流寫數(shù)據(jù)

  • 字節(jié)流抽象基類
    • InputStream:這個抽象類是表示字節(jié)輸入流的所有類的超類
    • OutputStream:這個抽象類是表示字節(jié)輸出流的所有類的超類
    • 子類名特點:子類名稱都是以其父類名作為子類名的后綴
  • 字節(jié)輸出流
    • FileOutputStream(String name):創(chuàng)建文件輸出流以指定的名稱寫入文件
  • 使用字節(jié)輸出流寫數(shù)據(jù)的步驟
    • 創(chuàng)建字節(jié)輸出流對象(調(diào)用系統(tǒng)功能創(chuàng)建了文件,創(chuàng)建字節(jié)輸出流對象,讓字節(jié)輸出流對象指向文件)
    • 調(diào)用字節(jié)輸出流對象的寫數(shù)據(jù)方法
    • 釋放資源(關(guān)閉此文件輸出流并釋放與此流相關(guān)聯(lián)的任何系統(tǒng)資源)
  • 示例代碼
public class FileOutputStreamDemo01 {
public static void main(String[] args) throws IOException {
//創(chuàng)建字節(jié)輸出流對象
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");


fos.write(97);
//最后都要釋放資源
fos.close();
}
}

3.3字節(jié)流寫數(shù)據(jù)的三種方式

  • 寫數(shù)據(jù)的方法分類

Java之文件IO流詳解首卷_java_06

  • 示例代碼
public class FileOutputStreamDemo02 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
fos.write(bys,1,3);
//釋放資源
fos.close();
}
}

3.4字節(jié)流寫數(shù)據(jù)的兩個小問題

  • 字節(jié)流寫數(shù)據(jù)如何實現(xiàn)換行
    • windows:\r\n
    • linux:\n
    • mac:\r
  • 字節(jié)流寫數(shù)據(jù)如何實現(xiàn)追加寫入
    • public FileOutputStream(String name,boolean append)
    • 創(chuàng)建文件輸出流以指定的名稱寫入文件。如果第二個參數(shù)為true ,則字節(jié)將寫入文件的末尾而不是開頭
  • 示例代碼
public class FileOutputStreamDemo03 {
public static void main(String[] args) throws IOException {
//創(chuàng)建字節(jié)輸出流對象
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);
//寫數(shù)據(jù)
for (int i = 0; i < 10; i++) {
fos.write("hello".getBytes());
fos.write("\r\n".getBytes());
}

//釋放資源
fos.close();
}
}

3.5字節(jié)流寫數(shù)據(jù)加異常處理

  • 異常處理格式
    • ??try-catch-finally??
try{
可能出現(xiàn)異常的代碼;
}catch(異常類名 變量名){
異常的處理代碼;
}finally{
執(zhí)行所有清除操作;
}
  • finally特點
    • 被finally控制的語句一定會執(zhí)行,除非JVM退出
  • 示例代碼
public class FileOutputStreamDemo04 {
public static void main(String[] args) {
//加入finally來實現(xiàn)釋放資源
FileOutputStream fos = null;
try {
fos = new FileOutputStream("myByteStream\\fos.txt");
fos.write("hello".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

3.6字節(jié)流讀數(shù)據(jù)(一次讀一個字節(jié)數(shù)據(jù))

  • 字節(jié)輸入流
    • FileInputStream(String name):通過打開與實際文件的連接來創(chuàng)建一個FileInputStream ,該文件由文件系統(tǒng)中的路徑名name命名
  • 字節(jié)輸入流讀取數(shù)據(jù)的步驟
    • 創(chuàng)建字節(jié)輸入流對象
    • 調(diào)用字節(jié)輸入流對象的讀數(shù)據(jù)方法
    • 釋放資源
  • 示例代碼
public class FileInputStreamDemo01 {
public static void main(String[] args) throws IOException {
//創(chuàng)建字節(jié)輸入流對象
//FileInputStream(String name)
FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");

int by;

while ((by=fis.read())!=-1) {
System.out.print((char)by);
}

//釋放資源
fis.close();
}
}

3.7字節(jié)流復(fù)制文本文件

  • 案例需求

? 把“E:\yijizhichang\\窗里窗外.txt”復(fù)制到模塊目錄下的“窗里窗外.txt”

  • 實現(xiàn)步驟
    • 復(fù)制文本文件,其實就把文本文件的內(nèi)容從一個文件中讀取出來(數(shù)據(jù)源),然后寫入到另一個文件中(目的地)
    • 數(shù)據(jù)源:

? E:\\yijizhichang\\窗里窗外.txt --- 讀數(shù)據(jù) --- InputStream --- FileInputStream

  • 目的地:

? myByteStream\\窗里窗外.txt --- 寫數(shù)據(jù) --- OutputStream --- FileOutputStream

  • 代碼實現(xiàn)
public class CopyTxtDemo {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
FileInputStream fis = new FileInputStream("E:\\yijizhichang\\窗里窗外.txt");
//根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
FileOutputStream fos = new FileOutputStream("myByteStream\\窗里窗外.txt");

//讀寫數(shù)據(jù),復(fù)制文本文件(一次讀取一個字節(jié),一次寫入一個字節(jié))
int by;
while ((by=fis.read())!=-1) {
fos.write(by);
}

//釋放資源
fos.close();
fis.close();
}
}

3.8字節(jié)流讀數(shù)據(jù)(一次讀一個字節(jié)數(shù)組數(shù)據(jù))

  • 一次讀一個字節(jié)數(shù)組的方法
    • public int read(byte[] b):從輸入流讀取最多b.length個字節(jié)的數(shù)據(jù)
    • 返回的是讀入緩沖區(qū)的總字節(jié)數(shù),也就是實際的讀取字節(jié)個數(shù)
  • 示例代碼
public class FileInputStreamDemo02 {
public static void main(String[] args) throws IOException {
//創(chuàng)建字節(jié)輸入流對象
FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");

byte[] bys = new byte[1024]; //1024及其整數(shù)倍
int len;
while ((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}

//釋放資源
fis.close();
}
}

3.9字節(jié)流復(fù)制圖片

  • 案例需求

? 把“E:\\yijizhichang\\mn.jpg”復(fù)制到模塊目錄下的“mn.jpg”

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
    • 根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
    • 讀寫數(shù)據(jù),復(fù)制圖片(一次讀取一個字節(jié)數(shù)組,一次寫入一個字節(jié)數(shù)組)
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyJpgDemo {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
FileInputStream fis = new FileInputStream("E:\\yijizhichang\\mn.jpg");
//根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");

//讀寫數(shù)據(jù),復(fù)制圖片(一次讀取一個字節(jié)數(shù)組,一次寫入一個字節(jié)數(shù)組)
byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys))!=-1) {
fos.write(bys,0,len);
}

//釋放資源
fos.close();
fis.close();
}
}

總結(jié)

本文主要給大家介紹了Java中文件的讀寫方法。主要包括文件File類、遞歸以及IO流,并且通過大量的案例加以說明。這里需要說明的是:本文中的代碼所涉及到的路徑或者文件都是本人的,大家得換成自己的,并且大家可以在網(wǎng)上自行找一些材料作為讀入或者寫入的材料,不過路徑最好是英文的,不要包含中文,防止JVM讀取失敗。這也就是本人沒有貼出運行示意圖的原因。不過本文中的代碼都是正確的,如果大家粘貼在自己編譯器報錯,可能是你的路徑?jīng)]有,或者文件不存在,最多就是需要自己將需要的包導(dǎo)進去。

到此這篇關(guān)于Java中文件的讀寫方法之IO流詳解的文章就介紹到這了,更多相關(guān)Java IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java經(jīng)典算法匯總之選擇排序(SelectionSort)

    Java經(jīng)典算法匯總之選擇排序(SelectionSort)

    選擇排序也是比較簡單的一種排序方法,原理也比較容易理解,選擇排序在每次遍歷過程中只記錄下來最小的一個元素的下標,待全部比較結(jié)束之后,將最小的元素與未排序的那部分序列的最前面一個元素交換,這樣就降低了交換的次數(shù),提高了排序效率。
    2016-04-04
  • Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟

    Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟

    本文主要介紹了Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟,首先介紹eclipse開發(fā)JavaWeb項目需要配置的相關(guān)環(huán)境,使用tomcat軟件在本地搭建服務(wù)器,然后再在eclipse環(huán)境下配置tomcat,感興趣的可以了解一下
    2021-08-08
  • springboot jpa分庫分表項目實現(xiàn)過程詳解

    springboot jpa分庫分表項目實現(xiàn)過程詳解

    這篇文章主要介紹了springboot jpa分庫分表項目實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java Swing JPanel面板的使用方法

    Java Swing JPanel面板的使用方法

    這篇文章主要介紹了Java Swing JPanel面板的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java設(shè)計模式之模板方法模式

    Java設(shè)計模式之模板方法模式

    這篇文章介紹了Java設(shè)計模式之模板方法模式,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Spring成員對象注入的三種方式詳解

    Spring成員對象注入的三種方式詳解

    這篇文章主要為大家詳細介紹了Spring成員對象注入的三種方式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java中的延遲隊列DelayQueue源碼解析

    Java中的延遲隊列DelayQueue源碼解析

    這篇文章主要介紹了Java中的延遲隊列DelayQueue源碼解析,DelayQueue是一個支持并發(fā)的無界延遲隊列,隊列中的每個元素都有個預(yù)定時間,當線程從隊列獲取元素時,只有到期元素才會出隊列,沒有到期元素則阻塞等待,需要的朋友可以參考下
    2023-12-12
  • Java 給PPT添加動畫效果的示例

    Java 給PPT添加動畫效果的示例

    這篇文章主要介紹了Java 給PPT添加動畫效果的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • SpringBoot集成thymeleaf渲染html模板的步驟詳解

    SpringBoot集成thymeleaf渲染html模板的步驟詳解

    這篇文章主要給大家詳細介紹了SpringBoot集成thymeleaf如何使實現(xiàn)html模板的渲染,文中有詳細的代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-06-06
  • Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    這篇文章主要介紹了Spring Cloud Gateway Hystrix fallback獲取異常信息的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論