zoukankan      html  css  js  c++  java
  • Java中读取txt文件中中文字符时,出现乱码的解决办法

      这是我写的一个Java课程作业时,遇到的问题。

      问题描述:

        我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组。

      我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码。

      最后各种检查排错得到原因如下:

      (1)最好先检查你的Eclipse中的Window->Preference->General->WorkSpace中的字符编码格式是什么,最后选成UTF-8格式的。

          然后右键你的工程在弹出的菜单项中选择Resource查看编码格式,也把它改成UTF-8格式的。

      (2)再将InputStreamReader类对象 in2reader 中使用System.out.println(in2reader.getEncoding());

          来查看编码格式。而且使用读取txt文件中的内容最好是按照字符流进行读取使用BufferReader,它里面有很方便的按行读取的函数readLine(),返回的是换行符前的字符串;

      (3)使用Notepad++来对你的txt文件进行文件编码格式的选择,在菜单栏下的格式选项中。注意一定要选成UTF-8无BOM格式编码。

      (4)运行你的程序就正确输出啦!

      总结:其实这个问题最本质的解决办法的就是要把握好,文件本身格式的编码格式以及Java程序读取时的格式,把握好这一点,这个小问题就可以轻而易举地解决啦。

      

        下面是我的参考示例代码:

      1 /*
      2 *从txt文件中读取数据存放到学生类数组中
      3 */
      4 
      5 
      6 package woshijpf;
      7 
      8 import java.io.BufferedInputStream;
      9 import java.io.BufferedOutputStream;
     10 import java.io.BufferedReader;
     11 import java.io.File;
     12 import java.io.FileInputStream;
     13 import java.io.FileNotFoundException;
     14 import java.io.FileOutputStream;
     15 import java.io.IOException;
     16 import java.io.InputStreamReader;
     17 
     18 
     19 public class Read_Stu_Info {
     20     
     21     private int stu_num = 0;
     22     private File r_file,w_file;  
     23     private BufferedInputStream bin_r;  
     24     private BufferedOutputStream bout_w; 
     25     private InputStreamReader in2reader;
     26     private BufferedReader br;
     27     private Student[] stu_arr = null;
     28     private String[] stuStrings= new String[3];   
     29     private int count = 0;  
     30     private String numString;   
     31     private Integer numInteger;  
     32     
     33     public Read_Stu_Info(String r_filename,String w_filename)
     34     {
     35         r_file = new File(r_filename);   
     36         if(r_file.exists()==false)
     37         {
     38             try {
     39                 r_file.createNewFile();
     40             } catch (IOException e) {
     41                 // TODO Auto-generated catch block
     42                 e.printStackTrace();
     43             }
     44         }
     45         
     46         w_file = new File(w_filename);   
     47         if(w_file.exists()==false)
     48         {
     49             try {
     50                 r_file.createNewFile();
     51             } catch (IOException e) {
     52                 // TODO Auto-generated catch block
     53                 e.printStackTrace();
     54             }
     55         }
     56         
     57         try {
     58             bin_r = new BufferedInputStream(new FileInputStream(r_file));
     59             in2reader = new InputStreamReader(bin_r);
     60             br = new BufferedReader(in2reader);
     61             
     62             //System.out.println(in2reader.getEncoding());
     63             
     64             bout_w = new BufferedOutputStream(new FileOutputStream(w_file));
     65         } catch (FileNotFoundException e) {
     66             // TODO Auto-generated catch block
     67             e.printStackTrace();
     68         }
     69         
     70         try {
     71             numString = br.readLine();
     72             numInteger = Integer.valueOf(numString);
     73             stu_num = numInteger.intValue();
     74             System.out.println("学生人数: "+stu_num);
     75         } catch (IOException e) {
     76             // TODO Auto-generated catch block
     77             e.printStackTrace();
     78         }
     79         
     80         stu_arr = new Student[stu_num];   
     81         
     82     }
     83     
     84     public int Getnum()
     85     {
     86         return stu_num;
     87     }
     88     
     89     public void GetInfo()          
     90     {
     91         String temp = null;  
     92         try {
     93             while((temp = br.readLine())!=null)
     94             {
     95                 stuStrings = temp.split(" ");
     96                 stu_arr[count++] = new Student(stuStrings[0], stuStrings[1], stuStrings[2]);
     97             }
     98         } catch (IOException e) {
     99             // TODO Auto-generated catch block
    100             e.printStackTrace();
    101         }
    102         
    103     }
    104     
    105 
    106     public Student[] GetArray()
    107     {
    108         return stu_arr;
    109     }
    110     
    111     public int GetStu_num()
    112     {
    113         return count;
    114     }
    115 
    116 }
    /*
    *学生类
    */
    package woshijpf;
    
    public class Student {
        
        private String  name;
        private String  stunum;
        private String  score;
        
        public Student(String name,String stunum,String score)
        {
            this.name = name;
            this.stunum = stunum;
            this.score = score;
        }
        
        public String getName()
        {
            return name;
        }
        
        public String getNum()
        {
            return stunum;
        }
        
        public String getScore()
        {
            return score;
        }
        
        public void Print()
        {
            System.out.println("学生信息: ");
            System.out.println("姓名: "+name+"  学号:  "+stunum+" 分数:  "+score);
        }
    
    }
     1 /*
     2 *测试主函数类
     3 */
     4 package woshijpf;
     5 
     6 public class Test_4 {
     7     
     8     public static void main(String[] args)
     9     {    
    10         /*
    11          * 题目五程序
    12          */
    13         Student[] stu_array = null;
    14         int count;
    15         
    16         Read_Stu_Info rsi = new Read_Stu_Info("a.txt", "a.dat");
    17         rsi.GetInfo();
    18         stu_array = rsi.GetArray();
    19         count = rsi.GetStu_num();
    20         for(int i=0;i<count;i++)
    21         {
    22             stu_array[i].Print();
    23         }
    24         
    25         
    26     }
    27 
    28 }
  • 相关阅读:
    DML、DDL、DCL的区别
    exe文件图标不见了,教你win10桌面EXE文件图标不见了如何解决
    js获取近十二个月
    关于tomcat中的三个端口的作用及其相关细节
    js判断对象是否为空对象的几种方法
    解决myeclipse validation验证javascript导致速度变慢的现象
    jQuery基础教程之is()方法和has() 方法
    2015年6月发布了ECMAScript6版本
    http系列--从输入 URL 到页面加载完成的过程
    一篇文看懂Hadoop
  • 原文地址:https://www.cnblogs.com/woshijpf/p/3688798.html
Copyright © 2011-2022 走看看