浅谈从文本中读入中文
fengzheng - BY - 2008-4-15 9:26:00
前些天,有人问,从文本里读入的汉字显示出来是乱码,其实问题就是出在了编码上.
有的人在转化时用了UTF-8编码协议,可是却忘了更改目标资源的编码格式.
其实,原理并不难,我写了一段代码,希望对大家有点用处.
import java.io.*;
public class ReadTxt {
/*Task: 从文本里读取一行
* @author Jarod姜赫
* @param num 行数;(此参数需要大于1)
* @param name 文本的名字;
* @return string 指定文本中的一行;
*/
public String readLines(int num,String name)
{
int count = 0; //当前行的计数器,记录现在读到哪一行了
int nextByte = 0;//从输入流读取的下一个数据字节
boolean whetherCycle = true;//是否停止循环
InputStream inStream = getClass().getResourceAsStream(name);//建立一个输入流,name为资源的名字
while( whetherCycle )
{
try
{
nextByte = inStream.read();
}
catch(Exception e)
{
e.printStackTrace();
}
if(nextByte == -1)//到流的末尾结束
{
whetherCycle = false;//停止循环
}
else if(nextByte == '\n' )//当读到字符'\n'时(此时说明在文本里换行了)
{
count ++;//行的计数器加一
}
if(count == (num-1))//当读到目标行时(这里的参数num是以1为开始的)
{
whetherCycle = false;//停止循环(此时,之后再读入的就是要得到的行了)
}
}
byte[] words = new byte[256];//初始化一个你认为足够装下一行的字节数组
int i = 0;
boolean whetherCycle2 = true;
while(whetherCycle2)
{
try
{
nextByte = inStream.read();
}
catch(Exception e)
{
e.printStackTrace();
}
if(nextByte != '\n')//如果还没换行
{
words[ i ]= (byte)nextByte;//依次放入数组中
i++;
}
else
{
whetherCycle2 = false;
}
}
//到现在为止,所要的字符串已经在字节数组words里了
String word = "";
try
{
word = new String(words,0,i,"UTF-8");//注意这里用的是"utf-8"编码,所以文本的对应编码格式应该也为utf-8
word = word.trim();//忽略前导空白和尾部空白
inStream.close();
inStream = null;
}
catch(Exception e)
{
e.printStackTrace();
}
return word;
}
}
在 记事本 中的 另存为 里 可以选择 UTF-8
参数name 要将文件的后缀也写上 如 : textWord.txt
阅读全文 | 回复(1) | 引用通告 | 编辑
- 上一篇:移植SEM600i(M608c)问题
- 下一篇:手机开发平台指南、教程和资料介绍
mingjava - BY - 2008-4-16 5:40:00
Calendar | 日 历
New BLog | 日 志
New Reply | 回 复
New message | 留 言
User Login | 登 陆
Search | 搜 索
BLog Info | 信 息
My Links | 收 藏
