JavaSE基础及案例(一)IO流与多线程(上)

本文详细介绍了Java中的IO流概念,包括字符输入流、字节输入流、缓冲区输入流等,并提供了多个实战案例,如文件拷贝、文本字符统计等。此外,还深入探讨了多线程的实现方式,如继承Thread、实现Runnable接口,以及线程同步、守护线程、死锁等重要概念,并通过示例解释了线程安全问题。
摘要由CSDN通过智能技术生成

IO流

1. IO流知识点
IO流(字符输入流FileReader) 字节输入流 FileInputStream

IO流(字符输出流FileWriter) 字节输出流 FileOutputStream

字符缓冲区输入流( BufferedReader)
字节缓冲区输入流BufferedInputStream

字符缓冲区输出流( BufferedWriter)
字节缓冲区输出流BufferedOutputStream

2. 实战案例
案例2.1 将键盘录入拷贝到当前项目下的text.txt中,键盘录入数据遇到quit时就退出

public class demo12 {
     /**
      * @param args
      * 将键盘录入拷贝到当前项目下的text.txt中,键盘录入数据遇到quit时就退出
      *
      * 1.创建键盘录入对象
      * 2.创建输出流对象,关联text.txt文件
      * 3.定义无限循环
      * 4.遇到quit退出
      * 5.没有quit就将内容写出
      * 6.关流
      * @throws IOException
      */
     public static void main(String[] args) throws IOException{
          Scanner sc = new Scanner(System.in);//创建键盘录入对象
          //2.创建输出流对象,关联text.txt
          FileOutputStream fos = new FileOutputStream("text.txt");
          //3.定义无限循环
          while(true){
              String nl = sc.nextLine();//将键盘录入对象写在line中
              //4.遇到quit退出
              if("quit".equals(nl)){
                   break;
              }else{//5.没有quit就将内容写出
                   fos.write(nl.getBytes());//字符串必须转换成字节数组
                   fos.write("\r\n".getBytes());
              }
              fos.close();
          }
     }
}

结果:将111111.txt写入到了text文件中。。。。。。。。。。。。。。。
***案例2.2***模拟收费软件试用次数

public class test {
     /**
      * @param args
      * 模拟试用版软件,10次机会
      *
      * 1.创建带缓冲的输入流对象,使用readLine方法,保证数据的原样性
      * 2.将读到的字符串转换成int数;
      * 3.对int数进行判断,如果大于0,将其--写回去,如果不大于0,提示请购买正版
      * 4.在if判断将要--的结果打印,并将结果通过输出流写到文件上
      * @throws IOException
      */
     public static void main(String[] args) throws IOException{
          //1.创建带缓冲的输入流对象,使用readLine方法,保证数据的原样性
          BufferedReader br = new BufferedReader(new FileReader("config.txt"));
          //2将读到的字符串转换成int类型
          String line = br.readLine();
          //将数字字符串转换成数字
          int times = Integer.parseInt(line);
          //3.对int数进行判断,如果大于0,将其--写回去,如果不大于0,提示请购买正版
          if(times>0){
              System.out.println("您还有"+times--+"次机会");
              FileWriter fw = new FileWriter("config.txt");
              fw.write(times+"");
              fw.close();
          }else{
              System.out.println("已结束,请购买正版");
          }
          //关闭流
          br.close();
     }
}

案例3 IO流获取文本字符出现次数

/**
 * @author 
 *
 *1.创建带缓冲的输入流对象
 *2.创建双列集合对象
 *3.将读到的字符存储在双列集合中,存储的时候做判断,如果不包含这个键
 *   就将键和1存储,如果包含这个键,就将键和值加1存储
 *4.关闭输入流
 *5.创建输出流
 *6.遍历集合,将集合中的内容写到times.txt中,
 *7.关闭输出流
 */
public class demo1_Wrap {
     public static void main(String[] args) throws IOException{
          //1.创建待缓冲的输入流对象
          BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
          //2.创建双列集合
          TreeMap<Character, Integer> tm = new TreeMap<>();
          //3.判断
          int ch;
          while((ch=br.read())!=-1){
              //向下强转
              char c = (char)ch;
              /*if(!tm.containsKey(c)){//如果集合不包含,就把字符加入,计数1次
                   tm.put(c, 1);
              }else{//如果集合已经包含该字符,则次数+1(次数通过键获取值>>>tm.get(c)+1)
                   tm.put(c, tm.get(c)+1);
              }*/
              //三元运算符表示
              tm.put(c, !tm.containsKey(c)? 1 :tm.get(c)+1);
              
          }
          //4.关流
          br.close();
          //
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值