国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

這篇具有很好參考價(jià)值的文章主要介紹了Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文件內(nèi)容操作與實(shí)戰(zhàn)

文件的分類上一篇文章(文件對(duì)象處理)已經(jīng)和大家講解過了。本章主要文件主要針對(duì)于對(duì)文件內(nèi)容的操作展開講解,文件分為:文本文件二進(jìn)制文件,不同的文件,操作方法也不盡相同。

針對(duì)文本文件,Java提供了一組類——”字符流“,代表類(Reader,Writer)。同樣的,Java也為二進(jìn)制文件提供了一組操作類——”字節(jié)流“,代表類(InputStream,OutputStream)。其實(shí)這兩種的對(duì)文件操作原理是相同的,只是針對(duì)的文件不同,所以才有了字符流和字節(jié)流之分。因?yàn)橛辛俗止?jié)流與字符流之分,所以相對(duì)應(yīng)的,字節(jié)流最低讀寫字符是”一個(gè)字節(jié)“,字符流也有對(duì)應(yīng)限制,字符流最低讀寫”一個(gè)字符 “。

這種讀寫操作一般也統(tǒng)稱為IO流。IO操作是在CPU上進(jìn)行的,以CPU來看待數(shù)據(jù)的輸入和輸出。

字符流

輸入流:Reader

輸出流:Writer

注意:使用完文件資源后應(yīng)該關(guān)閉文件資源

Reader

創(chuàng)建對(duì)象及使用:

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

public static void main(String[] args) throws IOException {//創(chuàng)建一個(gè)字符流操作對(duì)象
    try(Reader reader = new FileReader("d:/hello.txt")){
        while (true) {
            //每次讀取一個(gè)字符
            int read = reader.read();
            if(read == -1){
                break;
            }
            System.out.print((char)read+" ");
        }
    }
}

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

Writer

字符流寫入對(duì)象的創(chuàng)建及使用:

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

同樣的需要使用子類來構(gòu)造

public static void main(String[] args) throws IOException {
    try(Writer writer = new FileWriter("d:/hello.txt")){
        writer.write("我愛敲代碼");
    }
}

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

文件使用完,需要進(jìn)行關(guān)閉操作,防止不必要的意外發(fā)生。文件的資源泄漏問題不會(huì)立即出現(xiàn),而是一段時(shí)間才會(huì)出現(xiàn)明顯問題。

字節(jié)流

輸入流:inputStream

輸入流:OutputStream

注意:使用完文件資源后應(yīng)該關(guān)閉文件資源

inputStream

構(gòu)造inputStream對(duì)象

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

因?yàn)檫@個(gè)類是一個(gè)抽象方法,在構(gòu)造時(shí),不能直接使用類名去調(diào)用。這里使用子類FileInputStream來構(gòu)造對(duì)象。

public static void main(String[] args) throws IOException {
    //相當(dāng)于打開一個(gè)文件,將這個(gè)變量與文件關(guān)聯(lián)
    InputStream inputStream = new FileInputStream("d:/hello.txt");

    inputStream.close();
    //每次使用完文件,必須關(guān)閉,防止不必要的資源浪費(fèi)
}

有時(shí)候因?yàn)橹型緍eturn或者結(jié)束了進(jìn)程會(huì)不可避免地?zé)o法將文件關(guān)閉,所以這里使用try/catch/finally語句來進(jìn)行關(guān)閉文件資源操作。

改寫代碼:

public static void main(String[] args) throws IOException {
    //方案一 
     InputStream inputStream = null;
     try {
         //打開文件
     	inputStream = new FileInputStream("d:/hello.txt");
     }finally {
         //關(guān)閉文件
     	inputStream.close();
     }
    
    //方案二,會(huì)自動(dòng)執(zhí)行close關(guān)閉操作
    try(InputStream inputStream = new FileInputStream("d:/hello.txt")){
            
        }
}   

解決了構(gòu)造函數(shù)接下來我們將繼續(xù)來實(shí)現(xiàn)讀寫操作。

讀操作

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

可以看見有三個(gè)方法可以進(jìn)行讀操作,接下來我們一一測(cè)試read()方法的作用。

//read()相當(dāng)于把字節(jié)變成二進(jìn)制進(jìn)行表示
public static void main(String[] args) throws IOException {
    try(InputStream inputStream = new FileInputStream("d:/hello.txt")){
        while (true){
            int input = inputStream.read();
            //遇到-1則表示沒有數(shù)據(jù),退出循環(huán)
            if(input == -1){
                break;
            }
            System.out.println(input);
        }
    }
}

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

三個(gè)方法使用的操作基本一致,都是讀到末尾時(shí)返回-1,另外兩個(gè)方法可以指定讀取大小。返回的是總字節(jié)數(shù),不是二進(jìn)制數(shù)據(jù)。

OutputStream

構(gòu)造inputStream對(duì)象

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

同樣的,這個(gè)也是一個(gè)抽象類,需要調(diào)用子類仿佛來創(chuàng)建對(duì)象:

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

//創(chuàng)建對(duì)象及使用方法
//將hello寫入文件
public static void main(String[] args) throws IOException {
    try(OutputStream outputStream = new FileOutputStream("d:/hello.txt")){
        byte[] bytes = {'h','e','l','l','o'};
        outputStream.write(bytes);

    }
}

Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)

實(shí)戰(zhàn)??

遍歷目錄,對(duì)文件進(jìn)行查找或者刪除

1.將輸入目錄進(jìn)行遍歷

2.每次找到一個(gè)文件就獲取目錄

3.對(duì)比文件名與輸入的文件名是否一致

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class FindAndDelete {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入要查找的目錄:");
        File fileDir = new File(scanner.next());
        if(!fileDir.isDirectory()){
            System.out.println("您輸入的不是目錄!");
            return;
        }
        System.out.println("請(qǐng)輸入要查找的文件名");
        String file = scanner.next();
        //遞歸目錄/文件的操作
        scanDir(fileDir,file);
    }

    private static void scanDir(File fileDir, String file) throws IOException {
        File[] files = fileDir.listFiles();
        if(files == null){
            //當(dāng)前目錄為空
            return;
        }
        for(File f:files){
//            System.out.println("當(dāng)前搜索到"+f.getCanonicalPath());
            if(f.isFile()){
                String filename = f.getName();
                if(filename.equals(file)){
                    System.out.println(f.getCanonicalPath()+"存在該文件");
                }
            }else if(f.isDirectory()){
                scanDir(f,file);
            }else {
                continue;
            }
        }
    }
}

遍歷目錄,查找文件中的內(nèi)容與指定內(nèi)容一致并輸出文件目錄,類似于文件檢索

1.先去簡單遞歸遍歷目錄

2.每次找到一個(gè)文件并獲取目錄

3.在判定的查詢的詞中,是否存在上述內(nèi)容

public class FindTargetDoc {
    public static void main(String[] args) throws IOException {
        //1.先讓用戶輸入需要搜索文件的根目錄
        Scanner scanner = new Scanner(System.in);
        System.out.print("請(qǐng)輸入一個(gè)目錄:");
        File fileDir = new File(scanner.next());
        //判斷輸入的是否為目錄
        if(!fileDir.isDirectory()){
            System.out.println("輸入錯(cuò)誤,你輸入的目錄不存在");
        }
        //2.獲取用戶需要查詢的詞
        System.out.println("請(qǐng)輸入要查詢的詞");
        String word = scanner.next();
        
        //3.遞歸進(jìn)行目錄/文件的操作
        scanDir(fileDir,word);
        
    }

    private static void scanDir(File fileDir, String word) throws IOException {
        //列出當(dāng)前FileDir的內(nèi)容
        File[] files = fileDir.listFiles();
        if(files == null){
            //當(dāng)前目錄是空
            return;
        }
        for (File f:files) {
            if(f.isFile()){
                //判斷是否為文件
                String content = readFile(f);
                if(content.contains(word)){
                    System.out.println(f.getCanonicalPath()+"包含查找的文件");
                }
            }else if(f.isDirectory()) {
                //判斷是否為目錄
                scanDir(f,word);
            }else {
                //不是普通文件也不是目錄文件
                continue;
            }
        }
    }

    private static String readFile(File f) throws IOException{
        //讀取整個(gè)內(nèi)容,返回
        //處理是字符流,所以使用字符流進(jìn)行處理
        StringBuilder stringBuilder = new StringBuilder();
        try(Reader reader = new FileReader(f)){
            //將讀取的字符拼接到StringBuilder上
            while (true){
                int ch = reader.read();
                if(ch == -1){
                    break;
                }
                stringBuilder.append((char)ch);
            }
        }
        return stringBuilder.toString();
    }
}

進(jìn)行普通文件的復(fù)制操作

1.需要準(zhǔn)備兩個(gè)文件

2.一個(gè)有內(nèi)容,一個(gè)無內(nèi)容

3.一個(gè)讀一個(gè)寫,將其讀完存儲(chǔ)在另一個(gè)文檔中即可

public class CopyFile {
    public static void main(String[] args) throws IOException {
        //這里可以輸入,讀者可以自行更改
        File source = new File("d:/aaa/hello.txt");
        File dest = new File("d:/aaa/world.txt");

        if(!source.exists() || !dest.exists()){
            System.out.println("文件不存在");
        }
        Reader reader = new FileReader(source);
        Writer writer = new FileWriter(dest);
        StringBuilder stringBuilder = new StringBuilder();
        while (true){
            int ch = reader.read();
            if(ch == -1){
                break;
            }
            stringBuilder.append((char)ch);
        }
        writer.write(stringBuilder.toString());
        reader.close();//記得關(guān)閉資源
        writer.close();
    }
}

以上就是關(guān)于我們文件內(nèi)容的操作及實(shí)戰(zhàn),感謝閱讀(〃 ̄︶ ̄)人( ̄︶ ̄〃)文章來源地址http://www.zghlxwxcb.cn/news/detail-421619.html

到了這里,關(guān)于Java文件字符流和字節(jié)流中的實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 頭歌:Java高級(jí)特性 - IO流 (答案+詳細(xì)注釋)第1關(guān):什么是IO流+第2關(guān):字節(jié)流-輸入輸出+第3關(guān):字符流 - 輸入輸出+第4關(guān):復(fù)制文件

    頭歌:Java高級(jí)特性 - IO流 (答案+詳細(xì)注釋)第1關(guān):什么是IO流+第2關(guān):字節(jié)流-輸入輸出+第3關(guān):字符流 - 輸入輸出+第4關(guān):復(fù)制文件

    目錄 第1關(guān):什么是IO流 第2關(guān):字節(jié)流-輸入輸出 第3關(guān):字符流 - 輸入輸出 第4關(guān):復(fù)制文件

    2024年02月10日
    瀏覽(96)
  • java基礎(chǔ)入門-19-【IO(字節(jié)流&字符流)】

    java基礎(chǔ)入門-19-【IO(字節(jié)流&字符流)】

    生活中,你肯定經(jīng)歷過這樣的場(chǎng)景。當(dāng)你編輯一個(gè)文本文件,忘記了 ctrl+s ,可能文件就白白編輯了。當(dāng)你電腦上插入一個(gè)U盤,可以把一個(gè)視頻,拷貝到你的電腦硬盤里。那么數(shù)據(jù)都是在哪些設(shè)備上的呢?鍵盤、內(nèi)存、硬盤、外接設(shè)備等等。 我們把這種數(shù)據(jù)的傳輸,可以看做

    2024年02月07日
    瀏覽(14)
  • Java通過文件流和文件地址下載文件

    Java通過文件流和文件地址下載文件

    如何使用 MultipartFile 進(jìn)行文件上傳、下載到本地,并返回保存路徑呢: 用于在 Spring Boot 應(yīng)用中獲取文件流,然后處理上傳的文件,將文件保存到指定目錄并返回保存的文件路徑。下面對(duì)代碼的各個(gè)部分進(jìn)行簡要介紹: 上傳目錄設(shè)置 :在這個(gè)示例中, UPLOAD_DIR 常量用于定義上

    2024年02月12日
    瀏覽(27)
  • Java文件導(dǎo)入接口多參數(shù)寫法 (POST方法同時(shí)支持接收文件流和其他參數(shù))

    Java文件導(dǎo)入接口多參數(shù)寫法 (POST方法同時(shí)支持接收文件流和其他參數(shù))

    使用表單方式進(jìn)行傳輸,需要注意其他參數(shù)需要使用 @RequestPart 注解進(jìn)行接收,因?yàn)樵?post 方法中表單傳輸使用@RequestParam 接收 json 格式默認(rèn)視為字符串類型,接口無法映射對(duì)應(yīng)實(shí)體類 @RequestParam 依賴Converter or PropertyEditor進(jìn)行數(shù)據(jù)解析, @RequestPart參考’Content-Type’ header,依賴

    2024年02月16日
    瀏覽(32)
  • vue使用文件流和url下載文件

    // 改為使用后臺(tái)返回 url 下載文件 方法1:這個(gè)會(huì)導(dǎo)致在點(diǎn)擊下載按鈕的時(shí)候,頁面會(huì)跳轉(zhuǎn)到奇怪的url。 window.location.href = row.downloadUrl 方法2:點(diǎn)擊下載按鈕,不會(huì)在新窗口打開。 const downloadRes = async () = { ? ? ? ? let response = await fetch(row.downloadUrl) ? ? ? ? let blob = await respons

    2023年04月15日
    瀏覽(29)
  • Vue 3 中的極致防抖/節(jié)流(含常見方式防抖/節(jié)流)

    Vue 3 中的極致防抖/節(jié)流(含常見方式防抖/節(jié)流)

    各位朋友你們好呀。今天是立春,明天就是正月十五元宵節(jié)了,這種立春 + 元宵相隔的時(shí)候,可是很難遇到的,百年中就只有幾次。在這提前祝大家元宵快樂。 今天給大家?guī)淼氖?Vue 3 中的極致防抖/節(jié)流(含常見方式防抖/節(jié)流) 這篇文章,文章中不僅會(huì)講述原來使用的防

    2024年02月01日
    瀏覽(17)
  • flutter開發(fā)實(shí)戰(zhàn)-防抖Debounce與節(jié)流Throttler實(shí)現(xiàn)

    flutter開發(fā)實(shí)戰(zhàn)-防抖Debounce與節(jié)流Throttler實(shí)現(xiàn) 在開發(fā)中,經(jīng)常遇到某些按鈕或者界面操作需要做防抖或者節(jié)流操作。這里記錄一下實(shí)現(xiàn)。 防抖Debounce 當(dāng)有可能在短時(shí)間內(nèi)對(duì)一個(gè)方法進(jìn)行多次調(diào)用時(shí),需要防抖,并且希望只有最后一次調(diào)用真正調(diào)用目標(biāo)方法。因此,基本上每個(gè)

    2024年02月07日
    瀏覽(17)
  • Java中的字符串

    Java中的字符串

    目錄 一、簡介 二、字符串定義 2.1 直接定義字符串 2.2 通過使用 String 類的構(gòu)造方法來創(chuàng)建字符串 三、如何使用Java API幫助文檔 3.1 幫助文檔下載地址 3.2 幫助文檔使用 3.2 中文幫助文檔 四、 String字符串和int、double、float 的相互轉(zhuǎn)換 4.1 String 轉(zhuǎn)int 4.2 String 轉(zhuǎn)Double、Float 4.3 int轉(zhuǎn)

    2024年02月05日
    瀏覽(18)
  • Java中的字符串替換

    在Java中,String 類提供了 3 種字符串替換方法,分別是 replace()、replaceFirst() 和 replaceAll(),下面我們就來詳細(xì)看一下三種的用法! ????下面這套 Java300集 視頻專門為零基礎(chǔ)而制,適合準(zhǔn)備入行Java開發(fā)的零基礎(chǔ),視頻中穿插多個(gè)實(shí)戰(zhàn)項(xiàng)目。每一個(gè)知識(shí)點(diǎn)都講解的通俗易懂,由

    2024年02月11日
    瀏覽(27)
  • 字節(jié)流及存放本地文件上傳和下載文件

    字節(jié)流及存放本地文件上傳和下載文件

    之前的文章有寫過 vue+springboot使用文件流實(shí)現(xiàn)文件下載 實(shí)現(xiàn)如何通過 的形式進(jìn)行下載文件 但是它對(duì)于很多業(yè)務(wù)場(chǎng)景相對(duì)適用性不是很廣泛。 以及 elementUI加springboot實(shí)現(xiàn)上傳excel文件給后端并讀取excel 也只能是通過elementui的元素類型進(jìn)行上傳。 因此,本次文章將通過兩種方式

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包