黑马程序员-day21综合练习

来源:互联网 发布:javascript 有日志吗 编辑:程序博客网 时间:2024/05/14 03:57

---------------------- android培训、java培训、期待与您交流! ----------------------

//Person类

import java.io.Serializable;

public class Person implements Serializable //标记接口
{
static final long serialVersionUID = 12L;//指定序列号,使其唯一
static String name ;//不会被序列化,只存在于堆内存中
transient int age;//同上
private String country;
Person(String name,int age,String country)
{
this.name = name;
this.age = age;
this.country = country;
}
public String toString()
{
return name+"--"+age+"--"+country;
}
}

//学生类===================================



public class Student implements Comparable <Student>
{
private String name;
private int ch,en,ma,sum;
Student(String name,int ch,int en,int ma)
{
this.name = name;
this.ch = ch;
this.en = en;
this.ma = ma;
sum = ch + en + ma;
}
@Override
public int compareTo(Student stu) {
// TODO Auto-generated method stub
return this.sum-stu.sum;
}
public int hashCode()
{
return name.hashCode()+sum*11;
}
public String toString()
{
return "["+name+","+ch+","+en+","+ma+"--"+sum+"]";
}
public boolean equals(Student stu)
{
return this.name.equals(stu.name) && this.sum == sum;
}
}


//学生工具类===========================================

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.TreeSet;


public class ST
{
public static TreeSet<Student> getStus() throws IOException
{
return getStus(null);
}
public static TreeSet<Student> getStus(Comparator<Student>  cmp) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
TreeSet<Student> ts = null;
if(cmp == null)
ts = new TreeSet<Student>();
else
ts = new TreeSet<Student>(cmp);
String buffer = null;
while(!("over".equals((buffer = br.readLine()))))
{
String[] arr = buffer.split(",");
Student stu = new Student(arr[0],Integer.parseInt(arr[1]),Integer.parseInt(arr[2]),Integer.parseInt(arr[3]));
ts.add(stu);
System.out.println("+++++");
}
System.out.println(ts);
br.close();
return ts;
}
public static void write2File(TreeSet<Student> ts) throws IOException
{
BufferedWriter bw = new BufferedWriter(new FileWriter("StudentInfo.txt"));
for(Student stu : ts)
{
bw.write(stu.toString());
System.out.println("-------");
bw.newLine();
bw.flush();
}
bw.close();
}
}

//============================================

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.TreeSet;




public class day21 
{
public static void main(String[] args) throws Exception
{
//建立一个对象,要求使用两种方法使其中的两个对象不被序列化并使对象序列号唯一
//将一个对象持久化存储
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Person.obj"));
oos.writeObject(new Person("zhangsan",18,"kr"));
oos.close();
//读取这个对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Person.obj"));
Person p = (Person)ois.readObject();
System.out.println(p);
ois.close();
//多线程中的管道流,管道流中写入数据并读取
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
pos.connect(pis);
new Thread(new Write(pos)).start();
new Thread(new Read(pis)).start();
//随机访问文件 文本文件中写入姓名年龄(使用多线程),通过调整指针取出内容
RandomAccessFile raf1 = new RandomAccessFile("raf.txt","rw");
RandomAccessFile raf2 = new RandomAccessFile("raf.txt","rw");
new Thread(new TR(raf1)).start();
raf2.seek(8*3);
new Thread(new TR(raf2)).start();
RandomAccessFile raf3 = new RandomAccessFile("raf.txt","r");
byte[] buffer = new byte[4];
raf3.read(buffer);
String str = new String(buffer);
System.out.println(str);
//在文本指定位置写入数据,修改某位置数据
RandomAccessFile raf4 = new RandomAccessFile("raf.txt","rw");
raf4.seek(0);
raf4.write("李四".getBytes());
raf3.seek(4);
raf3.skipBytes(8);
int buf = raf3.readInt();
System.out.println(buf);
raf3.close();
raf4.close();
//基本数据类型的输入输出流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("DataStream.txt"));
dos.writeInt(123);
dos.writeBoolean(true);
dos.writeByte('a');
dos.writeBytes("adfadf");
dos.writeDouble(12.33);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream("DataStream.txt"));
System.out.println(dis.readInt());
System.out.println(dis.readBoolean());
System.out.println(dis.readByte());
byte[] bu = new byte[6];
dis.read(bu);
String buff = new String(bu);
System.out.println((buff));
System.out.println(dis.readDouble());
dis.close();
//字节数组,字符数组,字符串的输入输出流
ByteArrayInputStream bais = new ByteArrayInputStream("ABCDEF".getBytes());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int buffe = 0;
while((buffe = bais.read()) != -1)
{
baos.write(buffe);
}
System.out.println(bais.toString());
System.out.println(baos.toString());
baos.writeTo(new FileOutputStream("ByteArrayStream.txt"));
bais.close();
baos.close();
char[] c = {'a','b','c','d','e'};
CharArrayReader car = new CharArrayReader(c);
CharArrayWriter caw = new CharArrayWriter();
int buffer2 = 0;
while((buffer2 = car.read()) != -1)
{
caw.write(buffer2);
}
System.out.println(car.toString());
System.out.println(caw.toString());
car.close();
caw.close();
//字符以GBK编码存入文本文件中使用UTF-8读取
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("Encode.txt"));
osw.write("你好");
osw.close();
FileInputStream fis = new FileInputStream("Encode.txt");
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
int buffer3 = 0;
while((buffer3 = isr.read()) != -1)
{
System.out.println(buffer3);
}
fis.close();
isr.close();
//GBK编码utf解码utf编码
String nihao = "你好";
byte[] gbk = nihao.getBytes("GBK");
String result = null;
System.out.println(Arrays.toString(gbk));
result = new String(gbk,"gbk");
System.out.println(result);
gbk = nihao.getBytes("utf-8");
result = new String(gbk,"utf-8");
System.out.println(result);
System.out.println(Arrays.toString(gbk));
//成绩单:五个学生,语数英(键盘录入),总分,要求按总分从高到低排序存入文档中
TreeSet<Student> ts = null;
Comparator<Student> cmp = Collections.reverseOrder();
ts = ST.getStus(cmp);
ST.write2File(ts);
}
}
class TR implements Runnable
{
private RandomAccessFile raf;
TR(RandomAccessFile raf)
{
this.raf = raf;
}
public void run()
{
for(int x = 0;x < 3;x++)
{
try {
raf.write(("张三").getBytes());
raf.writeInt(18);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Read implements Runnable
{
private PipedInputStream pis;
Read(PipedInputStream pis)
{
this.pis = pis;
}
@Override
public void run()
{
// TODO Auto-generated method stub
try
{
byte[] buffer = new byte[1024];
int length = 0;
length = pis.read(buffer);
System.out.println(new String(buffer,0,length));
}
catch(Exception e)
{
throw new RuntimeException("管道读取流失败");
}
finally
{
try {
pis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Write implements Runnable
{
PipedOutputStream pos = new PipedOutputStream();
Write(PipedOutputStream pos)
{
this.pos = pos;
}
@Override
public void run() {
// TODO Auto-generated method stub
try
{
pos.write("I'm Piped.".getBytes());
}
catch(Exception e)
{
throw new RuntimeException("管道写入失败");
}
finally
{
try {
pos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

原创粉丝点击