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

Java文件操作和IO示例詳解

 更新時間:2024年12月26日 10:21:58   作者:烏啼霜滿天249  
這篇文章主要介紹了Java中通過java.io.File類對文件和目錄進行抽象描述,包括創(chuàng)建、刪除、重命名等操作,同時介紹了文件內(nèi)容的讀寫,需要的朋友可以參考下

Java中通過java.io.File類來對一個文件(包括目錄)進行抽象的描述.注意,有File對象,并不代表真實存在該文件.

一、File概述

File類的構(gòu)造方法

有四種重載方式,通常使用如下:

File(String pathname) //指定文件(或目錄)名和路徑創(chuàng)建文件對象

File file =new File("hello.text");  //在當前目錄創(chuàng)建文件對象

File file =new File("JAVA"); //在當前目錄創(chuàng)建一個目錄對象

File file=new File("D:\\Java");  //指明詳細的路徑以及目錄名,請注意雙斜線

方法

代碼示例

示例1:觀察get系列的觀點與差異:

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("..\\hello-world.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());
   }
}

運行結(jié)果

..

hello-world.txt

..\hello-world.txt

D:\代碼練習\文件示例1\..\hello-world.txt

D:\代碼練習\hello-world.txt

示例2 普通文件的創(chuàng)建、刪除

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("hello-world.txt"); // 要求該文件不存在,才能看到相同
的現(xiàn)象
        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.createNewFile());
   }
}

運行結(jié)果 

false

false

false

true

true

false

true

false

示例3 普通文件的刪除 

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求該文件不存在,才能看到相同的現(xiàn)
象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.delete());
        System.out.println(file.exists());
   }
}

運行結(jié)果

false

true

true

true

false

示例4 觀察 deleteOnExit 的現(xiàn)象 

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求該文件不存在,才能看到相同的現(xiàn)
象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        file.deleteOnExit();
        System.out.println(file.exists());
   }
}

示例5  觀察目錄的創(chuàng)建

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-dir"); // 要求該目錄不存在,才能看到相同的現(xiàn)象
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
   }
}

運行結(jié)果

false

false

true

true

false

示例6  觀察目錄創(chuàng)建2

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-parent\\some-dir"); // some-parent 和 somedir 都不存在
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
   }
}

運行結(jié)果

false

false

false

false

false

mkdir() 的時候,如果中間目錄不存在,則無法創(chuàng)建成功; mkdirs() 可以解決這個問題 

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-parent\\some-dir"); // some-parent 和 somedir 都不存在
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdirs());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
   }
}

 運行結(jié)果

false

false

true

true

false

示例7  觀察文件重命名.

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求 some-file.txt 得存在,可以
是普通文件,可以是目錄
        File dest = new File("dest.txt");   // 要求 dest.txt 不存在
        System.out.println(file.exists());
        System.out.println(dest.exists());
        System.out.println(file.renameTo(dest));
        System.out.println(file.exists());
        System.out.println(dest.exists());
   }
}

運行結(jié)果 

true

false

true

false

true

 二、文件內(nèi)容的讀寫 —— 數(shù)據(jù)流 

輸入流(InputStream)概述.

方法

修飾符及

返回值類

方法簽名

說明

int

read()

讀取一個字節(jié)的數(shù)據(jù),返回 -1 代表已經(jīng)完全讀完了

int

read(byte[] b)

最多讀取 b.length 字節(jié)的數(shù)據(jù)到 b 中,返回實際讀到的數(shù)量;-1 代表以及讀完了

int

read(byte[] b,

int off, int len)

最多讀取 len - off 字節(jié)的數(shù)據(jù)到 b 中,放在從 off 開始,返

回實際讀到的數(shù)量; -1 代表以及讀完了

void

close()

關(guān)閉字節(jié)流

InputStream 只是一個抽象類,要使用還需要具體的實現(xiàn)類。關(guān)于 InputStream 的實現(xiàn)類有很多,基本可以認為不同的輸入設(shè)備都可以對應(yīng)一個 InputStream 類,我們現(xiàn)在只關(guān)心從文件中讀取,所以使用 FileInputStream

利用FileInputStream 從文件中讀取

構(gòu)造方法

簽名說明

FileInputStream(File file)

利用 File 構(gòu)造文件輸入流

FileInputStream(String name)

利用文件路徑構(gòu)造文件輸入流

代碼示例

示例1

將文件完全讀完的兩種方式。相比較而言,后一種的 IO 次數(shù)更少,性能更好

import java.io.*;
// 需要先在項目目錄下準備好一個 hello.txt 的文件,里面填充 "Hello" 的內(nèi)容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            while (true) {
                int b = is.read();
                if (b == -1) {
                    // 代表文件已經(jīng)全部讀完
                    break;
               }
                
                System.out.printf("%c", b);
           }
       }
   }
}
import java.io.*;
// 需要先在項目目錄下準備好一個 hello.txt 的文件,里面填充 "Hello" 的內(nèi)容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            byte[] buf = new byte[1024];
            int len;
            
            while (true) {
                len = is.read(buf);
                if (len == -1) {
                    // 代表文件已經(jīng)全部讀完
                    break;
               }
                
                for (int i = 0; i < len; i++) {
               System.out.printf("%c", buf[i]);
               }
           }
       }
   }
}

示例2

這里我們把文件內(nèi)容中填充中文看看,注意,寫中文的時候使用 UTF-8 編碼。 hello.txt 中填寫 " 你好中國"

注意:這里我利用了這幾個中文的 UTF-8 編碼后長度剛好是 3 個字節(jié)和長度不超過 1024 字節(jié)的現(xiàn)狀,但這種方式并不是通用的

import java.io.*;
// 需要先在項目目錄下準備好一個 hello.txt 的文件,里面填充 "你好中國" 的內(nèi)容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            byte[] buf = new byte[1024];
            int len;
            while (true) {
                len = is.read(buf);
                if (len == -1) {
                    // 代表文件已經(jīng)全部讀完
                    break;
               }
                // 每次使用 3 字節(jié)進行 utf-8 解碼,得到中文字符
                // 利用 String 中的構(gòu)造方法完成
                // 這個方法了解下即可,不是通用的解決辦法
                for (int i = 0; i < len; i += 3) {
                    String s = new String(buf, i, 3, "UTF-8");
                    System.out.printf("%s", s);
               }
           }
       }
   }
}

利用 Scanner 進行字符讀取

上述例子中,我們看到了對字符類型直接使用 InputStream 進行讀取是非常麻煩且困難的,所以,我們使用一種我們之前比較熟悉的類來完成該工作,就是 Scanner 類。

構(gòu)造方法說明

Scanner(InputStream is, String charset)

使用 charset 字符集進行 is 的掃描讀取

import java.io.*;
import java.util.*;
// 需要先在項目目錄下準備好一個 hello.txt 的文件,里面填充 "你好中國" 的內(nèi)容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
           try (Scanner scanner = new Scanner(is, "UTF-8")) {
               while (scanner.hasNext()) {
                   String s = scanner.next();
                   System.out.print(s);
               }
           }
       }
   }
}

輸出流OutputStream 概述

方法

修飾 符及 返回 值類 

方法簽名

說明

void

write(int b)

寫入要給字節(jié)的數(shù)據(jù)

void

write(byte[] b)

將 b 這個字符數(shù)組中的數(shù)據(jù)全部寫入 os 中

int

write(byte[] b, int off, int len)

將 b 這個字符數(shù)組中從 off 開始的數(shù)據(jù)寫入 os 中,一共寫 len 個

void

close()

關(guān)閉字節(jié)流

void

flush()

重要:我們知道 I/O 的速度是很慢的,所以,大多的 OutputStream 

了減少設(shè)備操作的次數(shù),在寫數(shù)據(jù)的時候都會將數(shù)據(jù)先暫時寫入內(nèi)存的

一個指定區(qū)域里,直到該區(qū)域滿了或者其他指定條件時才真正將數(shù)據(jù)寫 入設(shè)備中,這個區(qū)域一般稱為緩沖區(qū)。但造成一個結(jié)果,就是我們寫的

數(shù)據(jù),很可能會遺留一部分在緩沖區(qū)中。需要在最后或者合適的位置,

調(diào)用 flush (刷新)操作,將數(shù)據(jù)刷到設(shè)備中。

OutputStream 同樣只是一個抽象類,要使用還需要具體的實現(xiàn)類。我們現(xiàn)在還是只關(guān)心寫入文件中,所以使用 FileOutputStream

利用 OutputStreamWriter 進行字符寫入 

示例1

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            os.write('H');
            os.write('e');
            os.write('l');
            os.write('l');
            os.write('o');
            // 不要忘記 flush
            os.flush();
       }
   }
}

示例2

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            byte[] b = new byte[] {
               (byte)'G', (byte)'o', (byte)'o', (byte)'d'
           };
            os.write(b);
          
            // 不要忘記 flush
            os.flush();
       }
   }
}

示例3

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            byte[] b = new byte[] {
               (byte)'G', (byte)'o', (byte)'o', (byte)'d', (byte)'B', 
(byte)'a', (byte)'d'
           };
            os.write(b, 0, 4);
          
            // 不要忘記 flush
            os.flush();
       }
   }
}

示例4

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
           String s = "Nothing";
            byte[] b = s.getBytes();
            os.write(b);
          
            // 不要忘記 flush
            os.flush();
       }
   }
}

示例5

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            String s = "你好中國";
            byte[] b = s.getBytes("utf-8");
         os.write(b);
            // 不要忘記 flush
            os.flush();
       }
   }
}

利用 PrintWriter 輸出 

上述,我們其實已經(jīng)完成輸出工作,但總是有所不方便,我們接來下將 OutputStream 處理下,使用

PrintWriter 類來完成輸出,因為

PrintWriter 類中提供了我們熟悉的 print/println/printf 方法

OutputStream os = ...;
OutputStreamWriter osWriter = new OutputStreamWriter(os, "utf-8"); // 告訴它,我
們的字符集編碼是 utf-8 的
PrintWriter writer = new PrintWriter(osWriter);
// 接下來我們就可以方便的使用 writer 提供的各種方法了
writer.print("Hello");
writer.println("你好");
writer.printf("%d: %s\n", 1, "沒什么");
// 不要忘記 flush
writer.flush();

 示例1

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF-
8")) {
                try (PrintWriter writer = new PrintWriter(osWriter)) {
                    writer.println("我是第一行");
                    writer.print("我的第二行\(zhòng)r\n");
                    writer.printf("%d: 我的第三行\(zhòng)r\n", 1 + 1);
                    writer.flush();
               }
           }
       }
   }
}

總結(jié) 

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

相關(guān)文章

  • java byte數(shù)組與16進制間相互轉(zhuǎn)換的示例

    java byte數(shù)組與16進制間相互轉(zhuǎn)換的示例

    這篇文章主要介紹了java byte數(shù)組與16進制間相互轉(zhuǎn)換的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • 你知道將Bean交給Spring容器管理有幾種方式(推薦)

    你知道將Bean交給Spring容器管理有幾種方式(推薦)

    Spring核心是?IOC?和?AOP?,我們在Spring項目中,我們需要將Bean交給Spring容器,也就是IOC管理,這樣你才可以使用注解來進行依賴注入,這篇文章主要介紹了你知道將Bean交給Spring容器管理有幾種方式,需要的朋友可以參考下
    2022-10-10
  • 使用Java?Socket實現(xiàn)GPS定位數(shù)據(jù)處理

    使用Java?Socket實現(xiàn)GPS定位數(shù)據(jù)處理

    在許多應(yīng)用場景中,如車輛追蹤、移動設(shè)備定位等,GPS定位數(shù)據(jù)的實時獲取和處理至關(guān)重要,本文將介紹如何使用Java?Socket編程來接收GPS設(shè)備發(fā)送的數(shù)據(jù)并進行處理,需要的朋友可以參考下
    2024-07-07
  • Java基于Tcp的基礎(chǔ)聊天功能實例

    Java基于Tcp的基礎(chǔ)聊天功能實例

    這篇文章主要介紹了Java基于Tcp的基礎(chǔ)聊天功能,結(jié)合實例形式分析了java基于tcp協(xié)議的數(shù)據(jù)傳輸實現(xiàn)聊天功能相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • spring為java.util.Properties類型的屬性進行賦值過程解析

    spring為java.util.Properties類型的屬性進行賦值過程解析

    這篇文章主要介紹了spring為java.util.Properties類型的屬性進行賦值過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-01-01
  • Spring Boot2.0中SpringWebContext找不到無法使用的解決方法

    Spring Boot2.0中SpringWebContext找不到無法使用的解決方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot2.0中SpringWebContext找不到無法使用的解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習學(xué)習吧
    2018-12-12
  • java?JUC信號量Semaphore原理及使用介紹

    java?JUC信號量Semaphore原理及使用介紹

    這篇文章主要為大家介紹了java?JUC信號量Semaphore原理及使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JAVA PDF操作之實現(xiàn)截取N頁和多個PDF合并

    JAVA PDF操作之實現(xiàn)截取N頁和多個PDF合并

    這篇文章主要為大家詳細介紹了java關(guān)于PDF的一些操作,例如截取N頁并生成新文件,轉(zhuǎn)圖片以及多個PDF合并,文中的示例代碼講解詳細,感興趣的可以了解下
    2025-01-01
  • mybatis 動態(tài)SQL巧用突破in數(shù)量限制的方案

    mybatis 動態(tài)SQL巧用突破in數(shù)量限制的方案

    本文主要介紹了MyBatis動態(tài)SQL通過分塊處理突破IN子句參數(shù)數(shù)量限制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2025-07-07
  • idea項目文件夾橫向顯示,縱向顯示的解決方法

    idea項目文件夾橫向顯示,縱向顯示的解決方法

    這篇文章主要介紹了idea項目文件夾橫向顯示,縱向顯示的解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

邯郸市| 肥东县| 湛江市| 仪陇县| 虞城县| 巴里| 镇安县| 马龙县| 平和县| 彭阳县| 河曲县| 太和县| 北流市| 东丽区| 浦东新区| 河池市| 景宁| 鄂伦春自治旗| 公主岭市| 滕州市| 息烽县| 江达县| 成安县| 同德县| 敖汉旗| 商南县| 阳春市| 昭苏县| 荔波县| 永登县| 上林县| 苍山县| 鄢陵县| 邓州市| 抚宁县| 资阳市| 江西省| 涞源县| 蓝山县| 石首市| 龙岩市|