news 2026/4/15 8:59:38

IO流与多线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 16:31:41

Session、Cookie、Token讲解

目录一、Cookie讲解1、概念2、Cookie 的主要属性3、使用流程4、cookie 主要特点二、Session讲解1、Session概念2、流程图3、Session和Cookie的区别三、token讲解1、概念2、Token的组成3、Token认证流程四、三者对比我们都知道 HTTP 协议是无状态的&#xff0c;所谓的无状态就是…

作者头像 李华
网站建设 2026/4/12 0:50:47

快速上手React代码差异可视化组件

快速上手React代码差异可视化组件 【免费下载链接】react-diff-view A git diff component 项目地址: https://gitcode.com/gh_mirrors/re/react-diff-view 还在为代码审查时眼花缭乱的差异对比而烦恼吗&#xff1f;react-diff-view正是你需要的解决方案&#xff01;这个…

作者头像 李华
网站建设 2026/4/8 18:55:27

MySQL中16个写sql的好习惯-学习笔记

1. 写完SQL先explain查看执行计划&#xff08;SQL性能优化&#xff09;日常开发写SQL的时候&#xff0c;尽量养成这个好习惯呀&#xff1a;写完SQL后&#xff0c;用explain分析一下&#xff0c;尤其注意走不走索引。explain select * from user where userid 10086 or age 18;2…

作者头像 李华
网站建设 2026/4/11 22:22:06

Typora代码块痛点破解方案:从语法高亮到跨平台兼容的全面优化

Typora作为一款所见即所得的Markdown编辑器&#xff0c;凭借其简洁直观的界面和高效的实时预览功能&#xff0c;已成为技术文档撰写者的首选工具。然而&#xff0c;其代码块功能在实际使用中仍存在诸多痛点&#xff0c;包括语法高亮支持有限、长代码块性能问题、复制格式混乱和…

作者头像 李华
网站建设 2026/4/8 18:28:36

无人机操控模式适用场景全解

无人机操控模式适用场景全解一、三大操控模式概览美国手(Mode 2)&#xff08;全球主流&#xff0c;占70-85%&#xff09;左手&#xff1a;升降(油门) 转向(偏航)右手&#xff1a;前后(俯仰) 左右(横滚)核心优势&#xff1a;操作直观&#xff0c;符合人体工程学&#xff0c;培…

作者头像 李华