Java笔记第七弹


案例:复制Java文件(打印流改进版)
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myOtherStream//PrintStreamDemo.java"));

        PrintWriter pw=new PrintWriter(new FileWriter("myOtherStream//Copy.java"),true);//可以自动更新
        
        String line;
        while((line=br.readLine())!=null){
           pw.println(line);
        }

        pw.close();
        br.close();
    }
}
对象序列化流
ObjectOutputStream//将Java对象的原始数据类型和图形写入OutputStream,可以使用ObjectOutputStream读取对象
    //构造方法
    ObjectOutputStream(OutputStream out);
//序列化对象的方法
void writeObject(Object obj);//将指定的对象写入ObjectOutputStream
//类的序列化由实现java.io.Serializable接口的类启用,不实现此接口将不会使任何状态序列化或反序列化
//实现该接口,不需要重写任何方法
相关应用:
//Main.java
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("myOtherStream//oos.txt"));

        Student s=new Student("lili",18);

        oos.writeObject(s);

        oos.close();
    }
}
//Student.java
import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;
    private int yuwen;
    private int math;
    private String id;
    public Student(){}
    public Student(String name, int age){
    this.name=name;
    this.age=age;
    }
    public Student(String name,int yuwen,int math){
        this.name=name;
        this.yuwen=yuwen;
        this.math=math;
    }
    public Student(String id,String name){
        this.id=id;
        this.name=name;
    }
     public void setName(String name){
        this.name=name;
     }

     public String getName(){
        return name;
     }

     public void setAge(int age){
        this.age=age;
     }

     public int getAge(){
        return age;
     }

     public void setYuwen(int yuwen){
        this.yuwen=yuwen;
     }

     public int getYuwen(){
        return yuwen;
     }

     public void setMath(int math){
        this.math=math;
     }

     public int getMath(){
        return math;
     }
     public void setId(String id){
        this.id=id;
     }
     public String getId(){
        return id;
     }


}
相关问题:
//类的串行版本与从流中读取的类描述符的类型不匹配
//该类包含未知的数据类型
//该类没有可访问的无参数构造函数

//解决方法--在Student.java里面添加:
private static final long serialVersionUID=42L;

//如果一个对象中的某个成员值不想被序列化,如何解决?

//解决方法:
//在对象所属的类中,将成员变量用transient修饰
对象反序列化流
ObjectInputStream
    //构造方法
    ObjectInputStream(InputStream in);
//反序列化对象的方法
ObjectreadObject();//读取
相关应用:
//Main.java
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("myOtherStream//oos.txt"));
        
        Object obj=ois.readObject();
        
        Student s=(Student) obj;

        System.out.println(s.getName()+","+s.getAge());
        
        ois.close();
    }
}
//Student.java已省略

Properties

是一个Map体系的集合类

可以保存到流中或从流中加载

练习:Properties作为Map集合的使用
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Properties prop=new Properties();

        prop.put("1001","lili");
        prop.put("1002","wangwu");
        prop.put("1003","lisi");

        Set<Object> keySet=prop.keySet();

        for(Object key:keySet){
           Object value= prop.get(key);
            System.out.println(key+","+value);
        }

    }
}
特有方法:
Object setProperty(String key,String value);//设置集合的键和值,都是String类型,底层调用Hashtable方法put
String getProperty(String key);//使用此属性列表中指定的键搜索属性
Set<String> stringPropertyNames();//从该属性列表返回一个不可修改的键集,其中键及其对应的值是字符串
相关应用:
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Properties prop=new Properties();

        prop.setProperty("1001","lili");
        prop.setProperty("1002", "wangwu");
        prop.setProperty("1003","lisi");

        System.out.println(prop.getProperty("1001"));//lili
        System.out.println(prop.getProperty("0006"));//null

        Set<String> names=prop.stringPropertyNames();
        for(String key:names){
           String value=prop.getProperty(key);
            System.out.println(key+","+value);
        }
    }
}
与IO流结合的方法:
void load(InputStream inStream);//从输入字节流读取属性列表
void load(Reader reader);//从输入字节流读取属性列表*******
void store(OutputStream out,String comments);
void store(Writer writer,String comments);//*******
相关应用:
//将集合中的数据保存到文件
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        myStore();
    }
    
    private static void myStore() throws IOException {
        Properties prop=new Properties();
        
        prop.setProperty("1001","lili");
        prop.setProperty("1002","wangwu");
        prop.setProperty("1003","lisi");
        
        FileWriter fw=new FileWriter("myOtherStream//fw.txt");
        
        prop.store(fw,null);
        fw.close();
    }
}

//将文件中的数据加载到集合
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        
        myLoad();
    }
    
    private static void myLoad() throws IOException {
        Properties prop=new Properties();
        
        FileReader fr=new FileReader("myOtherStream//fw.txt");
        
        prop.load(fr);
        fr.close();

        System.out.println(prop);
    }
}
案例:游戏次数
//Main.java
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Properties prop=new Properties();
        
        FileReader fr=new FileReader("myOtherStream//game.txt");
        
        String count=prop.getProperty("count");
        int i=Integer.parseInt(count);
        
        if(i>=3){
            System.out.println("游戏试玩已结束,想玩请充值www.itcast.cn");
        }else{
            GuessNumber.start();
            i++;
            prop.setProperty("count",String.valueOf(i));
            FileWriter fw=new FileWriter("myOtherStream//game.txt");
            prop.store(fw,null);
            fw.close();
        }
    }
}
//GuessNumber.java已经省略

实现多线程

进程和线程

进程:正在运行的程序

线程:是进程中的单个顺序控制流,是一条执行路径

单线程:一个进程如果只有一条执行路径,则成为单线程程序

多线程:一个进程如果有多条执行路径,则成为单线程程序

多线程的实现方式
//创建一个新的执行线程
1、将一个类声明为一个Thread的子类,这个子类应该重写Thread类的方法run(继承Thread类)
    //相关应用:
    //Main.java
    import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        DateTest d1=new DateTest();

        DateTest d2=new DateTest();

        d1.start();
        d2,start();

    }
}

//DateTest.java
public class DateTest extends Main{

    public void run(){
        for(int i=0;i<100;i++){
            System.out.println(i);
        }
    }
}

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/277601.html

(0)
上一篇 2022年7月28日
下一篇 2022年7月28日

相关推荐

发表回复

登录后才能评论