1. 程式人生 > >java讀取文字檔案異常

java讀取文字檔案異常

今天讀取一個文字檔案的時候出現一個特殊字元如下圖
這裡寫圖片描述
前面的-複製不出來。複製整個到idea編輯器裡面 出現的是

uFEFF20170509

百度搜了一下這個uFEFF 原因如下
在Windows下用文字編輯器建立的文字檔案,如果選擇以UTF-8等Unicode格式儲存,會在檔案頭(第一個字元)加入一個BOM標識。
這個標識在Java讀取檔案的時候,不會被去掉,而且String.trim()也無法刪除。如果用readLine()讀取第一行存進String裡面,這個String的length會比看到的大1,而且第一個字元就是這個BOM。
這種情況會造成一些麻煩,比如在讀取ini檔案的時候,如果想判斷第一行是不是以“[”開頭就無法正確判斷。
幸好,Java在讀取Unicode檔案的時候,會統一把BOM變成“\uFEFF”,這樣的話,就可以自己手動解決了(判斷後,用substring()或replace()去除掉這個BOM):

if(line.startsWith("\uFEFF")){ //line = line.substring(1); line = line.replace("\uFEFF", ""); }

什麼是BOM?BOM = Byte Order MarkBOM是Unicode規範中推薦的標記位元組順序的方法。比如說對於UTF-16,如果接收者收到的BOM是FEFF,表明這個位元組流是Big-Endian的;如果收到FFFE,就表明這個位元組流是Little-Endian的。UTF-8不需要BOM來表明位元組順序,但可以用BOM來表明“我是UTF-8編碼”。BOM的UTF-8編碼是EF BB BF(用UltraEdit開啟文字、切換到16進位制可以看到)。所以如果接收者收到以EF BB BF開頭的位元組流,就知道這是UTF-8編碼了。
所有的BOM在C/C++/Java中都被處理為”\uFEFF”,參考:

http://www.fileformat.info/info/unicode/char/feff/index.htm
Wikipedia關於POM的說明介紹:https://en.wikipedia.org/wiki/Byte_order_mark
(原創文章,轉載請註明轉自Clement-Xu的部落格)
版權宣告:本文為原創文章,轉載請註明轉自Clement-Xu的csdn部落格。

相關推薦

java讀取文字檔案異常

今天讀取一個文字檔案的時候出現一個特殊字元如下圖 前面的-複製不出來。複製整個到idea編輯器裡面 出現的是 uFEFF20170509 百度搜了一下這個uFEFF 原因如下 在Windows下用文字編輯器建立的文字檔案,如果選擇以UTF-8等U

Java讀取文字檔案中文亂碼問題

最近遇到一個問題,Java讀取文字檔案(例如csv檔案、txt檔案等),遇到中文就變成亂碼。讀取程式碼如下: List<String> lines=new ArrayList<String>(); BufferedReader br = new

java讀取文字檔案到mysql資料庫【示例2】

1、java讀取文字檔案到mysql資料庫【示例】:把手機號碼歸屬地檔案:安徽聯通.txt讀取到資料庫school的phonenumber表中 2、安徽聯通.txt內容如下: 13003000000-13003009999-合肥 13003010000-130030299

java讀取文字檔案到mysql資料庫【示例1】

1、java讀取文字檔案到mysql資料庫【示例】:把手機號碼歸屬地檔案:安徽聯通.txt讀取到資料庫school的phonenumber表中 2、安徽聯通.txt內容如下: 13013100000-13013119999-馬鞍山 13013120000-130131

java基礎BufferedReader類(提高字元流讀取文字檔案的效率)IO流(位元組流/字元流)

String nstr=sb.toString().replace("{name}", “ok”).replace("{sex}", “男”).replace("{hobby}", “陶笛”);boolean exists( ) 判斷檔案或目錄是否存在 bool

java檔案操作 (1)——判別指定檔案是否存在,讀取檔案修改時間和大小,讀取文字檔案內容,向文字檔案中寫入指定內容

任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某

java快速讀取文字檔案最後一行資料內容,文字檔案非常大

http://www.iteye.com/problems/42748 public static void main(String[] args) throws Exception { File file = new File("E:/a.txt"); // 100M

java讀取csv檔案內容(逗號分隔、回車換行文字

最近在做專案時需要每日更新大小額支援的銀行列表資訊,該檔案從核心下載,並使用java專案解析放到資料庫中,該檔案是文字檔案,一行為一條記錄,記錄中以逗號分隔欄位,欄位以雙引號包裹,起初以這種規則自己寫一個小程式也能用,於是寫了幾句程式碼,確實能執行解析出大部分內容,但有些特

java讀取pdf檔案的圖片和文字內容

引用的jar包: pdfbox-1.8.13.jar fontbox-1.8.13.jar public static void main(String[] args) {PDFReader pdfReader1 = new PDFReader();pdfReader1.

讀取文字檔案內容(Java FileChannel)

import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * 讀取文字檔案內容(Ja

java讀取本地檔案失敗終極解決方案FileNotFoundException等一系列相關異常解決

本篇文章主要是解決在工作或學習中遇到的無法操作本地檔案顯示資料夾路徑無效或無許可權等問題的解決  首先 上一張圖 如上圖所示 我的檔名路徑明明是正確的 但是卻顯示該檔案不存在 有的人可能檔案分隔符不

Java中用FileInputStream讀取文字檔案

FileInputStream類,俗稱檔案輸入流,他的作用是將文字檔案中的資料輸入到記憶體中。他是一個位元組輸入流,是InputStream抽象類的一個子類。使用FileInputStream類讀寫文字檔案分為以下幾個步驟:1.引入相關的類import java.io.Fil

Java按行讀取文字檔案

上年紀了,記性差了,寫在這裡別忘了  FileReader reader = new FileReader("D://lbhdev//feisanWeb//src//265_url.txt");  BufferedReader br = new BufferedReader(

java讀取文字檔案時出現中文字元亂碼的解決方法

1.首先將要讀取的文字檔案的編碼格式設定為UTF-82.使用InputStreamReader類取讀取檔案,因為它的構造方法中可以指定字符集,將它的字符集指定為UFT-8的格式。例:BufferedReader buff = new BufferedReader(new In

Java文字檔案讀取(按行讀取)

在之前的學習過程中,經常會遇到將文字檔案中的資料讀取到陣列或其他資料結構中。每次遇到,總是在網上搜索程式碼解決,解決之後並沒有總結複習,因此在下一次遇到同樣的問題時,又重複之前的過程。這樣周而復始,並沒有將知識積累下來,其實是把自己給坑了(對此深有體會)。因此經過兩天的學習,

java讀取json檔案並轉換為String

import java.io.*; public class Output { //測試 public static void main(String[] args){ String json = "null"; try { json = readJsonData("I

什麼是BOM?php讀取文字檔案 會把bom讀入 陣列

###File()函式讀取utf8 的文字檔案 會把bom讀入 陣列。導致mysql搜尋 不到內容 可以對讀取後的字元 $result = trim($result, "\xEF\xBB\xBF"); 1.什麼是BOM? BOM是用來判斷文字檔案是哪一種Unic

C 讀取文字檔案和C 寫文字檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

面試題目java讀取文字內容方式

面試題目java讀取文字內容方式二種方式 第一種通過FileInputStream()方式讀取 FileInputStream fis = new FileInputStream("a.txt"); //建立流物件 byte[] arr = new byte[4];

java讀取excel檔案內容,並將讀取到的內容寫入到另一檔案

需要匯入的jar包下載地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 程式碼:ReadExcel.java //信1605-3 20163432 張運濤 package domain; import java.io.File; im