文章目录

  • 集合到文件
  • 文件到集合
  • 点名器
  • 集合到文件数据排序版
  • 标准输入流
    • 打印流
  • 对象序列化流
    • 对象返序列化流
    • 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 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称相关推荐

  1. java里新建线程设置线程名字_多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的...

    原标题:多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的 欲善编程,多看.多敲.多讨论:动眼.动手.动大脑. 1 如何设置和获取线程名称 多线程的运行状态是不确定的,在程序开发过程中,想要获 ...

  2. Java多线程:设置和获取线程名称

    文章目录 设置和获取线程名称 API介绍 综合案例 设置和获取线程名称 API介绍 我们可以通过调用设置线程名称的API进行设置 方法名 说明 void setName(String name) 将此 ...

  3. 【Linux 内核】进程优先级与调度策略 ③ ( 设置、获取线程优先级的核心函数 | 修改线程调度策略函数 )

    文章目录 一.设置.获取线程优先级的核心函数 二.修改线程调度策略函数 一.设置.获取线程优先级的核心函数 设置.获取 线程 优先级的 核心 函数 : ① 设置 " 创建线程 " ...

  4. python 线程通信的几种方式_进程间通信和线程间通信的几种方式

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...

  5. python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法

    Python多线程中主线程等待所有子线程结束的方法 发布时间:2020-07-30 14:39:04 来源:亿速云 阅读:77 作者:小猪 这篇文章主要讲解了Python多线程中主线程等待所有子线程结 ...

  6. 实现多线程、进程、线程、设置和获取线程名称、线程调度、线程控制、线程生命周期、同步代码块、线程安全的类、Lock锁、生产者消费者模式

    实现多线程:

  7. android获取子线程id,Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID

    /*** Returns the identifier of this process's user. * 返回此进程的用户的标识符.*/Log.e(TAG,"Process.myUid() ...

  8. 线程id 获取线程名称_016 线程及初步网络编程

    涉及内容:多线程的安全问题.线程的优先级.暂停线程的执行.线程同步.死锁和死锁的解决办法.生产者消费者模式的实现.网络编程三要素.IP端口及Socket的含义 1. 获取线程基本信息的方法 (1) 获 ...

  9. 【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )

    文章目录 一.获取线程优先级 1.pthread_attr_setschedparam 和 pthread_attr_getschedparam 函数 2.获取线程优先级代码示例 二.设置线程调度策略 ...

最新文章

  1. MachineLN博客目录
  2. android arrays.xml 二维数组,android中怎的从xml文件中解析一个二维数组
  3. (37)zabbix snmp类型 无需安装agent也能监控
  4. JSONObjec的作用详解——Web网络系列学习笔记
  5. 代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...
  6. Redis的七种武器及其适合的应用场景
  7. ESlint全局安装(安装教程) - cmd篇
  8. MySQL的binlog及关闭方法
  9. java判断字符串是否是空格_检查字符串在Java中是否为空格,空(“”)或null
  10. Cadence Orcad Capture绘制原理图常用基本操作
  11. android shape自定义渐变,Android实现 Shape属性gradient 渐变效果
  12. quick-cocos2dx中 B.super.ctor(self) 和 B.super:ctor()的区别
  13. 校招linux基础知识,校招笔试整理 牛客网 2020小米校招(1)
  14. 广州车展直击:路特斯超高端矩阵驾临
  15. 稀疏特征(稀疏矩阵)
  16. 荒岛求生游戏显示服务器不行,荒岛求生连接服务器失败怎么办
  17. c语言日历设计程序框图,C语言课程设计————写下流程图! 谢谢
  18. 网络渗透作业202105110124郭静
  19. Ubuntu16.04安装cello
  20. ZLG_USBCAN-Ⅱ+ 设置滤波问题

热门文章

  1. php fpm在哪配置,php-fpm配置详解
  2. 【Android开发】安卓课程表项目课表app源码可下载
  3. 高顿,量产“状元”的秘密
  4. PMP备考指南之第十三章:项目干系人管理
  5. 5.19 综合案例2.0-智能风扇(仅支持2.2以上版本)
  6. 2009年中国电脑病毒疫情及互联网安全报告(图)
  7. 白嫖服务器+傻瓜式部署 将你的新年、表白代码发布到网站 让ta仪式感拉满(10元成本购买域名)
  8. php网站定时执行代码,如何使PHP定时执行任务(附代码)
  9. Latex参考文献软件推荐
  10. JEPLUS之如何快速复制表——JEPLUS软甲快速开发平台