当前位置: 首页 > news >正文

IO流与多线程

目录

一、IO流体系

1. File类基础操作

2. 字节流体系

3. 字符流体系

4.应用:

二、多线程体系

1. 线程创建方式对比

一、IO流体系

1. File类基础操作

核心知识点:

  • File类的作用:表示文件或目录的抽象路径名,用于文件和目录的创建、删除、重命名、查询等操作
  • 相对路径与绝对路径:理解两种路径的区别和使用场景
  • 路径分隔符:Windows使用\,Unix/Linux使用/,Java中使用File.separator保证跨平台性
  • 重要方法分类
    • 判断型exists(),isFile(),isDirectory(),canRead(),canWrite(),isHidden()
    • 获取型getName(),getPath(),getAbsolutePath(),getParent(),length()
    • 操作型createNewFile(),mkdir()/mkdirs(),delete(),renameTo()
    • 遍历型list(),listFiles(),list(FilenameFilter)

注意事项:

  • mkdir()只能创建单级目录,mkdirs()可创建多级目录

  • delete()无法删除非空目录
  • 文件操作前应先判断文件是否存在

2. 字节流体系

字节流基类:InputStream / OutputStream
├── 文件字节流:FileInputStream / FileOutputStream
├── 缓冲字节流:BufferedInputStream / BufferedOutputStream
├── 数据字节流:DataInputStream / DataOutputStream
├── 对象字节流:ObjectInputStream / ObjectOutputStream
├── 打印字节流:PrintStream
└── 字节数组流:ByteArrayInputStream / ByteArrayOutputStream

3. 字符流体系

字符流基类:Reader / Writer
├── 文件字符流:FileReader / FileWriter
├── 缓冲字符流:BufferedReader / BufferedWriter
├── 转换流:InputStreamReader / OutputStreamWriter
├── 打印字符流:PrintWriter
└── 字符数组流:CharArrayReader / CharArrayWriter

缓冲字符流特有方法

  • BufferedReader.readLine():读取一行文本
  • BufferedWriter.newLine():写入换行符

4.应用:

package o_IO.Test2; import java.io.*; import java.util.Scanner; public class Dome2 { public static void main(String[] args) throws IOException { /* 需求:写一个登陆小案例。(添加锁定账号功能) 步骤: 将正确的用户名和密码手动保存在本地的userinfo.txt文件中。 保存格式为:username=zhangsan&password=123&count=0 让用户键盘录入用户名和密码 比较用户录入的和正确的用户名密码是否一致 如果一致则打印登陆成功 如果不一致则打印登陆失败,连续输错三次账号锁定 */ //读取正确用户密码 BufferedReader br = new BufferedReader(new FileReader("src\\o_IO\\userinfo.txt")); String line = br.readLine();//username=zhangsan&password=123&count=0 br.close(); String[] split = line.split("&"); String rightUsername = split[0].split("=")[1]; String rightPassword = split[1].split("=")[1]; int count = Integer.parseInt(split[2].split("=")[1]); //用户输入账号密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名"); String username = sc.nextLine(); System.out.println("请输入密码"); String password = sc.nextLine(); //判断账号 if (username.equals(rightUsername) && password.equals(rightPassword) && count < 3) { System.out.println("登陆成功"); //count清零 writeInof(rightUsername,rightPassword,0); } else { if (count < 3) { count++; System.out.println("登陆失败,还剩下"+(3-count)+"次机会"); }else { System.out.println("账户锁定"); } writeInof(rightUsername,rightPassword,count); } } //定义方法将数据写回 public static void writeInof(String rightUsername,String rightPassword,int count) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter("src\\o_IO\\userinfo.txt")); bw.write("username=" + rightUsername + "&password=" + rightPassword + "&count=" + count); bw.close(); } }

二、多线程体系

1. 线程创建方式对比

  1. 继承Thread类
    优点:简单直接
    缺点:单继承限制,不能继承其他类
    适用:简单任务,不需要共享资源
    package p_Thread.Chreadcase1; public class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName()+"Hello World"); } } } package p_Thread.Chreadcase1; public class ThreadDome { public static void main(String[] args) { /*多线程的第一种启动方式: 1.自己定义一个类继承Thread 2.重写run方法 3.创建子类的对象,并启动线程 */ MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); t1.setName("线程一"); t2.setName("线程二"); t1.start(); t2.start(); } }
  2. 实现Runnable接口
    优点:避免单继承限制,资源共享方便
    缺点:不能直接获取线程执行结果
    适用:需要资源共享的多线程
    package p_Thread.Chreadcase2; public class MyRun implements Runnable{ @Override public void run() { for (int i = 0; i < 100; i++) { //获取当前线程对象 Thread t = Thread.currentThread(); System.out.println(t.getName()+"HelloWorld"); } } } package p_Thread.Chreadcase2; public class ThreadDome { public static void main(String[] args) { /* 多线程的第二种启动方式: 1.自己定义一个类实现Runnable接口 2.重写里面的run方法 3.创建自己的类的对象 4.创建一个Thread类的对象,并开启线程 */ //创建MyRun对象 //表示多线程要执行的任务 MyRun mr = new MyRun(); //创建线程对象 Thread t1 = new Thread(mr); Thread t2 = new Thread(mr); //给线程起名字 t1.setName("线程一"); t2.setName("线程二"); //开启线程 t1.start(); t2.start(); } }
  3. 实现Callable接口
    优点:可以获取返回值,可以抛出异常
    缺点:需要FutureTask包装
    适用:需要返回结果的多线程任务
    package p_Thread.Chreadcase3; import java.util.concurrent.Callable; public class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { int sum=0; for(int i=0;i<=100;i++){ sum+=i; } return sum; } } package p_Thread.Chreadcase3; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class ThreadDome { public static void main(String[] args) throws ExecutionException, InterruptedException { /* 多线程的第三种实现方式: 特点:可以获取到多线程运行的结果 1.创建一个类MyCallable实现callable接口 2.重写ca11 (是有返回值的,表示多线程运行的结果) 3.创建MyCallable的对象(表示多线程要执行的任务) 4.创建FutureTask的对象(作用管理多线程运行的结果) 5.创建Thread类的对象,并启动(表示线程) */ //创建MyCallable对象(表示多线程要执行的任务) MyCallable mc = new MyCallable(); //创建FutrueTask对象(管理多线程运行结果) FutureTask<Integer> ft = new FutureTask<>(mc); //创建线程对象 Thread t = new Thread(ft); //启动线程 t.start(); //获取结果 Integer result = ft.get(); System.out.println(result); } }
http://www.jsqmd.com/news/92320/

相关文章:

  • 快速生成vue模板代码,零基础入门到精通,收藏这篇就够了
  • 8、印度通过增强现实(AR)和虚拟现实(VR)实现包容性教育
  • 前端场景题,零基础入门到精通,收藏这篇就够了
  • 9、探索元宇宙中利用摄影测量和其他3D重建工具的增强现实实际用例
  • 2025视频生成效率革命:Wan2.2如何让消费级显卡实现电影级创作
  • Holo1.5开源:7B模型实现GPT-4级界面操作,成本骤降80%重塑智能代理生态
  • 采用Flask框架的不动产租赁业务管理系统--毕设附源码68285
  • WebGL渲染引擎图层合成技术终极指南:从深度冲突到完美融合的完整解析
  • 13、OpenStack网络构建与实例连接全解析
  • 值得收藏I财务大数据分析师职业技术证书报考条件全解析
  • 大模型备案,到底卡在哪?
  • 部署到服务器调用麦克风没有ssl证书的情况下的临时使用方式
  • 1.59倍推理加速!T-pro-it-2.0-eagle轻量化模型改写大模型部署规则
  • 14、OpenStack 实例网络连接与安全组管理指南
  • 2025年靠谱的六角不锈钢螺栓用户口碑最好的厂家榜 - 品牌宣传支持者
  • 数据库死锁问题重现:测试场景构建与排查指南
  • 2025年智能检索工具五大服务商推荐:实力强的智能检索平台有 - myqiye
  • 15、OpenStack 安全组管理全攻略
  • 2025靠谱的Ai搜索团队TOP5:信誉佳的智能搜索与性价比 - 工业推荐榜
  • 17、使用 Neutron 创建独立路由器指南
  • DBeaver数据库管理终极入门指南:从零开始掌握高效数据管理的10个技巧
  • 2025年比较好的135度异型铰链行业内口碑厂家排行榜 - 行业平台推荐
  • 18、使用 Neutron 创建独立路由器
  • 2025年口碑好的高光谱品牌厂家推荐,专业高光谱视觉解决方案 - mypinpai
  • 深入解析:机器学习用于股票预测的策略
  • HTTP/2服务器推送:突破性网络优化技术深度解析
  • 2025腾讯混元7B大模型本地部署实战指南:从零搭建到高效推理
  • [Makefile.Debug:722: debug/moc_mainwindow.o] Error 1。昨天qtcreator还好好的,今天就抱这个错。我重启了电脑就整出来
  • ZR2025 Summer
  • 物流配送中心信息化管理|基于springboot + vue物流配送中心信息化管理系统(源码+数据库+文档)