高级API中的多线程,字符流,网络编程,IO流,File

  • 1.理论
    • 解释:什么是线程,在讲解线程之前,先了解什么是进程
    • 进程:运行中的应用程序称为进程,拥有系统资源(cpu,内存)
    • 线程:线程是进程中的一个任务(一件事一个人做),一个进程可以有多个任务(一件
    • 事多个人做),所以就有了多线程
    • 多线程:一个应用程序中的多个任务
    • 程序入口被自动创建为主线程(一件事一个人做),在主线程中可以创建多个子线程
    • (一个事分给多个人做)
  • 多线程的解释:
    • 假设在卖票,排十个人的队,那么就只能老老实实的等待排队,假设第二个人有
    • 事买个票买了很久,后面的人就得老老实实等待他买完才能买到票。
    • 多线程就是同样的事情,同样的本质,可以抢资源,可以插队。而且是十个人都
    • 可以插队。
    • 多线程的好处:效率高,不浪费资源。
  • 线程的两种方式:
    • Thread使用:继承Thread类,重写run(),子类调用start()开启线程,自动调用run(),不能直接调用run()。
    • runnable接口使用:实现接口,重写run(),只有Thread中有start()开启线程,所有想使用,必须把类的对象放入Thread类实例化中,用Thread调用start().
    • Thread.currentThread().getName()获取线程名字
  • 线程的状态
    • 1.新建:刚new出来在内存中
    • 2.就绪:start表示该线程有资格抢CPU
    • 3.运行:抢到了CPU,会执行run方法
    • 4.死亡:执行完run方法
    • 5.阻塞:调用了sleep方法或其他阻塞的方法
  • 2.案例:老虎机游戏制作
    • 实现
      • extends Thread
      • implements Runnable

  • 1.字符流:
  • 读:一个--FileReader
  • 一行--BufferedReader
  • 写:一行--FileWriter
  • 多行--BufferedWriter配合:newLine()创建行--flush()每次刷新
  • 根据流的方向:输入,输出
  • 根据流的类型:字节流,字符流(操作文本文件)
  • 所有以Stream结尾的都是字节流
  • 所有以Reader或者Writer结尾的都是字符流
  • InputStreamReader是将字节流转换成字符流
  • OutputStreamWriter
  • 2.网络 net java.net网络包
  • dos命令:查看IP地址 ipconfig
  • 获取自己的电脑InetAddress.getLocalHost() 127.0.0.1本机
  • 获取局域网中别人电脑InetAddress.getByName("放入别人ip地址")
  • 统一资源定位符url http超文本传输协议 域名www.taobao.com www.qq.com
  • URL url=new URL("https://www.baidu.com");
  • 3.网上下载
  • 3.1网页下载:
  • 先声明资源定位
  • URL url=new URL("https://www.baidu.com");
  • 打开该网页的字节流
  • InputStream is=url.openStream();
  • 读取和写入在硬盘同时进行(字节流字符流都可以)
  • 3.2图片下载:修改定位的地址,其他操作和上面一样(不使用字符流)

  • io流
  • 根据类型流分为字节流和字符流
  • 字节流:
  • 1.文件读取和写入
  • 方向分为 操作分为 理解
  • io包的意义:i--input 输入流 文件的读取 访问电脑磁盘,所以是输入命令进电脑磁盘,读取磁盘里面文件信息
  • o--output 输出流 文件的写入 把电脑磁盘中信息拿出来,所以是输出信息,写入到一个地方将其保存
  • 注意:与字面意思截然相反
  • 2.1 FileInputStream--读取文件数据
  • read()一次读一个字节,读取ascii码
  • read(byte[])读取一定数量的字节,存储在byte[]容器中
  • 2.2 FileOutputStream--在文件中写入数据
  • write(int)一次写一个字节
  • write(byte[])写入一定数量的字节
  • 2.字符流:
  • 读:一个--FileReader
  • 一行--BufferedReader
  • 写:一行--FileWriter
  • 多行--BufferedWriter配合:newLine()创建行--flush()每次刷新
  • 根据流的方向:输入,输出
  • 根据流的类型:字节流,字符流(操作文本文件)
  • 所有以Stream结尾的都是字节流
  • 所有以Reader或者Writer结尾的都是字符流
  • InputStreamReader是将字节流转换成字符流
  • OutputStreamWriter是将字符流转成字节流
  • 注意:关闭
  • 2.读取性能好,有缓冲功能(重点使用)
  • 3.1 BufferedInputStream(使用一样)
  • 3.2 BufferedOutputStream(使用一样)
  • 把读取对象放入构造方法中使用
  • 例如:FileInputStream fis=new FileInputStream(file);
  • BufferedInputStream bis=new BufferedInputStream(fis)
  • 使用bis调用方法性能好,有缓冲功能
  • 注意:都关闭

  • package com.zking;
  • import java.io.File;
  • import java.io.IOException;
  • import java.util.Date;
  • public class Demo {
  • public static void main(String[] args) {
    •  
      • // File f=new File("d:\\a.txt");
      • // //测试file类中的方法
      • // System.out.println(f.getAbsolutePath());
      • // System.out.println(f.getPath());
      • // System.out.println(f.getParent());//上一级
      • // System.out.println(f.getName());
      • // System.out.println(f.lastModified());//得到最后修改时间的毫秒值
      • // Date d=new Date(f.lastModified());
      • // System.out.println(d.toLocaleString());
      • // System.out.println(f.isFile());
      • // System.out.println(f.isDirectory());
      • // System.out.println(f.exists());
      • // System.out.println(f.length());//得到文件大小b
      • //
      • // //得到电脑磁盘
      • // File[] l = File.listRoots();
      • // for (File file : l) {
        • // System.out.println(file);
      • // }
      • //
      • //创建文件夹
      • // File f=new File("d:\\abc");
      • //f.exists()是否存在 取反不存在返回true
      • // if(!f.exists()) {//不存在的时候创建
        • // f.mkdir();
        • // System.out.println("OK");
      • // }
      • //创建文件
      • // File f=new File("d:\\abc\\a.txt");
      • // if(!f.exists()) {
        • // try {
          • // f.createNewFile();
          • // System.out.println("OK");
        • // } catch (IOException e) {
          • // // TODO Auto-generated catch block
          • // e.printStackTrace();
        • // }
      • // }
    • //删除
    • // File f=new File("d:\\abc");
    • // if(f.exists()) {
      • // boolean d = f.delete();
      • // System.out.println(d);
    • // }
    • //查找文件夹中的文件
    • // File f=new File("d:\\abc");
    • //返回文件夹中所有文件名
    • // String[] list = f.list();
    • // for (String string : list) {
      •  
        • // System.out.println(string);
      • // }
    • //返回文件夹中所有文件或者文件夹
    • // File[] lf = f.listFiles();
    • // for (File file : lf) {
      •  
        • // System.out.println(file.getName());
      • // }
    • //算法:递归--自己玩 递归用来写方法,方法中调用方法(自己)
    • // 1.查找文件夹下所有文件
    • // File f=new File("c:\\");
    • // Demo d=new Demo();
    • // d.selFiles(f);
    • // 2.删除文件夹下所有文件,删除文件夹
    • // 下所有txt文件
    • // File f=new File("d:\\abc");
    • // Demo d=new Demo();
    • // d.delAll(f);
    • // System.out.println("OK");
    • //txt文件
    • // File f=new File("d:\\abc");
    • // Demo d=new Demo();
    • // d.delAll(f,"txt");
    • // System.out.println("OK");
    • // 3.使用递归完成斐波那契数列1,1,2,3,5,8,
    • // 13,21,34,55,.....
    • // Demo d=new Demo();
    • // int num = d.num(10);
    • // System.out.println(num);
    • }
  • public void selFiles(File f) {
    • //1.判断是文件夹还是文件
    • if(f.isFile()) {
      • //文件就直接打印
      • System.out.println(f.getName());
    • }else if(f.isDirectory()) {//2.判断是否是文件夹
      • //如果是文件夹,就再次得到文件夹中所有文件
      • File[] lf = f.listFiles();
      • for (File file : lf) {
        •  
          • //遍历得到的所有文件或者文件夹
        • //然后没遍历一个文件,就自己调用自己的方法
        • //参数是当前文件
        • selFiles(file);
        • }
    • }
  • }
  • public void delAll(File f) {
    • if(f.isFile()) {
      • f.delete();
    • }else if(f.isDirectory()) {
      • File[] lf = f.listFiles();
      • for (File file : lf) {
        •  
          • delAll(file);
        • }
    • }
  • }
  • public void delAll(File f,String s) {
    • if(f.isFile()) {
      • String []st=f.getName().split("\\.");
      • if(st[st.length-1].equals(s)) {
        • f.delete();
      • }
    • }else if(f.isDirectory()) {
      • File[] lf = f.listFiles();
      • for (File file : lf) {
        •  
          • delAll(file,s);
        • }
    • }
  • }
  • //1+1+1+1+1。。。。。。
  • public int num(int index) {//3 4
    • if(index==1 ||index==2) {
      • return 1;
    • }else {
      • return num(index-1)+num(index-2);
    • }
  • }
  • }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值