浅谈从文本中读入中文
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
  • 标签:读中文 
  • Re:浅谈从文本中读入中文
    mingjava - BY - 2008-4-16 5:40:00
    mingjava读取的时候 最好一块一块的读取 一个字节一个字节效率有些低
    发表评论:

    Powered by Oblog.