91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java文件管理操作的知識點有哪些

發布時間:2022-09-20 09:54:09 來源:億速云 閱讀:132 作者:iii 欄目:開發技術

這篇文章主要講解了“Java文件管理操作的知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java文件管理操作的知識點有哪些”吧!

一.基本文件操作

獲取及判斷文件屬性

代碼示例如下:

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());
        //創建文件前
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println("---------------");
        //創建文件后
        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():刪除文件

上述代碼的運行結果如下:

Java文件管理操作的知識點有哪些

創建及修改文件

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():創建對應文件

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

上述代碼運行結果如下:

Java文件管理操作的知識點有哪些

mkdir():根據路徑創建單級目錄

mkdirs():根據路徑創建多級目錄

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():將一個文件的名字賦值給另一個文件

二.文件讀寫

讀文件

字節流

我們事先準備一個test.txt文件,里面包含內容"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);
        }
        //關閉文件
        inputStream.close();
 
    }
}

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

Java文件管理操作的知識點有哪些

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

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

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

上述代碼的運行結果如下:

Java文件管理操作的知識點有哪些

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

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

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);
        //關閉文件
        inputStream.close();
 
    }
}

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

字符流

字符流對應著Reader和FileReader兩個關鍵字.

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.我們創建的文件都在硬盤上,直接操作的話比較困難.因此我們嘗試在內存上創建一個媒介,間接的操作硬盤上的文件.我們將InputStream和Reader這種媒介成為句柄(Handler).

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

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

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

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構造函數的參數,這樣我們就可以使用Scanner靈活讀取文件內部的內容.

寫文件

字節流

對于字節流的輸入方式,我們有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();
        }
    }
}

字節流封裝

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

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();
        }
    }
}

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

其他要點

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

感謝各位的閱讀,以上就是“Java文件管理操作的知識點有哪些”的內容了,經過本文的學習后,相信大家對Java文件管理操作的知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连云港市| 勐海县| 五指山市| 工布江达县| 武清区| 武强县| 福州市| 博兴县| 财经| 杭锦旗| 界首市| 金寨县| 庄浪县| 高安市| 临洮县| 西林县| 仙桃市| 长治县| 哈尔滨市| 偃师市| 南平市| 鹤壁市| 永川市| 百色市| 呼伦贝尔市| 武城县| 故城县| 手机| 合川市| 阜平县| 昭觉县| 连云港市| 本溪| 扶沟县| 滦平县| 重庆市| 仪征市| 巫溪县| 武山县| 浮山县| 虎林市|