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

Day23-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\InOut

递归

递归公式

递归结束语句

package com.recursion;public class RecursionTest1 {public static void main(String[] args) {test1();}public static void test1(){System.out.println("------test1------");test1();//直接方法递归//StackOverflowError 栈溢出}public static void test2(){System.out.println("------test2------");test3();}public static void test3(){test2();//间接递归}
}

直接递归(常用)

间接递归

package com.recursion;public class RecursionTest2 {public static void main(String[] args) {int f5 = f(5);System.out.println("5的阶乘是"+f5);int f6 = f1(6);System.out.println("1到6的累加求和是"+f6);}public static int f(int n){//终结点if(n==1){return 1;}else {return f(n-1)*n;}}public  static int f1(int n){if(n==1){return 1;}else  {return f1(n-1)+n;}}
}

文件搜索

package com.recursion;import java.io.File;
import java.io.IOException;public class RecursionTest3 {public static void main(String[] args) throws IOException {searchFile(new File("C:/"),"aaa");}/*** 去目录下搜索某个文件* @param dir 目录* @param fileName 要搜索的文件名称*/public static void searchFile(File dir,String fileName) throws IOException {//1、先把非法的情况拦截if(dir == null||!dir.exists()||!dir.isDirectory()){//❗ 原代码此处有 bug:!dir.isFile() 会导致当 dir 是文件夹时也被拦截(因为文件夹的 isFile() 返回 false),导致搜索无法执行。需修正为 !dir.isDirectory()(判断是否为文件夹)。return;//代表无法搜索}//2、dir不是null,存在,一定是目录对象File[] files = dir.listFiles();//3、判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象if(files!=null&&files.length>0){//4、遍历全部一级文件对象for (File file : files) {//判断文件是否为文件,还是文件夹if(file.isFile()){if(file.getName().contains(fileName)){System.out.println("找到了"+fileName+"的文件路径:"+file.getAbsolutePath());Runtime runtime = Runtime.getRuntime();//这两行是文件启动程序,exec是启动runtime.exec(file.getAbsolutePath());//这两行是文件启动程序,gc是JVM执行垃圾回收}}else if(file.isDirectory()){//是文件夹,重复这个过程searchFile(file,fileName);}}}}
}

ASCII字符集

使用一个字节(8位)存储,首位是0,一共有2^7

GBK字符集

一个中文字符编码成两个字节,GBK兼容了ASCII字符集,包含了两万多个字符

GBK规定:汉字的第一个字节的第一位必须是1,一共2^15,32768个

Unicode字符集

是国际组织制定的,可以容纳世界上所有文字、符号的字符集

UTF-32

四个字节表示一个字符

UTF-8

可变长度的编码方案,共分为四个长度区:1个字节、2个字节、3个字节、4个字节

  1. 英文和数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节
  2. image-20251025105228813
  3. image-20251025105948952

IO流

Input和Output

image-20251025111858295

image-20251025112637851

FileInputStream(文件字节输入流)

以内存为基准,可以把磁盘中文件的数据以字节的形式读入到内存中去

每次只读取一个字节,读取性能较差,并且读取汉字输出会乱码

image-20251025150053960

package Basic.src.com.InOut;import javafx.application.Application;
import javafx.stage.Stage;import java.io.*;public class FileInputStreamTest1  {public static void main(String[] args) throws IOException {//1、创建文件字节输入流管道,与源文件接通//InputStream is = new FileInputStream(new File("Basic\\src\\itheima01.txt"));//下面是简化写法,推荐使用InputStream is = new FileInputStream("Basic\\src\\itheima01.txt");//        //2、开始读取文件的字节数据
//        int b1 = is.read();
//        System.out.println(b1);
//        System.out.println((char)b1);
//
//        int b2 = is.read();
//        System.out.println((char)b2);
//
//        int b3 = is.read();
//        System.out.println(b3);//返回-1通知文件已经读完了
//        System.out.println((char)b3);//3、使用循环改造上述int b;//用于记住上述代码while ((b = is.read()) != -1) {System.out.print((char)b);}//读取数据的性能很差!//应该尽量减少系统调用硬盘中的数据的频次//读取汉字输出会乱码!无法避免//流使用完毕后,必须关闭!释放系统资源!is.close();}
}

释放内存

try-catch-finally

在finally区释放内存,无论try中的程序是正常执行了还是出现异常,最后都一定会执行finally区,除非JVM终止

一般用于在程序执行完成后进行资源的释放操作(专业做法)

package Basic.src.com.InOut;import java.io.*;public class Test2 {public static void main(String[] args)  {InputStream is = null;OutputStream os =null;try {//在is和os被赋值之前出现异常的话会使得is和os在null的情况下被close,出现空指针异常//需求:复制照片//1、创建一个字节输入管道与源文件接通is = new FileInputStream("Basic\\src\\itheima03.txt");//2、创建一个字节输出管道与目标字节接通os = new FileOutputStream("Basic\\src\\itheima03copy.txt");//3、创建一个字节数组专用字节数据byte[] buffer = new byte[1024];//1KB//4、从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少int len;//记住每次读取多少个字节while((len = is.read(buffer))!=-1){os.write(buffer,0,len);}//后创建的流要先关掉,先创建的流要后关掉System.out.println("复制完成");} catch (IOException e) {throw new RuntimeException(e);} finally {try {if (os!=null)os.close();//避免因为is和os被赋值前出现异常导致的提前调用} catch (IOException e) {throw new RuntimeException(e);}try {if (is!=null)is.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}

try-with-resource

开始于JDK7

把要用的流对象放在try后面的( )里面,可以不需要使用finally

( )内只能放置资源,否则报错,资源指的是最终实现了AutoCloseable接口,重写了close()方法

package Basic.src.com.InOut;import java.io.*;public class Test3 {public static void main(String[] args) throws Exception {try(//在is和os被赋值之前出现异常的话会使得is和os在null的情况下被close,出现空指针异常//需求:复制照片//1、创建一个字节输入管道与源文件接通InputStream is = new FileInputStream("Basic\\src\\itheima03.txt");//2、创建一个字节输出管道与目标字节接通OutputStream  os = new FileOutputStream("Basic\\src\\itheima03copy.txt");//这里只能放置资源型对象(比如流对象)//什么是资源呢?资源都是会实现AutoCloseable接口//用完之后会自动被调用close方法完成释放资源的操作//public abstract class OutputStream implements Closeable, Flushable//public interface Closeable extends AutoCloseableMyConnection connection = new MyConnection()//因为Myconnection类实现了AutoCloseable接口并重写了close()方法,被视为资源型) {//在is和os被赋值之前出现异常的话会使得is和os在null的情况下被close,出现空指针异常//3、创建一个字节数组专用字节数据byte[] buffer = new byte[1024];//1KB//4、从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少int len;//记住每次读取多少个字节while((len = is.read(buffer))!=-1){os.write(buffer,0,len);}//后创建的流要先关掉,先创建的流要后关掉System.out.println("复制完成");System.out.println(connection);} catch (IOException e) {throw new RuntimeException(e);}}
}
package Basic.src.com.InOut;public class MyConnection implements AutoCloseable{@Overridepublic void close() throws Exception {System.out.println("释放了与某个硬件的连接资源");}
}

字符流

适合读写文本文件的内容

FileReader

把文件(磁盘或网络)中的数据以字符的形式读取到内存中

image-20251025192439555

package Basic.src.com.InOut.FileReaderWriter;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;public class FileReaderTest1 {public static void main(String[] args) throws Exception {try (//创建一个文件字符输入流管道与源文件接通Reader fr = new FileReader("Basic\\src\\com\\InOut\\FileReaderWriter\\itheima01.txt");){
//            //2、读取文本文件的内容
//            int c;
//            while ((c = fr.read()) != -1) {//read返回的是int
//                System.out.print((char)c);
//            }//3、每次读取多个字符char[] buffer = new char[3];int len;while((len = fr.read(buffer))!= -1) {String str = new String(buffer, 0, len);System.out.print(str);}//性能是比较不错的!} catch (Exception e) {e.printStackTrace();;}}
}
http://www.gsyq.cn/news/30419.html

相关文章:

  • LLM学习记录DAY12
  • 深入解析:Zark Lab 与 Walrus 合作,建立内容发现、可访问性与实用性的基础 AI 智能层
  • 前后端分离毕设课题:基于React.js+Java+Springboot框架+Mysql数据库在线买菜商城专业的系统设计与实现
  • 2025 年 Python 数据分析全栈学习路线:从入门到精通的进阶指南 - 实践
  • Windows 11 家庭版关闭自动更新
  • 权威调研榜单:石英砂生产线厂家TOP3榜单好评深度解析
  • FSEventsParser脚本升级与macOS取证技术解析
  • redis食用方法
  • cnbook主题风格美化 —— 01(未完成)
  • 【嵌入式】IIC和SPI的比较
  • SpringBoot 的配置文件与日志 - 实践
  • 给web增加简单的ai对话功能
  • 2025年10月离心干燥机厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • Jetbrains IDEA or Webstorm新版本回退到之前的UI风格
  • 解码Linux文件IO之开机动画原理与实现
  • 2025 年异构烷供应厂家推荐:异构十二烷、异构十四烷、异构十六烷、异构二十烷最新推荐榜,聚焦企业技术实力与市场口碑深度解析
  • 2025 年镀锌方管制造厂家最新推荐排行榜:聚焦广东佛山优质品牌,助力工程采购精准选型异形/Q235/冷轧带钢/热浸/热/冷/热镀锌方管立柱厂家推荐
  • AppSec与事件响应的融合实践
  • PlantAssistant-免费查看RVM/VUE
  • 2025 年对焊机源头厂家最新推荐排行榜权威发布,含闪光 / 成型 / 打圈 / T 型 / 双头 T 型对焊机行业口碑榜单
  • 2025市面上双曲铝单板品牌、行业内双曲铝单板厂家、市场双曲铝单板产品、口碑好的双曲铝单板厂家、2025年双曲铝单板供应商权威排名
  • 2025市面上双曲铝单板品牌、行业内双曲铝单板生产厂家、市场双曲铝单板供应厂家、目前双曲铝单板实力厂家、口碑好的双曲铝单板公司排行榜
  • 2025 年调直机厂家最新推荐排行榜权威发布:聚焦伺服 / 高速 / 铁线 / 扁铁机型,揭秘行业优质企业
  • 2025年市面上中压电缆品牌、行业内中压电缆公司、口碑好的中压电缆品牌、有实力的中压电缆产品、中压电缆公司推荐榜单深度解析
  • 高等数学 —— 微分的具体形式
  • docker 端口映射
  • 251025
  • 关于我:新的开始,新的记录
  • 2025 年知识库应用平台最新推荐排行榜!企业 / 个人 / 协同 / 智能等多场景适配,附权威测评与选择指南
  • 深入解析:深度学习调参指南:Batch Size的选择策略与实践