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

File 类的用法, InputStream和Reader, OutputStream和Writer 的用法

前言

普通的文件长这样:

 

其实目录也是一种特殊文件:

 

一、文件前缀知识

(一)绝对路径和相对路径

以盘符开头的的路径,叫做绝对路径,如:D:\360Downloads\cat.jpg

以.或..开头的路径,叫做相对路径,如:./t/tmp/cat.jpg   (/或\作为分隔符都是正确的)

查找文件时的路径案例如下:


 (二)关于程序运行时的输入和输出分析示意图

 

二、File

File file = new File("./t.txt");//File(文件路径)

关于File的常见方法的使用:

file.creatNewFile();//创建文件(如果该文件已经存在,不会创建)
file.delete();//删除文件
file.deleteOnExit();//程序退出时再删除文件
file.mkdir();//一次只能创建一层目录
file.mkdirs();//一次创建多级目录
file.isFile();//当前文件是否是一个普通文件
file.isDirectory();//当前文件是否是目录文件
file.list();//返回String[]类型,file下所有文件名
file.listFiles();//返回File[]类型,file下所有文件
file.renameTo(new File);//改名字
file.exists();//当前文件是否存在

三、InputStream和Reader

InputStream是字节流,Reader是字符流。

(一)文本文件和二进制文件

字节流是专门操作以字节为单位的文本文件,字符流是专门操作以字符为单位的二进制文件。

区分一个文件是文本文件还是二进制文件,可以通过记事本区分,如一个文件通过记事本的方式打开后,显示的数据内容是文字还是乱码:

这个显示是乱码,故是二进制文件

这个显示是正常可读的文字,故是文本文件


(二)关闭文件的正确打开方式

关于使用一个文件的步骤是,先打开文件,使用文件,关闭文件

关闭文件是非常重要的 。这里提供两种关闭文件的方式:

1):try-finally

        Reader reader = new FileReader("./t/text2.txt");try {}finally {reader.close();}

2):try with source

       try( Reader reader = new FileReader("./t/text2.txt")){}

(三)Reader

Reader reader = new FileReader("./t/text2.txt");

对于Reader:

  1. read() 一次读一个字符;
  2. read(char[] buf) 一次读最多buf.length字符;
  3. read(char[] buf,int off,int len) buf是保存路径,off是buf的开始保存下标,len是保存数目.

其中,无论是哪一个方法,他们的返回值都是int类型,表示读取到的数据个数当文件读取到eof(文件末尾),返回-1.


(四)InputStream

InputStream inputStream = new FileInputStream("./t/text2.txt");

对于InputStream,read方法的用法和Reader一样,只是这里是以字节为单位传输数据。

四、OutputStream和Writer

输出流对象(字符流/字节流)会在打开文件后,自动清空文件内容!!!

OutputStream是字节流,Writer是字符流。

(一)OutputStream

OutputStream outputStream = new FileOutputStream("./t/text1.txt");

虽然输出流在打开文件后会自动清空文件,但是也有不清空文件的办法:

通过追加的方式打开文件,此时就不会清空内容了

OutputStream outputStream = new FileOutputStream("./t/text1.txt",true);

对于OutputStream:

outputStream.write("hello");

以字符的方式写入。

(二)Writer

Writer writer = new FileWriter("./t/text1.txt");

以字节的方式写入: writer.write(byte[] buf);


结语

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!

http://www.lryc.cn/news/130805.html

相关文章:

  • AtCoder Beginner Contest 315 Task:A/B/C/E
  • 【项目实践】基于LSTM的一维数据扩展与预测
  • webshell实践,在nginx上实现负载均衡
  • LVS+Keepalived集群
  • Java的网络编程
  • kafka配置远程连接
  • css实现渐变色border
  • 管理 IBM Spectrum LSF
  • 117页数字化转型与产业互联网发展趋势及机会分析报告PPT
  • 【JavaWeb】实训的长篇笔记(上)
  • 如何使用Docker安装AWVS?
  • vue命名规范
  • 第05天 SpringBoot自动配置原理
  • AlphaZero能否从围棋和国际象棋飞跃到量子计算?
  • 进程切换
  • ES踩坑记录之UNASSIGNED分片无法恢复
  • ubuntu更换国内apt源
  • OpenCV-Python中的图像处理-视频分析
  • STM32 CubeMX (第四步Freertos内存管理和CPU使用率)
  • 题解 | #1012.Equalize the Array# 2023杭电暑期多校10
  • UE4/5C++多线程插件制作(二十一、使用)
  • 【C#】关于?的用法
  • linux——mysql的高可用MHA
  • 【学习日记】【FreeRTOS】空闲任务与阻塞延时
  • 衣服材质等整理(时常更新)
  • 电子商务环境下旅游价值链
  • spring源码分析bean的生命周期(下)
  • 完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)
  • pytorch3d成功安装
  • 【vue3】同个页面引入多个图表组件实现自适应的方法