JAVA进阶知识点总结 9【File类、递归】字节输入流InputStream 字节输出流OutputStream 字符输出流Writer 字符输入流Reader

本文主要是介绍JAVA进阶知识点总结 9【File类、递归】字节输入流InputStream 字节输出流OutputStream 字符输出流Writer 字符输入流Reader,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01.第一章:File类_概述:

1).java.io.File(类):它可以表示磁盘上的一个文件/目录,它包含了一些方法,可以获取磁盘上这个文件/目录的一些属性信息:文件大小、名称、路径、最后时间、是否可读、是否可写。

注意:File类不能读、写文件内容。
需要读写文件内容,要用到IO流的类。

java中的转义字符

//	代表一个反斜线字符''\'
\"	代表一个双引号字符
\'	代表一个单引号(撇号)字符
\\	代表一个反斜线字符''\'
\t	水平制表(HT) (跳到下一个TAB位置)
\b	退格(BS) ,将当前位置移到前一列
\f	换页(FF),将当前位置移到下页开头
\n	换行(LF) ,将当前位置移到下一行开头
\r	车(CR) ,将当前位置移到本行开头

02.第一章:File类_File类的构造方法:

1).File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

2).File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。

3).File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
示例代码:

	public static void main(String[] args) {
//        System.out.println("\t我说:Hello\\\\World!");//\",\',\\,\t,\b,\f,\n,\r//1.File(String pathName)File f1 = new File("d:\\demo01.txt");//2.File​(String parent, String child):D:\EclipseWorkspace\MediaPlayer\bin\css\playTable.cssFile f2 = new File("D:","\\EclipseWorkspace\\MediaPlayer\\bin\\css\\playTable.css");//3.File​(File parent, String child)File f3 = new File("d:");File f4 = new File(f3,"\\EclipseWorkspace\\MediaPlayer\\bin\\css\\playTable.css");//4.绝对路径构造--带盘符的路径File f5 = new File("d:\\demo01.txt");【绝对路径】//5.相对路径构造--IDEA项目根目录去找File f6 = new File("demo01.txt");//【相对路径】File f7 = new File("jfkdlsjfksljfdskjfeel");System.out.println("程序结束...");}

03.第一章:File类_绝对路径和相对路径

1).绝对路径:带盘符的路径;
new File(“d:\demo01.txt”);
2).相对路径:不带盘符的路径–从项目根目录下开始找
new File(“demo01.txt”);

04.第一章:File类_File类的常用方法_获取的方法

1).public String getAbsolutePath() :返回此File的绝对路径名字符串。

2).public String getPath() :获取构造路径。

3).public String getName() :返回由此File表示的文件或目录的名称。

4).public long length() :返回由此File表示的【文件】的长度。不能操作目录。单位:字节
示例代码:

public class Demo {public static void main(String[] args) {File file1 = new File("d:\\demo01.txt");File file2 = new File("demo02.txt");System.out.println("file1的绝对路径:" + file1.getAbsolutePath());System.out.println("file2的绝对路径:" + file2.getAbsolutePath());System.out.println("file1的构造路径:" + file1.getPath());System.out.println("file2的构造路径:" + file2.getPath());System.out.println("file1的名字:" + file1.getName());System.out.println("file2的名字:" + file2.getName());System.out.println("file1的长度:" + file1.length());File file3 = new File("d:\\JDK");System.out.println("file3(目录)的长度:" + file3.length());//0或者其它数字,但不是这个目录的总大小}
}

05.第一章:File类_File类的常用方法_判断的方法

1).public boolean exists() :此File表示的文件或目录是否实际存在。

2).public boolean isDirectory() :此File表示的是否为目录。

3).public boolean isFile() :此File表示的是否为文件。
示例代码:

public class Demo {public static void main(String[] args) {File file1 = new File("d:\\demo01.txt");File file2 = new File("e:\\jfkdsljf");File file3 = new File("d:\\jdk");System.out.println("file1是否存在:" + file1.exists());//trueSystem.out.println("file2是否存在:" + file2.exists());//falseSystem.out.println("file1是否是目录:" + file1.isDirectory());//falseSystem.out.println("file2是否是目录:" + file2.isDirectory());//falseSystem.out.println("file3是否是目录:" + file3.isDirectory());//trueSystem.out.println("file1是否是文件:" + file1.isFile());//trueSystem.out.println("file2是否是文件:" + file2.isFile());//falseSystem.out.println("file3是否是文件:" + file3.isFile());//false}
}

06.第一章:File类_File类的常用方法_创建和删除的方法

1).public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

2).public boolean delete() :删除由此File表示的文件或【空目录】。

3).public boolean mkdir() :创建单级目录。

4).public boolean mkdirs() :创建多级目录。
示例代码:

public class Demo {public static void main(String[] args) throws IOException {File file1 = new File("aa");//文件File file2 = new File("mm");//目录//创建文件//    System.out.println("创建文件:" + file1.createNewFile());System.out.println("删除文件:" + file1.delete());System.out.println("删除空目录:" + file2.delete());File file3 = new File("xx");File file4 = new File("mm/nn/xx/yy");System.out.println("创建单级目录:" + file3.mkdir());System.out.println("创建多级目录:" + file4.mkdirs());}
}

07.第一章:File类_练习_遍历单级目录查找所有java

1).public String[] list():如果此file对象表示的是目录,此方法将获取此目录下所有子文件、子目录的名称数组。

2).public File[] listFiles():如果此file对象表示的是目录,此方法将获取此目录下所有子文件、子目录的File对象数组。
示例代码:

public class Demo {public static void main(String[] args) {//1.构造一个初始目录File file = new File("d:\\单级目录");//2.获取此目录下所有的子文件/子目录的File[]数组File[] nameArray = file.listFiles();//3.遍历File[]数组for (File s : nameArray) {//4.判断是否是文件,并且文件名是否是.java结尾if (s.isFile() && s.getName().endsWith(".java")) {//5.如果是:打印System.out.println(s);}}}
}

08.第二章:递归_前奏-方法调用解析

在这里插入图片描述

09.第二章:递归_递归的概念_示例_图示

1).什么是“递归”:指方法调用其本身。

2).递归的注意事项:

1).递归的层次不能太深,否则栈溢出;
2).递归必须要有出口,否则就是死递归,最终导致栈溢出;3).构造方法不能递归调用:class Student{public Student(){this();//递归调用,直接:编译错误}}

10.第二章:递归_练习_递归求阶乘

1).什么是“阶乘”:例如5的阶乘,可以表示为:5! = 5 * 4 * 3 * 2 * 1;
2).使用循环:int result = 1;for(int i = 5 ; i >= 1 ; i--){result *= i;}System.out.println("5阶乘:" + result);//120
3).使用递归:1205! = 5 * 4!(?)244! = 4 * 3!(?)63! = 3 * 2!(?)22! = 2 * 1!(1)1main(){int result = jieCheng(5);System.out.println("5的阶乘的结果是:" + result);//120}public static int jieCheng(int n){if(n == 1){return 1;}return n * jieCheng(n - 1);}

11.第二章:递归_练习_递归遍历多级目录

public class Demo {public static void main(String[] args) {//1.封装初始目录;d:\\多级目录File dir = new File("d:\\多级目录");//--------------递归方法---------------------//listFile(dir);}public static void listFile(File dir){//2.获取目录下所有的子文件/子目录的File[]数组File[] fileArray = dir.listFiles();//3.遍历每一个File,判断是否是文件:if (fileArray != null) {for (File f : fileArray) {if (f.isFile()) {//      是:打印System.out.println(f);}else {//      否则:从步骤2 到这里,形成递归方法listFile(f);}}}}
}

12.第三章:IO概述_IO流概述及分类:

1).什么是“IO流”:“IO”:Input(输入-读取)、Output(输出-写入)“流”:类似于水流,线性的,有方向的...
2).IO流的分类:A).字节流:按字节读写数据。可以读写任何文件。1).输出流:OutputStream(抽象类)【今天学】2).输入流:InputStream(抽象类)B).字符流:按字符读写数据。只能读写纯文本文件。1).输出流:Writer(抽象类)2).输入流:Reader(抽象类)

13.第三章:字节流_一切皆为字节:

1).计算机中存储的就是二进制,任何的数据:字符、视频、音频、图片…最终都会转换为二进制存储。

2).Java处理这些二进制的最小单位:字节(byte)

14.第四章:字节流_输出流_OutputStream的输出方法

1).输出的方法(三种):

1).write(int b):输出一个字节;
2).write(byte[] byteArray):输出一个字节数组;
3).write(byte[] byteArrya,int off,int len):输出字节数组的一部分。

2).OutputStream的子类:FileOutputStraem的使用:
1).构造方法:

1).FileOutputStream​(String name) 创建文件输出流以指定的名称写入文件。
2).FileOutputStream​(File file) 创建文件输出流以写入由指定的 File对象表示的文件
3).FileOutputStream​(String name, boolean append)
创建文件输出流以指定的名称写入文件。
4).FileOutputStream​(File file, boolean
append) 创建文件输出流以写入由指定的 File对象表示的文件。

2).注意:
1).Java中所有的输出流都是一样:构造时,文件可以不存在,会自动创建;
2).所有的"IO流"对象,构造时,必须构造在一个“文件上”,如果构造在一个“已存在的目录上”,将会抛异常。

3).向文件写入内容:

public class Demo {public static void main(String[] args) throws Exception {//1.构造一个FileOutputStream对象
//        FileOutputStream out = new FileOutputStream("demo10.txt");//覆盖写FileOutputStream out = new FileOutputStream("demo10.txt",true);//追加写//1).write(int b):/*out.write(97);//97-->转换为二进制:‭0110 0001‬--> 文件out.write(57);//'9'字符的二进制out.write(55);//'7'字符的二进制//2.write(byte[] byteArray):byte[] arr = {97,98,99,100,101};out.write(arr);*///间接输出字符串byte[] arr2 = "你要月薪过万!!".getBytes();//"你"-->UTF-8码表中对应的数:很大-->转换为二进制(很长)-->文件(3个字节)out.write(arr2);//3.write(byte[] arr,int off,int len)byte[] arr3 = {97,98,99,100};//我想输出:bcdout.write(arr3,1,3);}
}

15.第四章:字节流_输出流_OutputStream的追加写入及换行_关闭流:

1).追加写入:使用构造方法 new FileOutputStream(“demo01.txt”,true);
2).写入换行:out.write("\r\n".getBytes());
3).关闭流: out.close();

学习目标总结:

01.能够说出File对象的创建方式
new File(“d:\demo01.txt”);//绝对路径
new File(“demo01.txt”);//相对路径–在项目根目录下找

02.能够使用File类常用方法
1)获取的方法

1).public String getAbsolutePath() :返回此File的绝对路径名字符串。
2).public String getPath() :获取构造路径。
3).public String getName():返回由此File表示的文件或目录的名称。
4).public long length():返回由此File表示的【文件】的长度。不能操作目录。单位:字节

2).判断的方法

1).public boolean exists() :此File表示的文件或目录是否实际存在。
2).public boolean isDirectory() :此File表示的是否为目录。
3).public boolean isFile()
:此File表示的是否为文件。

3).创建和删除的方法

1).public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
2).public boolean delete() :删除由此File表示的文件或【空目录】。
3).public boolean
mkdir() :创建单级目录。
4).public boolean mkdirs() :创建多级目录。

4).遍历:

1).public String[] list():
2).public File[] listFiles();

03.能够辨别相对路径和绝对路径
1).相对路径:不带盘符的路径;
2).绝对路径:带盘符的路径;

04.能够遍历文件夹

File file = new File("d:\\单级目录");
File[] fileArray = file.listFiles();
if(fileArray != null){for(File f : fileArray){if(f.isFile()){System.out.println(f);}}
}

05.能够解释递归的含义
1).递归:方法调用其本身。

06.能够使用递归的方式计算5的阶乘

main(){int r = jieCheng(5);System.out.println(r);
}
public static int jieCheng(int n){if(n == 1){return 1;}return n * jieCheng(n - 1);
}

07.能够说出使用递归会内存溢出隐患的原因
1).如果一直压栈,不弹栈,会最终导致栈溢出。

08.能够说出IO流的分类和功能

1).字节流:读写任何文件。A).输出流:OutputStreamB).输入流:InputStream2).字符流:只能读写纯文本文件。A).输出流:WriterB).输入流:Reader

09.能够使用字节输出流写出数据到文件
//1.构造一个FileOutputStream
FileOutputStream out = new FileOutputStream(“demo01.txt”);//覆盖写
//2.输出数据
out.write(“你好:”.getBytes());
out.write("\r\n".getBytes());
out.write(“我正在学习Java,已经一个月了,五个月后,我会月薪过万!”.getBytes());
out.write("\r\n".getBytes());
//3.关闭流
out.close();

这篇关于JAVA进阶知识点总结 9【File类、递归】字节输入流InputStream 字节输出流OutputStream 字符输出流Writer 字符输入流Reader的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/356809

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操