Java-进阶:Java-File-&-IO—1,java集合面试题及答案

public class FileDemo {
public static void main(String[] args) {
File dir = new File(“E:\a”);
getAllDir(dir);
}

// 定义方法,实现目录的全遍历
private static void getAllDir(File dir) {
//调用方法listFiles()对目录,dir进行遍历
File[] fileArr = dir.listFiles();
for(File f : fileArr){
//判断变量f表示的路径是不是文件夹,是,则递归遍历
if(f.isDirectory()){
getAllDir(f);
}else{
System.out.println(f);
}
}
}
}

##二、IO流
###1. 概述
IO流用来处理设备之间的 数据传输
Java对数据的操作是通过 流 的方式
Java用于操作流的对象都在 IO包 中(input/output)
Output操作:把内存中的数据存储到持久化设备上这个动作称为输出(写)
Input操作:把持久设备上的数据读取到内存中的这个动作称为输入(读)
流的分类:
流按流向分为两种:
输出流:内存——>外设(写出数据)
输入流:磁盘——>内存(读入数据)
流按操作类型分为两种:
字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流:字符流只能操作纯字符数据,比较方便。
###2. IO流常用父类
字节流的抽象父类:InputStream ,OutputStream
字符流的抽象父类:Reader , Writer
##三、字节输出流
###1. 概述
java.io.OutputStream 此抽象类,是表示输出字节流的所有类的超类。操作的数据都是 字节
##2. OutputStream 的核心方法:
void close(): 关闭此输出流并释放与此流有关的所有系统资源。
close的常规协定:该方法将关闭输出流。关闭的流不能执行输出操作,也不能重新打开。
如果流对象建立失败了,需要关闭资源吗?
new 对象的时候,失败了,没有占用系统资源;释放资源的时候,对流对象判断null,变量不是null,对象建立成功,需要关闭资源
write(byte[] b): 将 b.length 个字节从指定的 byte 数组写入此输出流
write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
write(int b): 将指定的字节写入此输出流。write 的常规协定:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
###3. FileOutputStream 类
####(1) 构造方法
FileOutputStream(File file) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append): 创建一个向指定 File 对象表示的文件中写入数据的文件输出流,以追加的方式写入。
FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流,以追加的方式写入。

####(2) 流对象的使用步骤:
创建流子类的对象,绑定数据目的
调用流对象的方法write写
close释放资源
注意事项:流对象的构造方法,可以创建文件,如果文件存在,直接覆盖

public class IoDemo {
public static void main(String[] args) throws IOException {
//创建流子类的对象,绑定数据目的
FileOutputStream fos = new FileOutputStream(“E:\a.txt”);
//用write方法写数据
//写一个字节
fos.write(100); //d

//写字节数组
byte[] bytes = {65,66,67,68}; //ABCD
fos.write(bytes);

//写字节的一部分,开始索引,写几个
fos.write(bytes,1,1); //B

//写入字节数组的简便方式
//写字符串
fos.write(“Hello”.getBytes());
//关闭资源
fos.close();
}
}

###4. 文件的续写和换行
####(1)实现数据的换行
在文件中,写入换行符号换行: \r\n
\r\n 可以写在上一行的末尾, 也可以写在下一行的开头

fos.write(“hello\r\n”.getBytes());

####(2)关于数据的追加写入
默认情况下,当一个文件输出流对象,指向一个文件的时候,会清空文件内容
必须使用特殊的构造方法实现文件的追加写入,FileOutputStream构造方法, 的第二个参数中加入 true
//实现追加写入:

FileOutputStream fos = new FileOutputStream(file, true);

###5. IO异常的处理
一些细节:
保证流对象变量,作用域足够
catch里面处理异常
输出异常的信息,目的看到哪里出现了问题,停下程序,从新尝试
如果流对象建立失败了,需要关闭资源吗
new 对象的时候,失败了,没有占用系统资源;释放资源的时候,对流对象判断 null;变量不是 null,对象建立成功,需要关闭资源

public class FileOutputStreamDemo3 {
public static void main(String[] args) {
File file = new File(“c:\file.txt”);
//try 外面声明变量,try 里面建立对象,为了提升流对象作用域
//定义FileOutputStream的引用
FileOutputStream fos = null;
try {
//创建FileOutputStream对象
fos = new FileOutputStream(file);
//写出数据
fos.write(“abcde”.getBytes());
} catch (IOException e) {
System.out.println(e.toString() + “----”);
throw new RuntimeException(“文件写入失败,重试”);
} finally {
//一定要判断fos是否为null,只有不为null时,才可以关闭资源
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException(“关闭资源失败”);
}
}
}
}
}

##四、字节输入流
###1. 概述
java.io.InputStream: 此抽象类是表示字节输入流的所有类的超类。读取任意文件,每次只读取1个字节
###2. 核心方法
abstract int read():读取一个字节
read()方法的特点:read() 执行一次,就会自动读取下一个字节,返回值是读取到的字节, 读取到结尾返回 -1

public class IoDemo {
public static void main(String[] args) throws IOException {
//创建字节输入流的子类对象
FileInputStream fis = new FileInputStream(“E:\a.txt”); //ABCD
//读取一个字节,调用read方法,返回int
//使用循环方式,读取文件,循环结束的条件:read() 返回 -1
int len = 0; //接收read()的返回值
while((len = fis.read()) != -1){
System.out.print((char)len); //可以转换成字符
}
//关闭资源
fis.close();
}
}

int read(byte[] b):读取一定数量的字节,并将其存储在缓冲区数组 b 中
int read(byte[] b, int off, int len) :读取最多 len 个字节,存入 byte 数组。
数组的作用:缓冲的作用, 提高效率
read 返回的 int,表示读取到多少个有效的字节数

public class IoDemo {
public static void main(String[] args) throws IOException {
//创建字节输入流的子类对象
FileInputStream fis = new FileInputStream(“E:\a.txt”);
//创建字节数组
byte[] b = new byte[1024];

int len = 0;
while((len = fis.read(b)) != -1){
System.out.print(new String(b,0,len)); //使用String的构造方法,转为字符串
}
//关闭资源
fis.close();
}
}

###3. FileInputStream 类
####(1)构造方法
为这个流对象 绑定数据源
FileInputStream(File file)
FileInputStream(String name)
参数:File对象 和 String对象
####(2)输入流读取文件的步骤
创建字节输入流的子类对象
调用读取方法 read 读取
关闭资源
####(3)读取数据的方式:
第一种方式:一次读取一个字节数据
第二种方式:一次读取一个字节数组
第二种方式效率更高,每次读取都会和操作系统发生一次交互,第二种方式每次可以读取多个数据,提高了操作效率
####4、释放资源的另一种方式

//1.第一种释放资源的方式 closeQuietly
//释放输入流资源
closeQuietly(fis);
//释放输出流对象
closeQuietly(fos);
private static void closeQuietly(Closeable close) {
if(close != null) {
try {
close.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

//2.jdk7 中引入的 try-with-resource语句

try(放申请资源的语句){

}catch() {

}

// 一旦资源的申请放在try-with-resource语句的()中,那么资源会保证一定自动被释放

##五、字节流文件复制
###1. 读取单个字节

public class Copy {
public static void main(String[] args) {
long s = System.currentTimeMillis();
//定义两个流的对象变量
FileInputStream fis = null;
FileOutputStream fos = null;
try{
//建立两个流的对象,绑定数据源和数据目的
fis = new FileInputStream(“D:\test.mp3”); //8,003,733 字节
fos = new FileOutputStream(“d:\test.mp3”);
//字节输入流,读取1个字节,输出流写1个字节
int len = 0 ;
while((len = fis.read())!=-1){
fos.write(len);
}
}catch(IOException e){
System.out.println(e);
throw new RuntimeException(“文件复制失败”);
}finally{
try{
if(fos!=null)
fos.close();
}catch(IOException e){
throw new RuntimeException(“释放资源失败”);
}finally{
try{
if(fis!=null)
fis.close();
}catch(IOException e){
throw new RuntimeException(“释放资源失败”);
}
}
}
long e = System.currentTimeMillis();
System.out.println(e-s);
}
}
//耗时:61817

###2. 读取字节数组

public class Copy_1 {
public static void main(String[] args) {
long s = System.currentTimeMillis();
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream(“D:\test.mp3”);
fos = new FileOutputStream(“E:\test.mp3”);
//定义字节数组,缓冲
byte[] bytes = new byte[1024*10];
//读取数组,写入数组
int len = 0 ;
while((len = fis.read(bytes))!=-1){
fos.write(bytes, 0, len);
}
}catch(IOException e){
System.out.println(e);
throw new RuntimeException(“文件复制失败”);
}finally{
try{
if(fos!=null)
fos.close();
}catch(IOException e){
throw new RuntimeException(“释放资源失败”);
}finally{
try{
if(fis!=null)
fis.close();
}catch(IOException e){
throw new RuntimeException(“释放资源失败”);
}
}
}
long e = System.currentTimeMillis();
System.out.println(e-s);
}
}
//耗时:41

##六、字符输出流
###1. 概述
java.io.Writer 所有字符输出流的超类。写文件,写 文本文件
###2. 方法介绍
void write(int c):写入单个字符
void write(String str) :写入字符串
void write(String str, int off, int len):写入字符串的某一部分
void write(char[] cbuf):写入字符数组
abstract void write(char[] cbuf, int off, int len) :写入字符数组的某一部分
###3. FileWriter 类
Writer 类是抽象类,找到子类对象 FileWriter
构造方法:参数也是 File 类型对象 和 String 文件名
字符输出流,写数据的时候,必须要运行一个功能,刷新功能:flush()

public class WriterDemo {
public static void main(String[] args) throws IOException{
FileWriter fw = new FileWriter(“c:\1.txt”);

//写1个字符
fw.write(100);
fw.flush();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人
82)]

[外链图片转存中…(img-LEUIlieH-1711948254782)]

[外链图片转存中…(img-3v8z7ENG-1711948254782)]

[外链图片转存中…(img-AojGQLjE-1711948254783)]

[外链图片转存中…(img-DzOmurZb-1711948254783)]

[外链图片转存中…(img-u736BQAz-1711948254784)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-zljKWqYb-1711948254784)]

关注我,点赞本文给更多有需要的人

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值