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

java獲取本地文件的多種方式實(shí)現(xiàn)與比較

 更新時(shí)間:2023年11月17日 11:24:27   作者:deelless  
這篇文章主要為大家詳細(xì)介紹了java獲取本地文件的多種方式實(shí)現(xiàn)與結(jié)果比較,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

示例代碼

廢話少說,上測(cè)試代碼

package com.example.demo.utils;

import java.io.*;
import java.util.Scanner;

public class TestCode {

	public static void main(String[] args) throws Exception,IOException{
//		testCode();
//		getFileContent();
//		getFileContentTwo();
		getFileContentThree();
	}

	//方法一
	public static void getFileContent() throws IOException{
		FileReader fr = new FileReader("E:\\testfile\\test_utf8.txt");
		BufferedReader br = new BufferedReader(fr);
		while(br.ready()){
			System.out.println(br.readLine());
		}
	}

	//方法二
	public static void getFileContentTwo() throws IOException{
		String encoding="GBK";
		File file=new File("E:\\testfile\\test.txt");
		//判斷文件是否存在
		if(file.isFile() && file.exists()) {
			//考慮到編碼格式
			InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
			BufferedReader bufferedReader = new BufferedReader(read);
			String lineTxt = null;
			while ((lineTxt = bufferedReader.readLine()) != null) {
				System.out.println(lineTxt);
			}
			read.close();
		}else {
			System.out.println("該文件不存在");
		}
	}

	//方法三
	public static void getFileContentThree() throws IOException{
		Scanner in = new Scanner(new File("E:\\testfile\\test_utf8.txt"));
		while (in.hasNextLine()) {
			System.out.println(in.nextLine());
		}
	}

	/**
	 *
	 *@param:
	 *@return:獲得txt文件編碼格式
	 *@Date:2019/8/26
	 */
	public static void testCode() throws Exception{
		BufferedInputStream bin=new BufferedInputStream(new FileInputStream("E:\\testfile\\test.txt"));
		int p=(bin.read()<<8)+bin.read();
		String code=null;
		switch (p){
			case 0xefbb:
				code="UTF-8";
				break;
			case 0xfffe:
				code="Unicode";
				break;
			case 0xfeff:
				code="UTF-16BE";
				break;
			default:
				code="GBK";
		}
		System.out.println(String.format("測(cè)試文件的編碼格式是:"+code));
	}

}

相同點(diǎn):

三種方法都可以讀取到本地磁盤下的tex文件內(nèi)容

三種方法讀取編碼格式為utf-8的文件,都可以正常輸出

區(qū)別:

方法一、方法三輸出編碼格式為GBK的文件,會(huì)有問題 ———— 方法一控制臺(tái)輸出的文件內(nèi)容會(huì)亂碼、方法三則什么也不輸出

方法二讀取編碼格式為GBK的文件,可以正常輸出

測(cè)試結(jié)果

方法一、方法二、方法三

文件編碼:utf_8

方法一

文件編碼:GBK

方法二

文件編碼:GBK

方法三

文件編碼:GBK

概念

計(jì)算機(jī)中文件都用一堆二進(jìn)制的數(shù)字 0 、1保存的。文件的編碼格式指的是這個(gè)文件的內(nèi)容和0、 1的一個(gè)對(duì)應(yīng)關(guān)系。因此,可以得到兩個(gè)結(jié)論:

1.一個(gè)文件的編碼格式有且僅有一種。(要么是utf-8,要么是gbk,要么是其他編碼,不能幾種同時(shí)存在)

2.文件的編碼格式可以改變。

分析:讀取文件亂碼的原因是什么?

文件的編碼格式指的是一個(gè)對(duì)應(yīng)關(guān)系。對(duì)應(yīng)關(guān)系錯(cuò)了,肯定拿不到文件中的內(nèi)容。所以亂碼的根源就是保存文件的編碼格式和讀取文件的編碼格式不同。

知道了文件亂碼的原因就好解決問題了

java中只有在轉(zhuǎn)換流中才能設(shè)置讀取流文件中編碼格式。(代碼示例詳見上述方法二)

其他字節(jié)流,字符流讀取的文件格式都是默認(rèn)的utf-8,無法設(shè)置編碼格式。這種方法讀取utf-8的文件不會(huì)有問題,一旦非utf-8就會(huì)出錯(cuò)。

所以,上面方法二雖然代碼量最多,但優(yōu)勢(shì)也顯而易見——健壯性、穩(wěn)定性、擴(kuò)展性都優(yōu)于方法一、三。

補(bǔ)充:

字符流:txt文件。該流只能處理字符,但處理字符速度很快

字節(jié)流:txt文件,Excel文件,word文件、圖片、視頻等文件。可以處理所有以bit為單位儲(chǔ)存的文件,也就是說可以處理所有的文件,但是在處理字符上的速度不如字符流

除了字符流和字節(jié)流之外,還有轉(zhuǎn)換流:

  • InputStreamReader:
  • OutputStreamWriter:

轉(zhuǎn)換流可以把字節(jié)流轉(zhuǎn)化為字符流,可以解決編碼格式和解碼格式不一致的問題。

字符流文件和字節(jié)流文件的區(qū)別在于計(jì)算機(jī)用來保存文件的二進(jìn)制編碼0 、1的位數(shù)。

字符流就是一個(gè)字符由一個(gè)8位數(shù)的二進(jìn)制數(shù)表示;

字節(jié)流表示一個(gè)基本存儲(chǔ)單元的二進(jìn)制數(shù)可能是8位,也可能是16位,32位等。

因此字符流可以理解為特殊的字節(jié)流。

以上就是java獲取本地文件的多種方式實(shí)現(xiàn)與比較的詳細(xì)內(nèi)容,更多關(guān)于java獲取本地文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中class和Class的區(qū)別示例詳解

    Java中class和Class的區(qū)別示例詳解

    class 是java的關(guān)鍵字,在聲明java類時(shí)使用,Class是java JDK提供的一個(gè)類,完整路徑為java.lang.Class,下面這篇文章主要給大家介紹了關(guān)于Java中class和Class區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • SpringBoot+ruoyi框架文件上傳和下載的實(shí)現(xiàn)

    SpringBoot+ruoyi框架文件上傳和下載的實(shí)現(xiàn)

    文件的上傳和下載功能,是項(xiàng)目開發(fā)過程中比較常見的業(yè)務(wù)需求,本文主要介紹了SpringBoot+ruoyi框架文件上傳和文件下載的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    在我們平時(shí)開發(fā)中,dto、vo、entity之間的相互轉(zhuǎn)換是很頻繁的操作,這篇文章就簡(jiǎn)單記錄一下在平時(shí)開發(fā)中SpringBoot的轉(zhuǎn)換方法,希望對(duì)大家有所幫助
    2025-01-01
  • 淺談Spring boot cache使用和原理

    淺談Spring boot cache使用和原理

    這篇文章主要介紹了淺談Spring boot cache使用和原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Servlet關(guān)于RequestDispatcher的原理詳解

    Servlet關(guān)于RequestDispatcher的原理詳解

    這篇文章主要介紹了Servlet關(guān)于RequestDispatcher的原理詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • spring拓展之如何定義自己的namespace

    spring拓展之如何定義自己的namespace

    這篇文章主要介紹了spring拓展之如何定義自己的namespace方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • python實(shí)現(xiàn)高斯模糊及原理詳解

    python實(shí)現(xiàn)高斯模糊及原理詳解

    高斯模糊是一種常見的模糊技術(shù),本文主要介紹了python實(shí)現(xiàn)高斯模糊及原理詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人聊天工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組)

    Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組)

    這篇文章主要介紹了Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Shiro中session超時(shí)頁面跳轉(zhuǎn)的處理方式

    Shiro中session超時(shí)頁面跳轉(zhuǎn)的處理方式

    這篇文章主要介紹了Shiro中session超時(shí)頁面跳轉(zhuǎn)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

武汉市| 长乐市| 平昌县| 黑龙江省| 磐石市| 九寨沟县| 林州市| 全椒县| 奇台县| 华蓥市| 贵南县| 尉犁县| 芒康县| 湘潭县| 汨罗市| 偃师市| 兴仁县| 栾川县| 星子县| 泰兴市| 固镇县| 疏附县| 湄潭县| 广东省| 河北区| 肃北| 内丘县| 永平县| 灌南县| 曲周县| 深圳市| 南安市| 潢川县| 卓资县| 洮南市| 阜康市| 合水县| 仙居县| 海南省| 喀喇| 昭通市|