IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 文件、线程章节的一些案例(heima) -> 正文阅读

[游戏开发]文件、线程章节的一些案例(heima)

1、向array.txt文件中写入如下内容:(集合到文件)
lin,30
zhang,20
hh,25

package learnjava;

import java.io.*;
import java.util.*;

public class Demo {
    public static Set<String> res=new HashSet<>();
    public static void main(String[] args) throws IOException {

        ArrayList<Student> array=new ArrayList<>();
        Student s1=new Student("lin",30);
        Student s2=new Student("zhang",20);
        Student s3=new Student("hh",25);

        array.add(s1);
        array.add(s2);
        array.add(s3);

        BufferedWriter bw=new BufferedWriter(new FileWriter("hh\\array.txt"));

        for(Student s:array){
            bw.write(s.getName()+","+s.getAge());
            bw.newLine();
        }

        bw.close();
    }
}

2、复制多级文件夹

package learnjava;

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException{
        File from=new File("C:\\数据库作业");
        File to=new File("D:\\");

        copyFolder(from,to);
    }

    public static void copyFolder(File from,File to) throws IOException{
        if(from.isDirectory()){//from是文件夹
            //拷贝from文件夹名
            File fromCopy=new File(to,from.getName());//File(File parent,String child)
            if(!fromCopy.exists()){
                fromCopy.mkdir();
            }

            File[] fileArray=from.listFiles();

            for(File file:fileArray){
                copyFolder(file,fromCopy);//将源文件夹下的文件/目录 拷贝到 目的文件夹下
            }
        }else{//from是文件
            //拷贝from文件名
            File newFile=new File(to,from.getName());
            //拷贝文件内容
            copyFile(from,newFile);
        }
    }

    public static void copyFile(File srcFile,File destFile) throws IOException{
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destFile));

        byte[] bys=new byte[1024];
        int len;
        while ((len=bis.read(bys))!=-1){
            bos.write(bys,0,len);
        }
        bis.close();
        bos.close();
    }
}

3、复制文件的异常处理:

(1)

    public static void method() {
        FileReader fr=null;
        FileWriter fw=null;
        try{
            fr=new FileReader("fr.txt");
            fw=new FileWriter("fw.txt");

            char[] chs=new char[1024];
            int len;
            while ((len=fr.read(chs))!=-1) {
                fw.write(chs, 0, len);
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

(2)JDK7版本改进

    public static void method() {
        try(FileReader fr=new FileReader("fr.txt");
            FileWriter fw=new FileWriter("fw.txt");){

            char[] chs=new char[1024];
            int len;
            while ((len=fr.read(chs))!=-1) {
                fw.write(chs, 0, len);
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }

4、对象序列化流、反序列化流(seriaVersionID、transient)

package learnjava;

import java.io.Serializable;

public class Student  implements Serializable {
    private String name;
    private transient int age;

    public Student(){

    }

    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package learnjava;

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        write();
        read();
    }

    public static void write() throws IOException {//序列化
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hh\\oos.txt"));
        Student s=new Student("林青霞",30);
        oos.writeObject(s);
        oos.close();
    }

    public static void read() throws IOException, ClassNotFoundException {//反序列化
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hh\\oos.txt"));
        Object s=ois.readObject();
        Student stu=(Student) s;
        System.out.println(stu.getName()+","+((Student) s).getAge());
        //林青霞,0
        ois.close();
    }
}

5、游戏次数案例

package learn;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Demo {
    public static void main(String[] args) throws IOException {
        Properties prop=new Properties();
        FileReader fr=new FileReader("D:\\game.txt");
        prop.load(fr);
        fr.close();

        int count=Integer.parseInt(prop.getProperty("count"));//prop.getProperty(string)返回string类型
        if(count>=3){
            System.out.println("游戏试玩已结束,想玩请充值(www.itcast.cn)");
        }else{
            GuessNumber.start();//玩一次游戏

            count++;
            prop.setProperty("count",String.valueOf(count));
            FileWriter fw=new FileWriter("D:\\game.txt");
            prop.store(fw,null);
            fw.close();
        }
    }
}

6、买票案例:

package learn;

public class SellTicket implements Runnable {
    private int tickets=100;
    @Override
    public void run(){
        while (true){
            if(tickets>0){
                System.out.println(Thread.currentThread().getName()+"正在出售第"+
                        tickets+"张票");
                tickets--;
            }
        }
    }
}
package learn;

import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        SellTicket st=new SellTicket();

        //Thread(Runnable target,String name)
        Thread t1=new Thread(st,"窗口1");
        Thread t2=new Thread(st,"窗口2");
        Thread t3=new Thread(st,"窗口3");

        t1.start();
        t2.start();
        t3.start();
    }
}
/*
输出:
窗口1正在出售第100张票
窗口2正在出售第100张票
窗口3正在出售第100张票
窗口2正在出售第98张票
窗口1正在出售第99张票
窗口2正在出售第96张票
窗口3正在出售第97张票
窗口3正在出售第93张票
窗口2正在出售第94张票
窗口1正在出售第95张票
窗口2正在出售第91张票
窗口3正在出售第92张票
窗口3正在出售第88张票
窗口3正在出售第87张票
窗口2正在出售第89张票
窗口1正在出售第90张票
窗口2正在出售第85张票
窗口2正在出售第83张票
窗口2正在出售第82张票
窗口2正在出售第81张票
窗口2正在出售第80张票
窗口2正在出售第79张票
窗口2正在出售第78张票
窗口2正在出售第77张票
窗口2正在出售第76张票
窗口2正在出售第75张票
窗口2正在出售第74张票
窗口2正在出售第73张票
窗口2正在出售第72张票
窗口2正在出售第71张票
窗口2正在出售第70张票
窗口2正在出售第69张票
窗口2正在出售第68张票
窗口2正在出售第67张票
窗口2正在出售第66张票
窗口2正在出售第65张票
窗口2正在出售第64张票
窗口2正在出售第63张票
窗口2正在出售第62张票
窗口2正在出售第61张票
窗口2正在出售第60张票
窗口2正在出售第59张票
窗口2正在出售第58张票
窗口2正在出售第57张票
窗口2正在出售第56张票
窗口2正在出售第55张票
窗口2正在出售第54张票
窗口2正在出售第53张票
窗口2正在出售第52张票
窗口2正在出售第51张票
窗口2正在出售第50张票
窗口2正在出售第49张票
窗口2正在出售第48张票
窗口2正在出售第47张票
窗口2正在出售第46张票
窗口2正在出售第45张票
窗口3正在出售第86张票
窗口2正在出售第44张票
窗口1正在出售第84张票
窗口2正在出售第42张票
窗口3正在出售第43张票
窗口3正在出售第39张票
窗口3正在出售第38张票
窗口3正在出售第37张票
窗口3正在出售第36张票
窗口3正在出售第35张票
窗口2正在出售第40张票
窗口2正在出售第33张票
窗口2正在出售第32张票
窗口2正在出售第31张票
窗口2正在出售第30张票
窗口2正在出售第29张票
窗口2正在出售第28张票
窗口2正在出售第27张票
窗口2正在出售第26张票
窗口2正在出售第25张票
窗口2正在出售第24张票
窗口2正在出售第23张票
窗口2正在出售第22张票
窗口1正在出售第41张票
窗口2正在出售第21张票
窗口3正在出售第34张票
窗口2正在出售第19张票
窗口1正在出售第20张票
窗口2正在出售第17张票
窗口3正在出售第18张票
窗口3正在出售第14张票
窗口3正在出售第13张票
窗口3正在出售第12张票
窗口3正在出售第11张票
窗口3正在出售第10张票
窗口3正在出售第9张票
窗口3正在出售第8张票
窗口3正在出售第7张票
窗口3正在出售第6张票
窗口3正在出售第5张票
窗口3正在出售第4张票
窗口3正在出售第3张票
窗口3正在出售第2张票
窗口3正在出售第1张票
窗口2正在出售第15张票
窗口1正在出售第16张票
......
*/

同步方法解决数据安全问题:

package learn;

public class SellTicket implements Runnable {
    private int tickets=100;//共享数据
    @Override
    public void run(){
        while (true){
            sellTickets();
        }
    }
    public synchronized void sellTickets(){
        if(tickets>0){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"正在出售第"+
                    tickets+"张票");
            tickets--;
        }
    }
}

7、线程安全的类:
StringBuffer
Vector
Hashtable

Collections中的synchronizedList、synchronizedMap、synchronizedSet方法

public static <T> List<T> synchronizedList?(List<T> list)返回由指定列表支持的同步(线程安全)列表。
public static <K,V> Map<K,V> synchronizedMap?(Map<K,V> m)返回由指定地图支持的同步(线程安全)映射。
public static <T> Set<T> synchronizedSet?(Set<T> s)返回由指定集合支持的同步(线程安全)集。
List<String> list= Collections.synchronizedList(new ArrayList<>());

8、案例:生产者生产一瓶牛奶,消费者消费一瓶

Class IllegalMonitorStateException
抛出以表示线程已尝试在对象的监视器上等待或通知其他线程等待对象的监视器,而不拥有指定的监视器。

package learn;

import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        Box b=new Box();
        Producer p=new Producer(b);
        Consumer c=new Consumer(b);//共享同一个奶箱资源

        //Thread(Runnable target)
        Thread t1=new Thread(p);
        Thread t2=new Thread(c);

        t1.start();
        t2.start();
        /*
        生产者将第1瓶奶放入奶箱
        消费者拿到第1瓶奶
        生产者将第2瓶奶放入奶箱
        消费者拿到第2瓶奶
        生产者将第3瓶奶放入奶箱
        消费者拿到第3瓶奶
        生产者将第4瓶奶放入奶箱
        消费者拿到第4瓶奶
        生产者将第5瓶奶放入奶箱
        消费者拿到第5瓶奶
         */
    }
}
package learn;

public class Box {
    private int milk;//表示第几瓶奶
    private boolean state;
    public synchronized void put(){
        if(state){//奶箱中有牛奶,等待消费者消费
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        milk++;
        System.out.println("生产者将第"+milk+"瓶奶放入奶箱");

        state=true;
        notifyAll();
    }

    public synchronized void get(){
        if(!state){//奶箱中没有牛奶,等待生产者生产,消费者暂时不消费
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("消费者拿到第"+milk+"瓶奶");
        state=false;
        notifyAll();
    }
}
package learn;

public class Producer implements Runnable{
    private Box b;
    public Producer(Box b){
        this.b=b;
    }
    @Override
    public void run(){
        for(int i=1;i<=5;i++){
            b.put();
        }
    }
}
package learn;

public class Consumer implements Runnable{
    private Box b;
    public Consumer(Box b){
        this.b=b;
    }
    @Override
    public void run(){
        while (true){
            b.get();
        }
    }
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:15:32  更:2022-04-18 18:15:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 14:50:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码