美文网首页Java
Java IO流(转换流的字符编码)

Java IO流(转换流的字符编码)

作者: 一亩三分甜 | 来源:发表于2019-10-03 21:38 被阅读0次

    编码:字符串变成字节数组,解码:字节数组变成字符串。String-->byte[];str.getBytes[charsetName];byte[] --> String:new String(byte[],charsetName);

    import java.io.*;
    
    public class EncodeStream {
        public static void main(String[] args) throws IOException
        {
    //        writeText();
            readText();
        }
        public static void readText() throws IOException
        {
            InputStreamReader isr = new InputStreamReader(new FileInputStream("utf.txt"),"UTF-8");
            char[] buf = new char[10];
            int len = isr.read(buf);
            String str = new String(buf,0,len);
            System.out.println(str);
            isr.close();
        }
        public static void writeText() throws IOException
        {
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("utf.txt"),"UTF-8");
            osw.write("你好");
            osw.close();
        }
    }
    //输出
    你好
    
    import java.io.*;
    
    public class EncodeStream {
        public static void main(String[] args) throws IOException
        {
    //        writeText();
            readText();
        }
        public static void readText() throws IOException
        {
            InputStreamReader isr = new InputStreamReader(new FileInputStream("utf.txt"),"GBK");
            char[] buf = new char[10];
            int len = isr.read(buf);
            String str = new String(buf,0,len);
            System.out.println(str);
            isr.close();
        }
        public static void writeText() throws IOException
        {
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("utf.txt"),"UTF-8");
            osw.write("你好");
            osw.close();
        }
    }
    //输出
    浣犲ソ
    

    编码解码格式错乱,没有对应。

    import java.io.IOException;
    import java.util.Arrays;
    
    public class EncodeDemo0 {
        public static void main(String[] args) throws IOException
        {
            String s = "哈哈";
            byte[] b1 = s.getBytes("GBK");
            System.out.println(Arrays.toString(b1));
            String s1 = new String(b1,"utf-8");
            System.out.println("s1="+s1);
            byte[] b2 = s1.getBytes("utf-8");
            System.out.println(Arrays.toString(b2));
            String s2 = new String(b2,"gbk");
            System.out.println("s2="+s2);
        }
    }
    //输出
    [-71, -2, -71, -2]
    s1=����
    [-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67]
    s2=锟斤拷锟斤拷
    
    public class EncodeDemo1 {
        public static void main(String[] args) throws Exception
        {
            String s = "联通";
            byte[] by = s.getBytes("gbk");
            for (byte b :by)
            {
                System.out.println(Integer.toBinaryString(b&255));
            }
        }
    }
    //输出
    11000001
    10101010
    11001101
    10101000
    

    110,10,0和1110,10,10符合utf-8编码格式。

    有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括姓名,三门课成绩),输入的格式:如:zhangsan,30,40,60计算出总成绩。并把学生的信息和计算出的总分数高低顺序存放在磁盘文件sud.txt中。

    • 1.描述学生对象。
    • 2.定义一个可操作学生对象的工具类。
      思想:
    • 1.通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
    • 2.因为学生有很多,那么就需要存储,使用到集合。因为要对学生的总分排序。所以可以使用TreeSet。
    • 3.将集合的信息写入到一个文件中。
    import java.io.*;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Set;
    import java.util.TreeSet;
    
    class Student12 implements Comparable<Student12>
    {
        private String name;
        private int ma,cn,en;
        private int sum;
        Student12(String name,int ma,int cn,int en)
        {
            this.name = name;
            this.ma = ma;
            this.cn = cn;
            this.en = en;
            sum = ma + cn + en;
        }
        public int compareTo(Student12 s)
        {
            int num = new Integer(this.sum).compareTo(new Integer(s.sum));
            if (num == 0)
                return this.name.compareTo(s.name);
            return num;
    
        }
        public String getName()
        {
            return name;
        }
        public int getSum()
        {
            return sum;
        }
        public int hashCode()
        {
            return name.hashCode()+sum*78;
        }
        public boolean equals(Object obj)
        {
            if (!(obj instanceof Student))
                throw new ClassCastException("类型不匹配");
            Student12 s = (Student12) obj;
            return this.name.equals(s.name) && this.sum == s.sum;
        }
        public String toString()
        {
            return "student["+name+", "+ma+", "+cn+", "+en+"]";
        }
    }
    class StudentInfoTool
    {
        public static Set<Student12> getStudents() throws IOException
        {
            return getStudents(null);
        }
        public static Set<Student12> getStudents(Comparator cmp)throws IOException
        {
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            Set<Student12> stus = null;
            if (cmp == null)
                stus = new TreeSet<Student12>();
            else
                stus = new TreeSet<Student12>(cmp);
            while ((line = bufr.readLine())!=null)
            {
                if ("over".equals(line))
                    break;
                String[] info = line.split(",");
                Student12 stu = new Student12(info[0],Integer.parseInt(info[1]),Integer.parseInt(info[2]),Integer.parseInt(info[3]));
                stus.add(stu);
            }
            bufr.close();
            return stus;
        }
        public static void write2File(Set<Student12> stus)throws IOException
        {
            BufferedWriter bufw = new BufferedWriter(new FileWriter("stusinfo.txt"));
            for (Student12 stu : stus)
            {
                bufw.write(stu.toString()+"\t");
                bufw.write(stu.getSum()+"");
                bufw.newLine();
                bufw.flush();
            }
            bufw.close();
        }
    }
    public class StudentInfoTest {
        public static void main(String[] args)throws IOException
        {
            Comparator<Student12> cmp = Collections.reverseOrder();
            Set<Student12> stus = StudentInfoTool.getStudents(cmp);
            StudentInfoTool.write2File(stus);
        }
    }
    //输入
    zhangsan,12,34,78
    lisi,14,34,78
    wangwu,34,56,78
    zhaoliu,54,64,87
    zhouqi,87,87,89
    over
    
    Snip20191003_5.png

    相关文章

      网友评论

        本文标题:Java IO流(转换流的字符编码)

        本文链接:https://www.haomeiwen.com/subject/xcodpctx.html