public class EncodeStream_6 { 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(); } }
/* 编码:字符串变成字节数组。 解码:字节数组变成字符串。 String-->byte[]; str.getBytes(charsetname); byte[] -->String; new String(byte[],charsetName); */ public class EncodeDemo_7 { public static void main(String[] args) throws UnsupportedEncodingException { /* String s = "你好"; byte[] b1 = s.getBytes("UTF-8"); System.out.println(Arrays.toString(b1)); String s1 = new String(b1,"UTF-8"); System.out.println("s1="+s1); */ //出现乱码解决方法 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); //乱码再进行编码一次,所得再解码一次 //对s1进行ISO8859-1编码 byte[] b2 = s1.getBytes("utf-8"); //utf-8与gbk都识别中文导致此方法不可以用 System.out.println(Arrays.toString(b2)); String s2 = new String(b2,"GBK"); System.out.println("s2="+s2); } }
/*
有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括姓名,三门成绩),
输入的格式,如,zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件“stud.txt”中。
思路:
1、描述学生对象。
2、定义一个可以操作学生对象的工具类。
思想:
1、通过获取键盘录入一行数据,并将该行数据中信息取出封装成学生对象。
2、因为学生对象有很多,那么就需要存储,使用到集合,因为要对学生的总分排序,
所以可以使用TreeSet
3、将集合的信息写入到一个文件中。
*/
class Student implements Comparable<Student> { private String name; private int ma,cn,en; private int sum; Student(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(Student s) { int num = new Integer(this.sum).compareTo(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("类型不匹配"); Student s = (Student)obj; return this.name.equals(s.name) && this.sum==sum; } public String toString() { return "student["+name+","+ma+","+cn+","+en+']'; } } class StudentInfoTool { public static Set<Student> getStudent() throws NumberFormatException, IOException { return getStudent(null); } public static Set<Student> getStudent(Comparator<Student> cmp) throws NumberFormatException, IOException { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; Set<Student> stus = null; if(cmp==null) stus = new TreeSet<Student>(); else stus = new TreeSet<Student>(cmp); while((line=bufr.readLine())!=null) { if("over".equals(line)) break; String[] info = line.split(","); Student stu = new Student(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<Student> stus) throws IOException { BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt")); for(Student stu : stus) { bufw.write(stu.toString()+" "); bufw.write(stu.getSum()+""); bufw.newLine(); bufw.flush(); } bufw.close(); } } public class StudentInfoTest_9 { public static void main(String[] args) throws NumberFormatException, IOException { Comparator<Student> cmp = Collections.reverseOrder(); Set<Student> stus = StudentInfoTool.getStudent(cmp); StudentInfoTool.write2File(stus); } }