集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称
文章目录
- 集合到文件
- 文件到集合
- 点名器
- 集合到文件数据排序版
- 标准输入流
- 打印流
- 对象序列化流
- 对象返序列化流
- Properties
- 游戏次数
- 进程和线程
- 线程
- 多线程的实现方式
- 设置和获取线程名称
集合到文件
package Demo1;
//把ArrayList集合中的字符串数据写入文本文件,每一个字符串元素作为文件中的一行数据import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;public class Demo1 {public static void main(String[] args) throws IOException {ArrayList<String> arr =new ArrayList<>();arr.add("Hello");arr.add("World");arr.add("java");BufferedWriter bw = new BufferedWriter(new FileWriter("arr.txt"));for(String s : arr){bw.write(s);bw.newLine();bw.flush();}bw.close();}
}
文件到集合
package Demo1;
//把文本文件的数据读取到集合中,并遍历集合,文件中每一行数据是一个元素
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;public class Demo1 {public static void main(String[] args) throws IOException {BufferedReader bw =new BufferedReader(new FileReader("arr.txt"));ArrayList<String> array = new ArrayList<>();String line;while((line =bw.readLine())!=null){array.add(line);}bw.close();for(String s : array){System.out.println(s);}}
}
点名器
package Demo1;
//一个文件你们储存了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Random;public class Demo1 {public static void main(String[] args) throws IOException {BufferedReader br =new BufferedReader(new FileReader("cod.txt"));
ArrayList<String> arr = new ArrayList<>();
String line;
while ((line=br.readLine())!=null){arr.add(line);}
br.close();Random r =new Random();int index = r.nextInt(arr.size());String name =arr.get(index);System.out.println("幸运者是:"+name);}
}
package Demo1;
//把ArrayList集合中的学生数据写入到文本文件中
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Random;public class Demo1 {public static void main(String[] args) throws IOException {ArrayList<Student> array = new ArrayList<Student>();
Student s1 = new Student("001","a",1,"A区");
Student s2 = new Student("002","b",2,"B区");
Student s3 = new Student("003","c",3,"C区");
Student s4 = new Student("004","d",4,"D区");
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
BufferedWriter bw =new BufferedWriter(new FileWriter("arr.txt"));
for(Student s : array){StringBuilder sb = new StringBuilder();sb.append(s.getSid()).append(",").append(s.getName()).append(",").append(s.getAge()).append(",").append(s.getAddress());bw.write(sb.toString());bw.newLine();bw.flush();
}
bw.close();}
}
集合到文件数据排序版
package Demo1;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;public class Demo {public static void main(String[] args) throws IOException {//创建treset集合,通过比较器进行滚滚排序TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {int num = s2.getSum() - s1.getSum();int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;int num3 = num == 0 ? s1.getMath() - s2.getMath() : num2;int num4 = num == 0 ? s1.getName().compareTo(s2.getName()) : num3;return num4;}});//键盘输入学生数据for(int i = 0;i<5;i++){Scanner sc = new Scanner(System.in);System.out.println("请输入第"+(i+1)+"个学信息");System.out.println("姓名:");String name =sc.nextLine();System.out.println("语文成绩:");int Chinese = sc.nextInt();System.out.println("数学成绩:");int math = sc.nextInt();System.out.println("英语成绩:");int english = sc.nextInt();//创建学生对象,把键盘录入的数据给学生成员变量Student s = new Student();s.setName(name);s.setChinese(Chinese);s.setMath(math);s.setEnglish(english);//将学生对象添加到treset集合ts.add(s);}//创建字符缓冲流输出对象BufferedWriter bw = new BufferedWriter(new FileWriter("gorce.txt"));//拼接字符for(Student s : ts ){StringBuilder sb = new StringBuilder();sb.append(s.getName()).append(",").append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish()).append(",").append(s.getSum());//调用字符输出流写数据bw.write(sb.toString());bw.newLine();bw.flush();}
bw.close();}
}
标准输入流
System类中有两个静态的成员变量
- public static final InputStream in:标准输入流,通常该流应用于键盘或由主机环境或用户指定的另一个输入源
- public static final PrintStream out :标准输出流,通常引用与显示输出或由主机环境或用户指定的另一个输出目标
- 输出语句的本质:是一个标准的输出流
- PrintStream ps = System.out
- PrintStream类有的方法,System.out都可以使用
package Demo2;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException {InputStream is = System.in;
// int by ;
// while ((by=is.read())!=-1){
// System.out.println((char)by);//如何把字节流转换为字符流?
// InputStreamReader isr =new InputStreamReader(is);
// //字符流实现一次读取一行数据,
// //但是一次读一行数据是字符缓冲流的特有方法
// BufferedReader br =new BufferedReader(isr);BufferedReader br =new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入一个字符串:");String line = br.readLine();System.out.println("你输入的字符串是:"+line);System.out.println("请输入一个整数:");int i = Integer.parseInt(br.readLine());System.out.println("你输入的整数是:"+i);Scanner sc =new Scanner(System.in);}
}
打印流
打印流分类
- 字节打印流:printStream
- 字符打印流:printWriter
打印流的特点
- 只负责输出数据,不负责读数据
- 有自己特有的方法
字节打印流
- PrintStream(String fileName):使用指定的文件名创建新的打印流
- 使用继承父类的方法写数据,查看的时候会转码;使用自己特有的方方法写数据,查看的数据原样输出
package Demo2;import java.io.*;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException {//PrintStream(String fileName),使用指定文件名创建新的打印流PrintStream ps = new PrintStream("cmn,txt");//写数据//字节输出流的方法
// ps.print(100);
// ps.print(99);ps.println(100);ps.println(101);}
}
package Demo2;
//复制java文件
import java.io.*;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException {//根据数据源创建字符输入流对象BufferedReader br= new BufferedReader(new FileReader(("cmn.java")));
//根据数据源创建字符输出流对象PrintWriter pw = new PrintWriter("copy.java");
String line ;
while((line =br.readLine())!=null){pw.println(line);
}
pw.close();
br.close();}}
对象序列化流
对象序列化流: ObjectOutputStream
- 将java对象的原始数据类型和图形写入OutputStream,可以使用ObjectInputStream读取(重构)对象,可以通过使用流的文件来实现对对象的持久储存,如果流是网络桃姐字流,则可以再去领一个主机上火另一个进程中重构对象
构造方法
- ObjectOutputStream(OutStream out):创建一个写入指定的OutputStream的ObjectOutputstream
序列化对象的方法
- coid write Object(Object obj):将指定的对象写入ObjectputStream
注意
- 一个对象要想被序列化,该对象所属的类必须实现Serializable接口
- Serializable是一个标记接口,实现该接口,不需要重写任何方法
package Demo2;import java.io.*;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException {//创建一个写入指定的OutputStrea,的ObjectputStreamObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));//创建对象Student s = new Student(20, "pofenx");oos.writeObject(s);
oos.close();}
}
对象返序列化流
- ObjectInputStream返序列化流先前使用ObjectOutputStream表邪的原始数据和对象
构造方法
- ObjectInputStream(InputStream in):创建从制定给定InputStream
返序列化对象的方法
- Object readObject():从ObjectInputStream读取一个对象
package Demo2;import java.io.*;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException ,ClassNotFoundException{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
Object obj = ois.readObject();
Student s = (Student) obj;System.out.println(s.getAge()+","+s.getName());}
}
用对象序列化了一个队先后,假如我们修改了对象所属的类文件,读数据会不会出现问题呢?
- 会出问题,抛出InvalidClassException异常
如何解决?
- 给对象所属类加一个serialVersionUID
private static final long serivalVersionUID = 42l;
如果一个对象中的某个成员变量不想被序列化怎么办?
- 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程
Properties
properties作为集合的特有方法
方法名 | 说明 |
---|---|
Object setProperty(String key ,String value) | 设置集合的键和值,都是String类型,底层调用hashtable方法put |
String getProperty(String key) | 使用此属性列表中指定的键搜索属性 |
Set stringPropertyNames() | 从该属性列表中返回一个不可以修改的键集,其中键及其对应的值是字符串 |
package Demo2;import java.io.*;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;public class Demo2 {public static void main(String[] args) throws IOException ,ClassNotFoundException{Properties prop = new Properties();prop.setProperty("a","1");prop.setProperty("b","2");prop.setProperty("c","3");// Set<String> names =prop.stringPropertyNames();
// for(String key : names){// String value = prop.getProperty(key);
// System.out.println(key+","+value);
// }}
}package Demo2;import java.io.*;
import java.util.Scanner;public class Demo2 {public static void main(String[] args) throws IOException {//创建一个写入指定的OutputStrea,的ObjectputStreamObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));//创建对象Student s = new Student(20, "pofenx");oos.writeObject(s);
oos.close();}
}
Properties和IO流结合的方法
方法名 | |
---|---|
void load(InputStream inStream) | 从输入字节流读取属性列表(键和元素对) |
void load(Reader reader) | 从输入字符流读取属性列表(键和元素对) |
void store(OutputStream out,String comments) | 键此属性列表(键和元素对)写入properties中,以适合于使用load(InputStream)方法的格式写入输出字节流 |
void store(Writer writer,String comments) | 键此属性列表(键和元素对)写入此properties)表中,以适合使用load(Reader)方法的格式写入输出字符流 |
package Demo2;import java.io.*;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;public class Demo2 {public static void main(String[] args) throws IOException {//把集合中的数据保存到文件myStore();myload();}private static void myload() throws IOException{Properties prop = new Properties();FileReader fr = new FileReader("fw.txt");prop.load(fr);fr.close();System.out.println(prop);}private static void myStore() throws IOException{Properties prop = new Properties();prop.setProperty("a","1");prop.setProperty("b","2");prop.setProperty("c","3");FileWriter fw = new FileWriter("fw.txt");prop.store(fw,null);fw.close();}
}
游戏次数
package Demo3;import java.util.Random;
import java.util.Scanner;public class DemoG {private DemoG() {}public static void start() {Random r = new Random();int number = r.nextInt(100) + 1;
while(true){Scanner sc =new Scanner(System.in);System.out.println("请输入你要猜的数字");int gurssNumber = sc.nextInt();if(gurssNumber>number){System.out.println("你输入的数字"+gurssNumber+"大了");}else if (gurssNumber<number){System.out.println("你输入的数字"+gurssNumber+"小了");}else{System.out.println("恭喜你猜中了");break;}
}}
}
package Demo3;import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;import javax.management.StringValueExp;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;public class DemoA {public static void main(String[] args) throws IOException {//从文件中读取数据到properties集合,使用load()方法实现Properties prop = new Properties();FileReader fr = new FileReader("game.txt");prop.load(fr);fr.close();//通过propertise集合获取到玩游戏的次数String count = prop.getProperty("count");int number = Integer.parseInt(count);if(number>=3){//如果到了,给出提示,玩游戏已结束,请充值System.out.println("游戏试玩已结束,请充值");}else{DemoG.start();//次数+1,重新写回文件,properties的store()方法实现number++;prop.setProperty("count", String.valueOf(number));FileWriter fw = new FileWriter("game.txt");prop.store(fw,null);fw.close();}}
}
进程和线程
线程
线程:是进程中的单个顺序控制流,是一条执行路径
- 单线程:一个进程如果只有一条执行路径,则称为单线程程序
- 多线程:一个线程如果有多条执行语句,则称为多线程
多线程的实现方式
方式1:继承thread类
- 定义一个类Demo4B继承thread类
- 在Demo4B类中重写run()方法
- 创建Demo4B对象
- 启动线程
两个小问题
- 为什么要重写run()方法?
因为run()是用来封装被线程执行的代码
- run()方法和start()方法的区别
run():封装线程执行的代码,直接调用,相当于普通方法的调用
start():启动线程,然后由jvm调用此线程的run()方法
package Demo4;public class Demo4B extends Thread {@Overridepublic void run(){for (int i = 0; i <100 ; i++) {System.out.println(i);}}}
package Demo4;public class Demo4A {public static void main(String[] args) {Demo4B my1 = new Demo4B();Demo4B my2 = new Demo4B();
//my1.run();
//my2.run();//void start(),导致线程开始执行,java虚拟机调用此线程run方法my1.start();my2.start();}
}
设置和获取线程名称
thread类中设置和获取线程名称的方法
- void setName(String name):将此线程的名称更改为等于参数name
- String getName();返回此线程的名称
- 通过构造方法也可以设置线程名称
如何获取main()方法所在的线程名称?
public static thread currentThread():返回对当前正在执行的线程对象的引用。
package Demo4;public class Demo4A {public static void main(String[] args) {// Demo4B my1 = new Demo4B("高铁");
// Demo4B my2 = new Demo4B("飞机");
// my1.setName("帅哥");
// my2.setName("美女");
//my1.run();
//my2.run();//void start(),导致线程开始执行,java虚拟机调用此线程run方法
// my1.start();
// my2.start();//static thread currentthread()返回当前正在执行的线程对象引用System.out.println(Thread.currentThread().getName());}
}
package Demo4;public class Demo4B extends Thread {public Demo4B(String name){super(name);}public Demo4B(){}@Overridepublic void run(){for (int i = 0; i <100 ; i++) {System.out.println(getName()+i);}}}
集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称相关推荐
- java里新建线程设置线程名字_多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的...
原标题:多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的 欲善编程,多看.多敲.多讨论:动眼.动手.动大脑. 1 如何设置和获取线程名称 多线程的运行状态是不确定的,在程序开发过程中,想要获 ...
- Java多线程:设置和获取线程名称
文章目录 设置和获取线程名称 API介绍 综合案例 设置和获取线程名称 API介绍 我们可以通过调用设置线程名称的API进行设置 方法名 说明 void setName(String name) 将此 ...
- 【Linux 内核】进程优先级与调度策略 ③ ( 设置、获取线程优先级的核心函数 | 修改线程调度策略函数 )
文章目录 一.设置.获取线程优先级的核心函数 二.修改线程调度策略函数 一.设置.获取线程优先级的核心函数 设置.获取 线程 优先级的 核心 函数 : ① 设置 " 创建线程 " ...
- python 线程通信的几种方式_进程间通信和线程间通信的几种方式
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...
- python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法
Python多线程中主线程等待所有子线程结束的方法 发布时间:2020-07-30 14:39:04 来源:亿速云 阅读:77 作者:小猪 这篇文章主要讲解了Python多线程中主线程等待所有子线程结 ...
- 实现多线程、进程、线程、设置和获取线程名称、线程调度、线程控制、线程生命周期、同步代码块、线程安全的类、Lock锁、生产者消费者模式
实现多线程:
- android获取子线程id,Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
/*** Returns the identifier of this process's user. * 返回此进程的用户的标识符.*/Log.e(TAG,"Process.myUid() ...
- 线程id 获取线程名称_016 线程及初步网络编程
涉及内容:多线程的安全问题.线程的优先级.暂停线程的执行.线程同步.死锁和死锁的解决办法.生产者消费者模式的实现.网络编程三要素.IP端口及Socket的含义 1. 获取线程基本信息的方法 (1) 获 ...
- 【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )
文章目录 一.获取线程优先级 1.pthread_attr_setschedparam 和 pthread_attr_getschedparam 函数 2.获取线程优先级代码示例 二.设置线程调度策略 ...
最新文章
- MachineLN博客目录
- android arrays.xml 二维数组,android中怎的从xml文件中解析一个二维数组
- (37)zabbix snmp类型 无需安装agent也能监控
- JSONObjec的作用详解——Web网络系列学习笔记
- 代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...
- Redis的七种武器及其适合的应用场景
- ESlint全局安装(安装教程) - cmd篇
- MySQL的binlog及关闭方法
- java判断字符串是否是空格_检查字符串在Java中是否为空格,空(“”)或null
- Cadence Orcad Capture绘制原理图常用基本操作
- android shape自定义渐变,Android实现 Shape属性gradient 渐变效果
- quick-cocos2dx中 B.super.ctor(self) 和 B.super:ctor()的区别
- 校招linux基础知识,校招笔试整理 牛客网 2020小米校招(1)
- 广州车展直击:路特斯超高端矩阵驾临
- 稀疏特征(稀疏矩阵)
- 荒岛求生游戏显示服务器不行,荒岛求生连接服务器失败怎么办
- c语言日历设计程序框图,C语言课程设计————写下流程图! 谢谢
- 网络渗透作业202105110124郭静
- Ubuntu16.04安装cello
- ZLG_USBCAN-Ⅱ+ 设置滤波问题
热门文章
- php fpm在哪配置,php-fpm配置详解
- 【Android开发】安卓课程表项目课表app源码可下载
- 高顿,量产“状元”的秘密
- PMP备考指南之第十三章:项目干系人管理
- 5.19 综合案例2.0-智能风扇(仅支持2.2以上版本)
- 2009年中国电脑病毒疫情及互联网安全报告(图)
- 白嫖服务器+傻瓜式部署 将你的新年、表白代码发布到网站 让ta仪式感拉满(10元成本购买域名)
- php网站定时执行代码,如何使PHP定时执行任务(附代码)
- Latex参考文献软件推荐
- JEPLUS之如何快速复制表——JEPLUS软甲快速开发平台