最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年04月13日 13:55:35   作者:一計(jì)之長  
這篇文章主要介紹了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實(shí)例。
File f1 = new File("E:\\yijizhichang\\java.txt");
System.out.println(f1);

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

//File(File parent, String child):從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實(shí)例。
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:在當(dāng)前模塊目錄下創(chuàng)建java.txt文件
File f1 = new File("myFile\\java.txt");

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

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

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

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

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

2.遞歸

2.1遞歸

  • 遞歸的介紹
    • 以編程的角度來看,遞歸指的是方法定義中調(diào)用方法本身的現(xiàn)象
    • 把一個復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解
    • 遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算
  • 遞歸的基本使用
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);
}
}
}
  • 遞歸的注意事項(xiàng):
    • 遞歸一定要有出口。否則內(nèi)存溢出
    • 遞歸雖然有出口,但是遞歸的次數(shù)也不宜過多。否則內(nèi)存溢出

2.2遞歸求階乘

  • 案例需求

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

  • 代碼實(shí)現(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)容,并把所有文件的絕對路徑輸出在控制臺

  • 代碼實(shí)現(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)先使用字符流
    • 如果操作的是圖片、視頻、音頻等二進(jìn)制文件。優(yōu)先使用字節(jié)流
    • 如果不確定文件類型,優(yōu)先使用字節(jié)流。字節(jié)流是萬能的流

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

  • 字節(jié)流抽象基類
    • InputStream:這個抽象類是表示字節(jié)輸入流的所有類的超類
    • OutputStream:這個抽象類是表示字節(jié)輸出流的所有類的超類
    • 子類名特點(diǎn):子類名稱都是以其父類名作為子類名的后綴
  • 字節(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ù)如何實(shí)現(xiàn)換行
    • windows:\r\n
    • linux:\n
    • mac:\r
  • 字節(jié)流寫數(shù)據(jù)如何實(shí)現(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特點(diǎn)
    • 被finally控制的語句一定會執(zhí)行,除非JVM退出
  • 示例代碼
public class FileOutputStreamDemo04 {
public static void main(String[] args) {
//加入finally來實(shí)現(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):通過打開與實(shí)際文件的連接來創(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”

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

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

  • 目的地:

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

  • 代碼實(shí)現(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ù),也就是實(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”

  • 實(shí)現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
    • 根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
    • 讀寫數(shù)據(jù),復(fù)制圖片(一次讀取一個字節(jié)數(shù)組,一次寫入一個字節(jié)數(shù)組)
    • 釋放資源
  • 代碼實(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讀取失敗。這也就是本人沒有貼出運(yùn)行示意圖的原因。不過本文中的代碼都是正確的,如果大家粘貼在自己編譯器報錯,可能是你的路徑?jīng)]有,或者文件不存在,最多就是需要自己將需要的包導(dǎo)進(jìn)去。

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

相關(guān)文章

  • Nacos注冊中心的部署與用法示例詳解

    Nacos注冊中心的部署與用法示例詳解

    注冊中心是微服務(wù)架構(gòu)中的紐帶,類似于“通訊錄”,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系,本文通過示例代碼給大家介紹Nacos注冊中心的部署與用法,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • java文件處理工具類詳解

    java文件處理工具類詳解

    這篇文章主要為大家詳細(xì)介紹了java文件處理工具類的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Spring Boot 自定義數(shù)據(jù)源DruidDataSource代碼

    Spring Boot 自定義數(shù)據(jù)源DruidDataSource代碼

    這篇文章主要介紹了Spring Boot 自定義數(shù)據(jù)源DruidDataSource代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java中實(shí)現(xiàn)對象深克隆的四種方式

    Java中實(shí)現(xiàn)對象深克隆的四種方式

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)對象的深克隆,可以通過手動實(shí)現(xiàn)clone()方法、使用序列化、第三方庫Apache Commons Lang或Hutool等幾種方式,每種方式都有其特點(diǎn),需要的朋友可以參考下
    2025-10-10
  • 一問詳解SpringBoot配置文件優(yōu)先級

    一問詳解SpringBoot配置文件優(yōu)先級

    在SpringBoot項(xiàng)目當(dāng)中,我們要想配置一個屬性,可以通過這三種方式當(dāng)中的任意一種來配置都可以,那么優(yōu)先級怎么算,本文主要介紹了一問詳解SpringBoot配置文件優(yōu)先級,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個在線點(diǎn)餐系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Eclipse快捷鍵使用小結(jié)

    Eclipse快捷鍵使用小結(jié)

    Eclipse是用java的同行必不可少的工具,我總結(jié)了一下它的快捷鍵,太常用的ctrl+單擊、ctrl+shift+F、Ctrl+1等我就不細(xì)說了,主要是方便查看。下邊小編就詳細(xì)的為大家介紹一下
    2013-07-07
  • Java?zxing實(shí)現(xiàn)生成并解析二維碼與條形碼

    Java?zxing實(shí)現(xiàn)生成并解析二維碼與條形碼

    這篇文章主要為大家詳細(xì)介紹了Java如何通過zxing實(shí)現(xiàn)生成并解析二維碼與條形碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • 解決springboot集成swagger碰到的坑(報404)

    解決springboot集成swagger碰到的坑(報404)

    這篇文章主要介紹了解決springboot集成swagger碰到的坑(報404),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用Java的Lucene搜索工具對檢索結(jié)果進(jìn)行分組和分頁

    使用Java的Lucene搜索工具對檢索結(jié)果進(jìn)行分組和分頁

    這篇文章主要介紹了使用Java的搜索工具Lucene對檢索結(jié)果進(jìn)行分組和分頁的方法,Luence是Java環(huán)境中的一個全文檢索引擎工具包,需要的朋友可以參考下
    2016-03-03

最新評論

库尔勒市| 锦州市| 宁波市| 安福县| 荔波县| 溧阳市| 淮阳县| 浙江省| 鹤岗市| 盐池县| 尼木县| 思茅市| 大关县| 靖西县| 平远县| 沛县| 西昌市| 崇州市| 廉江市| 洞头县| 年辖:市辖区| 红原县| 开封市| 霍州市| 宁德市| 兴业县| 新巴尔虎右旗| 德钦县| 阜南县| 曲麻莱县| 汕尾市| 韶山市| 伊宁县| 鄂托克前旗| 安阳县| 万安县| 逊克县| 京山县| 疏附县| 门头沟区| 滨州市|