本篇文章為大家帶來了關於java的相關知識,其中主要介紹了Java在創建文件時指定編碼的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,希望對大家有幫助。
推薦學習:《java影片教學》
前言:最近,學習了Java IO串流的相關的知識,想透過讀寫文件的方式練習和鞏固所學。在使用File類別建立檔案時,突然想到,我該如何指定檔案使用的編碼呢?進而想到,應該如何查看一個檔案的編碼呢?
一、問題分析
先去網路上找答案,結果如下:
FileInputStream fis=new FileInputStream(“xxxx.txt”); OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);
上面的程式碼大概意思是在寫入檔案時,寫入的字元使用UTF-8編碼,和我預想的不一樣,我想在建立文件的同時指定編碼。像下面這樣,
File myfile = new File("test.txt”, “UTF-8”); if (!myfile.exists()) myfile.createNewFile();
於是,我去查看Java API 8官方文檔,File沒有提供可以指定字元編碼的建構函數。
同時也沒提供set或get等其他存取字元字元編碼的方法,說明字元編碼不是檔案的固有屬性。像是檔案建立時間,檔案修改時間,是否可讀、可寫入、可執行,這些都是檔案的固有屬性,或是元訊息,它們是檔案的一部分。
二、字元編碼
我們知道,電腦中儲存的任何資訊都是01串,文字也不例外。
對於字元的處理包含兩個過程:編碼和解碼
#編碼:把字元"映射「到01字串
解碼:把01字串"映射「到字元
不同的字元編碼,例如GBK、UTF-8,編碼和解碼使用的規則不同。
對於同樣的文字字串:“中國”,使用UTF-8編碼保存,一般使用三個位元組保存一個漢字,(底層的01字串的16進位形式)。
使用GBK編碼儲存,使用兩個位元組表示一個漢字。
當我們在文字編輯器中寫好文字儲存時,編輯器會根據你設定的字元編碼類型將文字」對應「成01串。
你設定的字元類型,只是編輯器把文字編碼成成10串的轉換規則而已,並不是文字的屬性。
在編輯器開啟文字檔時,顯示的不是底層的01串,而是文字,是因為編輯器使用某種文字編碼,把01串解碼為字元。如果,解碼時,使用的字元編碼和編碼時的一致或相容,就可以正確顯示文字。如果解碼時,使用的字元編碼和編碼時的不一致或不相容,就會亂碼。
例如,我有一個文字檔案使用的是GBK編碼,內容是」明月幾時有“,
字元編碼不是檔案的固有屬性。
扯了這麼多,就是為了說明這一點:字元編碼就是解碼和編碼時用的規則,不是檔案的固有屬性。
我不禁產生疑惑,為什麼當初不把字元編碼設定為檔案屬性的一部分呢?假設可以設置,並且設定為GBK,那麼作業系統需要維護改功能。像一個文件是不可寫的,那麼有程式試圖寫文件,作業系統會拒絕寫入一樣,作業系統必須寫入的位元組必須是滿足GBK編碼要求,那麼每次寫入字節,作業系統都需要檢查該位元組的合法性,這需要非常大的效能開銷,甚至是無法實現的,因為有些特殊位元組即可以表示GBK,也可以表示UTF-8,是有歧義的。在說,做這一些的意義是什麼,為了編輯器可以在開啟檔案的時候,可以根據編碼屬性選擇正確的編碼嗎?沒有必要,智慧的編輯器,可以根據內容的前幾個字節,推斷出你的01串使用了什麼編碼。另外,你也可以手動設定解碼所用的字元編碼。
三 、問題解決
在建立檔案的時候,無法指定檔案的編碼。在將文字寫入(例如文字編輯器的Ctrl S
儲存,本質執行的就是寫入操作)檔案時,可以選擇將文字轉換為01串的編碼規則。
針對Java程序,程式碼如下,正是文章最開始提及的程式碼:
FileInputStream fis=new FileInputStream(“xxxx.txt”); OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);
推薦學習:《java影片教學》
以上是Java在建立文件時指定編碼的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境