IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)
1.File类
File类可以在程序中 操作文件和目录。File类是通过建立File类对象,在调用File类的对象来进行相关操作的。
示例:
- public class Demo01 {
- public static void main(String[] args) {
- File f = new File("f:/我的歌声里.txt");
- //访问文件名相关
- String name = f.getName();
- System.out.println("文件名:" + name);
- String absolutePath = f.getAbsolutePath();
- System.out.println("绝对路径:" + absolutePath);
- String parent = f.getParent();
- System.out.println("父目录:" + parent);
- //检测相关
- System.out.println("是否存在:" + f.exists());
- System.out.println("是否可读" + f.canRead());
- System.out.println("是否可写:" + f.canWrite());
- //获取文件信息
- System.out.println("文件的大小: " + f.length());
- //以当前路径创建File对象
- File file = new File(".");
- String[] list = file.list();
- //遍历目录下的文件
- System.out.println();
- System.out.println("当前目录下有文件:");
- for(String name1:list){
- System.out.println(name1);
- }
- }
- }
运行结果:
2.IO流的分类
按照方向:输入流和输出流
按照流的大小:字节流和字符流
按照流的角色:节点流和处理流
流的类关系图如下:
3.字节流和字符流
字节流:FileInputStream 和 FileOutputStream
示例:把文件复制成另外的文件
- public class Demo02 {
- public static void main(String[] args) throws IOException {
- /*
- * 需求把文件“我的歌声里.txt” 复制并改文件名为 “我的歌声里.java”
- *
- */
- //创建输入流
- InputStream is = new FileInputStream(new File("f:/我的歌声里.txt"));
- //创建输出流
- OutputStream os = new FileOutputStream(new File("f:/我的歌声里.java"));
- //创建接收字节数组
- byte[] bytes = new byte[1024];
- int len = 0;
- //循环输入输出
- while((len = is.read(bytes)) != -1 ){
- os.write(bytes, 0, len);
- }
- //关闭资源
- os.close();
- is.close();
- }
- }
运行结果:
字符流:FileReader和FileWriter
示例:切割文件
- public class Demo03 {
- public static void main(String[] args) {
- FileReader r = null;
- FileWriter w = null;
- try {
- int count = 0;//定义一个标记
- int flag = 0;//文件名标记
- r = new FileReader("f:/我的歌声里.txt");
- w = new FileWriter("f:/我的歌声里" + flag +".txt");
- char[] chars = new char[10];
- int len = 0;
- while((len = r.read(chars)) != -1){
- System.out.println(new String(chars, 0, len));
- w.write(chars, 0, len);
- w.flush();
- count++;
- //定义切割的条件
- if(count >10 ){
- flag++;
- w = new FileWriter("f:/我的歌声里" + flag +".txt");
- count = 0;
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- w.close();
- r.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
运行结果
4.转换流
转换流:把字节流转换为字符流,一次来实现性能优化
InputStreamReader 和 OutputStreamWriter
示例:
- public class Demo04 {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- //键盘输入到文件
- InputStreamReader isr = new InputStreamReader(System.in);
- char[] chars = new char[1024];
- int len = 0;
- OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:/我的文件.txt"));
- int count = 0;
- while((len = isr.read(chars)) != -1){
- osw.write(chars, 0, len);
- osw.flush();
- count++;
- if(count == 10){
- break;
- }
- }
- isr.close();
- osw.close();
- }
- }
运行结果:
5.缓冲流
把流读到缓冲区,然后再一次读到内存中来,以此来提高性能
BuffererInputStream 和BufferedOutputStream
BufferedReader 和 BufferedWriter
示例:
- public static void main(String[] args) throws IOException {
- //读取并复制保存图片
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("f:/qq.jpg")));
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("f:/qqq.png")));
- String line = null;
- while((line = br.readLine()) != null){
- bw.write(line);
- bw.flush();
- }
- bw.close();
- br.close();
- }
标签:
杜恩德
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界