讀取的文件流如果是read(讀取字節(jié)流的時(shí)候,中文就會是亂碼)方法,所以現(xiàn)在全都是聽過readline方式進(jìn)行的讀取。舉例:
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比金水網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式金水網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋金水地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
可以通過BufferedReader 流的形式進(jìn)行流緩存,之后通過readLine方法獲取到緩存的內(nèi)容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時(shí)獲取到的bre就是整個(gè)文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最后一行不存在,為空結(jié)束循環(huán)
{
System.out.println(str);//原樣輸出讀到的內(nèi)容
};
bre.close(),//關(guān)閉流,否則bre流會一直存在,直到程序運(yùn)行結(jié)束。
除此之外,java文件讀取的時(shí)候有中文就很出現(xiàn)亂碼,通常獲取到的文件中通常都是“iso8859-1”格式,需要轉(zhuǎn)換為“UTF-8”格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");進(jìn)行下強(qiáng)制轉(zhuǎn)換后在進(jìn)行讀取即可。
備注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的強(qiáng)制轉(zhuǎn)換不成功,依次進(jìn)行這些格式的嘗試,肯定是可以解決問題的。
@Test
public?void?test333(){
String?a="青白";
try?{
byte[]?b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));
?
}?catch?(UnsupportedEncodingException?e)?{
e.printStackTrace();
}
}
//將byte數(shù)組轉(zhuǎn)成16進(jìn)制字符串
?public?static?String?bytesToHexFun1(byte[]?bytes)?{
char[]?HEX_CHAR?=?{'0',?'1',?'2',?'3',?'4',?'5',?
'6',?'7',?'8',?'9',?'a',?'b',?'c',?'d',?'e',?'f'};
//?一個(gè)byte為8位,可用兩個(gè)十六進(jìn)制位標(biāo)識
char[]?buf?=?new?char[bytes.length?*?2];
int?a?=?0;
int?index?=?0;
for(byte?b?:?bytes)?{?//?使用除與取余進(jìn)行轉(zhuǎn)換
if(b??0)?{
a?=?256?+?b;
}?else?{
a?=?b;
}
buf[index++]?=?HEX_CHAR[a?/?16];
buf[index++]?=?HEX_CHAR[a?%?16];
}
return?new?String(buf);
}
中心思想就是先轉(zhuǎn)成GB2312的byte數(shù)組,再轉(zhuǎn)成16進(jìn)制就可以了。
通過JDK1.6知道String類中g(shù)etBytes(”編碼“)方法可以講一個(gè)數(shù)用指定的編碼轉(zhuǎn)成一個(gè)字節(jié)數(shù)組,String中通過指定的 charset解碼指定的 byte 數(shù)組,構(gòu)造一個(gè)新的?String。代碼如下:
try{
String s = "java學(xué)習(xí)";
System.out.println(s);
String result = new String(s.getBytes("GB2312"),"iso-8859-1");
System.out.println(s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
擴(kuò)展資料:
getBytes() 方法有兩種形式:
1、getBytes(String charsetName):?使用指定的字符集將字符串編碼為 byte 序列,并將結(jié)果存儲到一個(gè)新的 byte 數(shù)組中。
2、getBytes():?使用平臺的默認(rèn)字符集將字符串編碼為 byte 序列,并將結(jié)果存儲到一個(gè)新的 byte 數(shù)組中。
參考資料:
百度百科-getBytes()
String name = user.getName();
try {
name = URLEncoder.encode(name, "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
user.setName(name);
呵呵,看我這個(gè),是本人原創(chuàng)。不管你是任何編碼都可以解決,唯一的缺點(diǎn)是效率稍微低了點(diǎn)(不過比樓上那個(gè)要快)。
思路:
1.首先在jsp頁面即客戶端用JavaScript將漢字處理成asc碼
2.服務(wù)端再將asc碼還原成原有的字符
JavaScript轉(zhuǎn)換代碼:
var s=document.getElementById("text").value;
var t="";
//將漢字轉(zhuǎn)換成ASCII碼,然后在服務(wù)器端里再根據(jù)ASCII碼轉(zhuǎn)換成相應(yīng)的字符
for(i=0;is.length;i++){
t+=s.charCodeAt(i)+" ";//將字符轉(zhuǎn)換成相應(yīng)的ASCII碼并用空格隔開;
}
java服務(wù)端還原:
String param=request.getParameter("param");
StringBuffer buf=new StringBuffer("");
String[] ss = param.split(" ");
for (int i = 0; i ss.length; i++) {
char c = (char) Integer.parseInt(ss[i].trim());
buf.append(c);
}
System.out.println("還原后的字符是:"+buf.toString());
----------------------
如果你再把轉(zhuǎn)換后的asc碼再加個(gè)數(shù)字或者減個(gè)數(shù)字就是一個(gè)簡單的加密,O(∩_∩)O~,希望對你有所幫助