案例:复制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);
}
}
}

Java笔记第七弹的更多相关文章

  1. Effective java笔记(七),通用程序设计

    45.将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. Java允许在任何可以出现语句的地方声明变量(C语言中局部变量要在代码块开头声明),要使 ...

  2. Java笔记(七)HashMap和HashSet

    HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> { int size();//查看Map中的键值对个数 boolean isEmp ...

  3. Java笔记(七)

    File类: import java.io.File; import java.io.IOException; public class Demo{ public static void main(S ...

  4. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

  5. 面向对象三大特征之多态——Java笔记(七)

    多态:     同一个实体同时具有多种形式     编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定     如果编译时类型和运行时类型不同,就出现多态 例: clas ...

  6. Java NIO 学习笔记(七)----NIO/IO 的对比和总结

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  7. java并发编程笔记(七)——线程池

    java并发编程笔记(七)--线程池 new Thread弊端 每次new Thread新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM 缺 ...

  8. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  9. JavaWeb和WebGIS学习笔记(七)——MapGuide Open Source安装、配置以及MapGuide Maestro发布地图——超详细!目前最保姆级的MapGuide上手指南!

    JavaWeb和WebGIS学习笔记(七)--MapGuide Open Source安装.配置以及MapGuide Maestro发布地图 超详细!目前最保姆级的MapGuide上手指南! 系列链接 ...

  10. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

随机推荐

  1. element ui修改文本框高度以及图标不居中的问题

    .el-input__inner{ height:30px !important; .el-input__icon{ line-height: 24px !important; } .el-range ...

  2. ES6的模块化(import引入)

    先做个前提,新建三个模块JS文件m1,m2,m3,其中m1.js 为分别暴露,m2.js 为统一暴露,m3.js 为默认暴露.接下来进行文件的import引入 1.通用的引入方式,这种方式适合任何暴露 ...

  3. dotnet 项目生成自签名证书

    解决dotnet 项目浏览器不安全提示 dotnet dev-certs - 生成自签名证书,以便在开发中使用 HTTPS. dotnet dev-certs https --clean dotnet ...

  4. UE5农场项目小功能(1)-砍树

    砍树功能效果的实现 ​ 在UE中想做一个砍树的功能,B站上没找到什么教程,最后在油管上找到个视频并跟着实现了,一共设计到三个蓝图和一个什么也没写的蓝图接口,下面介绍下步骤. 1.角色蓝图的部分 人物这 ...

  5. UE4 联网RPC部分

    有些人生来就是为了奔跑,而有些人,则拥有更高的目标> 笔者近期在进行UE C++网络的一些开发,发现RPC这个部分它看起来很简单,理解起来也算不上难.但真正应用起来,对netcode经验不多的人 ...

  6. 2月23日javaweb之Maven

    Maven常用命令 compile:编译 clean:清理 test:测试 package:打包 install:安装 Maven生命周期 Maven对项目构建的生命周期描述是一次构建过程经历了多少个 ...

  7. c#动态添加属性名,且属性名也是动态的

    参考博客:https://www.cnblogs.com/wangyinhuo/articles/3385697.html C#4.0使用DYNAMIC 动态添加属性 dynamic p = new ...

  8. 自学JavaDay01

    1.Java的特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java三大版本 JavaSE:标准版(桌面程序,控制台开发......) JavaME:嵌入 ...

  9. Checkmarx

    1.概述 CheckMarx:是以色列的一家高科技软件公司,也是世界上最著名的源代码安全扫描软件CheckmarxCxSuite的生产商. Checkmarx CxEnterprise(Checkma ...

  10. FCC 高级算法题 对称差分

    Symmetric Difference 创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = ...