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

Java文件管理操作的知識點整理

 更新時間:2022年09月18日 16:35:48   作者:ren2003u  
這篇文章主要為大家詳細介紹了Java中文件管理操作的一些知識點和實現(xiàn)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下

一.基本文件操作

獲取及判斷文件屬性

代碼示例如下:

import java.io.IOException;
 
public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
 
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
        //創(chuàng)建文件前
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println("---------------");
        //創(chuàng)建文件后
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        //刪除文件
        System.out.println("--------------");
        file.delete();
        System.out.println(file.exists());
    }
}

getParent():獲取上級目錄,若無指定則返回null

getName():獲取當前文件名

getPath():獲取以工作目錄為基準的相對路徑

getAbsolutePath():獲取以盤頭為起始點的絕對路徑

getCanonicalPath():同上,但是會進行一些精簡

exists():判斷文件是否存在

isDirectory():判斷文件是否是目錄

isFile():判斷文件是否是文件

delete():刪除文件

上述代碼的運行結(jié)果如下:

創(chuàng)建及修改文件

import java.io.File;
import java.io.IOException;
 
public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
 
        file.createNewFile();
        //退出時刪除
        file.deleteOnExit();
        System.out.println(file.exists());
    }
}

deleteOnExit():退出時刪除

createNewFile():創(chuàng)建對應文件

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test");
        //創(chuàng)建單級目錄
        file.mkdir();
 
        //創(chuàng)建多級目錄
        File file1 = new File("test1/a/11");
        file1.mkdirs();
    }
}

上述代碼運行結(jié)果如下:

mkdir():根據(jù)路徑創(chuàng)建單級目錄

mkdirs():根據(jù)路徑創(chuàng)建多級目錄

public class test {
    public static void main(String[] args) throws IOException {
        File file1 = new File("test");
        File file2 = new File("test1");
        //重命名
        file1.renameTo(file2);
 
    }
}

renameTo():將一個文件的名字賦值給另一個文件

二.文件讀寫

讀文件

字節(jié)流

我們事先準備一個test.txt文件,里面包含內(nèi)容"Hello".

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打開文件
        InputStream inputStream = new FileInputStream("text1.txt");
        //讀文件
        while(true){
            int b = inputStream.read();
            if(b == -1){
                break;
            }
            System.out.println(b);
        }
        //關(guān)閉文件
        inputStream.close();
 
    }
}

實際上,read()有很多個版本,具體如下:

上述代碼中使用的是第一個版本,一次讀取一個字節(jié),并將這個字節(jié)的內(nèi)容作為返回值返回,如果讀取到文件結(jié)束符(EOF),則返回-1.

第二個版本要求一個"輸出型參數(shù)"---一個字節(jié)數(shù)組.read()會從文件里把內(nèi)容全部讀入該字節(jié)數(shù)組中,若溢出則截斷.

第三個版本與第二個版本相似,只不過允許通過參數(shù)控制數(shù)據(jù)的傳入起點和終點(也即允許傳入的數(shù)據(jù)長度).

上述代碼的運行結(jié)果如下:

可見讀取的是"Hello"每個字符對應的ASCII碼值.

這樣可讀性無疑是很低的,我們可以將其轉(zhuǎn)為字符串的形式輸出,代碼示例如下:

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打開文件
        InputStream inputStream = new FileInputStream("text1.txt");
        //讀文件
        byte[] b = new byte[1024];
        int len = inputStream.read(b);
 
        String s = new String(b,0,len,"utf8");
        System.out.println(s);
        //關(guān)閉文件
        inputStream.close();
 
    }
}

我們可以通過讀出來的字節(jié)數(shù)組,反向構(gòu)造出其原本的字符串,這樣就能得到"Hello"了,但這樣無疑很麻煩.因此,對于這種非二進制的數(shù)組,我們可以使用字符流.

字符流

字符流對應著Reader和FileReader兩個關(guān)鍵字.

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打開文件
        Reader reader = new FileReader("text1.txt");
 
        char[] buffer = new char[1024];
        int len = reader.read(buffer);
 
        for (int i = 0; i < len; i++) {
            System.out.print(buffer[i]);
        }
        
        reader.close();
    }
}

這樣輸出出來的直接就是"Hello",而不是ASCII碼值.

其他要點

1.InputStream和Reader兩個都是抽象類,沒辦法直接實例化.因此我們需要借助他們的子類FileInputStream和FileReader來實例化.

2.我們創(chuàng)建的文件都在硬盤上,直接操作的話比較困難.因此我們嘗試在內(nèi)存上創(chuàng)建一個媒介,間接的操作硬盤上的文件.我們將InputStream和Reader這種媒介成為句柄(Handler).

3.上述代碼的寫法實際上是不嚴謹?shù)?因為一旦程序在運行途中拋出了異常,代碼末尾的close()就無法執(zhí)行.因此我們應該把close()放在finally下.保證在文件描述符表上的資源得以釋放.

4.關(guān)于文件描述符表:文件描述符表可以簡單理解成PCB中的一個數(shù)組/順序表.數(shù)組中的每個元素都對應著當前進程打開的文件.這個數(shù)組的下標,就稱為"文件描述符".每當我們打開一個文件時,就會在文件描述符表中占據(jù)一個位置;每次關(guān)閉文件,都會釋放一個位置.然而文件描述表的長度是存在上限的,如果在進程中一直打開文件而不釋放,這就會導致進程在后續(xù)打開文件的時候拋出異常.

5.實際上,我們有一套更實用的方法從文件中讀取內(nèi)容,代碼示例如下:

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        InputStream inputStream = new FileInputStream("text1.txt");
        Scanner scanner = new Scanner(inputStream);
 
        String s = scanner.next();
 
        System.out.println(s);
    }
}

我們可以將InputStream作為Scanner構(gòu)造函數(shù)的參數(shù),這樣我們就可以使用Scanner靈活讀取文件內(nèi)部的內(nèi)容.

寫文件

字節(jié)流

對于字節(jié)流的輸入方式,我們有OutputStream和FileOutputStream這一套組合. 

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        try(OutputStream outputStream = new FileOutputStream("text1.txt")){
            outputStream.write('h');
            outputStream.write('e');
            outputStream.write('l');
            outputStream.write('l');
            outputStream.write('o');
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

字符流

對于字符流的輸入方式,我們有Writer和FileWriter這一套組合.

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        try(Writer writer = new FileWriter("text1.txt")){
            writer.write("hello");
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

字節(jié)流封裝

與讀取文件內(nèi)容部分一樣,我們可以將字節(jié)流封裝,其可以靈活的向文件內(nèi)寫內(nèi)容. 

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text.txt");
        file.createNewFile();
 
        try(OutputStream outputStream = new FileOutputStream("text.txt")){
            PrintWriter printWriter = new PrintWriter(outputStream);
            printWriter.println("hello");
            printWriter.flush();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

此處封裝過后,就可以如常規(guī)輸出一樣,向文件里輸入內(nèi)容.代碼中flush()的作用在于清空輸入緩沖區(qū)的內(nèi)容,使println()輸出的內(nèi)容能成功到文件中.

其他要點

上述代碼中我們把OutputStream等輸入輸出流放在try()中,其目的是在代碼結(jié)束后可以自動調(diào)用close()方法釋放文件描述符表,防止忘記.這要求這個類要實現(xiàn)Closeable接口.

到此這篇關(guān)于Java文件管理操作的知識點整理的文章就介紹到這了,更多相關(guān)Java文件管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring2.5.6開發(fā)環(huán)境搭建圖文教程

    Spring2.5.6開發(fā)環(huán)境搭建圖文教程

    這篇文章主要為大家詳細介紹了Spring2.5.6開發(fā)環(huán)境搭建圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 基于Java語言實現(xiàn)Socket通信的實例

    基于Java語言實現(xiàn)Socket通信的實例

    今天小編就為大家分享一篇關(guān)于基于Java語言實現(xiàn)Socket通信的實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java設(shè)計模式之Builder建造者模式

    Java設(shè)計模式之Builder建造者模式

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之Builder建造者模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解java各種集合的線程安全

    詳解java各種集合的線程安全

    這篇文章主要介紹了詳解java各種集合的線程安全,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 手寫mybatis完整sql插件問題及實現(xiàn)思路

    手寫mybatis完整sql插件問題及實現(xiàn)思路

    大家在使用mybatis的過程中,mysql日志功能一般不會直接放到數(shù)據(jù)庫中執(zhí)行的,今天小編重點給大家分享手寫mybatis完整sql插件問題及實現(xiàn)思路,對mybatis完整sql插件相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05
  • Java超詳細講解三大特性之一的多態(tài)

    Java超詳細講解三大特性之一的多態(tài)

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定
    2022-05-05
  • Java中該如何優(yōu)雅的使用線程池詳解

    Java中該如何優(yōu)雅的使用線程池詳解

    在java開發(fā)中我們對“池”的概念并不陌生,常見的有數(shù)據(jù)庫連接池、線程池、對象池、常量池等等,其作用基本上就是避免頻繁的創(chuàng)建和回收,造成資源浪費,線程池也不例外,這篇文章主要給大家介紹了關(guān)于Java中該如何優(yōu)雅的使用線程池的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • springboot配置ldaps連接方式

    springboot配置ldaps連接方式

    這篇文章主要介紹了springboot配置ldaps連接方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java線程安全鎖ReentrantReadWriteLock原理分析readLock

    java線程安全鎖ReentrantReadWriteLock原理分析readLock

    這篇文章主要為大家介紹了java線程安全鎖ReentrantReadWriteLock原理分析readLock,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • java中stream去重的幾種方式舉例

    java中stream去重的幾種方式舉例

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列,這篇文章主要給大家介紹了關(guān)于java中stream去重的幾種方式,需要的朋友可以參考下
    2023-07-07

最新評論

贵港市| 方山县| 合阳县| 靖西县| 高陵县| 杂多县| 红原县| 清苑县| 高陵县| 奈曼旗| 响水县| 临潭县| 香河县| 醴陵市| 九台市| 景谷| 阿勒泰市| 鹰潭市| 邹城市| 布尔津县| 安徽省| 阜宁县| 乌兰浩特市| 阳曲县| 永新县| 白城市| 麻阳| 尚义县| 昆明市| 淅川县| 建始县| 衡阳县| 高尔夫| 禹城市| 怀来县| 景德镇市| 邹平县| 秦安县| 任丘市| 德化县| 衡山县|