Java开发——30.I/O流_处理流(数据流、输入/输出流和打印流)

简介: 处理流就相当于外衣,每件衣服的作用不同,每个处理流的作用也不同,处理流可以实现多嵌套,即可以有多个处理流,每个处理流的功能不同!

I/O流:主要操作文件内容,结合前面所学的File类,我们可以读取和写出文件,也可以修改文件的字符集编码...


处理流:

处理流就相当于外衣,每件衣服的作用不同,每个处理流的作用也不同,处理流可以实现多嵌套,即可以有多个处理流,每个处理流的功能不同!


上节我们学习了缓冲流和转换流,今天我们学习I/O流中的其他一些处理流,把思维放空。

image.png


输入、输出流:

实质上就是定义了流的不同方向,可以将数据写出到文件中;

并且使用System.in返回值对象就是InputStream,所以我们可以使用System.in,实现类似Scanner扫描数据的作用;


输入流:


/*** 输入流*  实现在控制台输入一个字符串,转换为大写;*  如果为e 或者 exit则退出*/publicstaticvoidprintStreamTest(){
InputStreamReaderisr=null;
BufferedReaderbr=null;
try {
isr=newInputStreamReader(System.in);
br=newBufferedReader(isr);
while (true) {
System.out.println("请输出一个字符串:");
Stringstr=br.readLine();
if ("e".equalsIgnoreCase(str) ||"exit".equalsIgnoreCase(str)){
System.out.println("程序结束");
break;
                }
System.out.println(str.toUpperCase());
            }
        } catch (IOExceptione) {
e.printStackTrace();
        } finally {
if (br!=null) {
try {
br.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
//使用处理流的话,只需要关闭最外层的流即可。if (isr!=null) {
try {
isr.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
        }
    }


输出流:

输出流的返回值类型PrintStream,所以我们在讲打印流的时候学习。


打印流:

既然是打印流,所以不论是字节流还是字符流只有单独的一只流,PrintStream/PrintWriter;


字节打印流:


System.setOut()//输出重定向System.setIn();  //输出重定向




publicstaticvoidprintStreamTest(Stringpath){
PrintStreamps=null;
try {
ps=newPrintStream(newFileOutputStream(path),true);//true,是设置是否自动刷新System.setOut(ps);
//使用了System类中的setOut()方法,将数据的输出路径重定向为指定路径for (inti=0; i<=255; i++){
System.out.print((char)i);
//此时的输出内容并没有在控制台打印,而是传送到指定的文件中if (i%50==0){//一行有50个内容换行System.out.println();
                }
            }
/*ps.write(1);ps.flush();ps.write(97);ps.flush();*/        } catch (FileNotFoundExceptione) {
e.printStackTrace();
        } finally {
if (ps!=null)
ps.close();
        }
    }


数据流:

DataInputStream/DataOutputStream

能操作基本数据类型的值+String类型的值,其中定义了操作字符串的方法;


数据流的作用:

将数据持久化保存在文件中,我们在java类中定义的变量都是保存在内存中的,一旦JVM关闭/电脑断电数据都会损失;如果想要数据持久化的保存在文件中,就可以使用数据流进行存储。


数据流的注意事项:

  1. 数据流中写出的数据不能只能打开看,要是想要查看写出的顺序只需要使用读取操作,读取即可;
  2. 写出和读取的顺序必须相同。


数据流演示:


/*** 数据流只有针对字节的操作*  后续学习的对象流也是只能操作字节*/publicstaticvoiddataStreamTest(Stringpath){
DataOutputStreamdos=null;
DataInputStreamdis=null;
try {
dos=newDataOutputStream(newFileOutputStream(path));
dis=newDataInputStream(newFileInputStream(path));
dos.writeUTF("小红");
dos.flush();
dos.writeInt(28);
dos.flush();
dos.writeBoolean(true);
dos.flush();
//写入的顺序和读取的顺序必须相同,否则会报错。Stringname=dis.readUTF();
intage=dis.readInt();
booleanisgirl=dis.readBoolean();
System.out.println("name:"+name+",age:"+age+",isgirl:"+isgirl);
        } catch (IOExceptione) {
e.printStackTrace();
        } finally {
if (dis!=null) {
try {
dis.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
if (dos!=null) {
try {
dos.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
        }
    }


注意:数据流是不能读取和写入对象的,要是对写入和读取对象只能使用对象流!后续进行学习。

相关文章
|
16天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
38 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
17天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
45 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
17天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
29 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
17天前
|
存储 网络协议 Java
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发
|
5天前
|
安全 Java API
Java 泛型在安卓开发中的应用
在Android开发中,Java泛型广泛应用于集合类、自定义泛型类/方法、数据绑定、适配器及网络请求等场景,有助于实现类型安全、代码复用和提高可读性。例如,结合`ArrayList`使用泛型可避免类型转换错误;自定义泛型类如`ApiResponse&lt;T&gt;`可处理不同类型API响应;RecyclerView适配器利用泛型支持多种视图数据;Retrofit结合泛型定义响应模型,明确数据类型。然而,需注意类型擦除导致的信息丢失问题。合理使用泛型能显著提升代码质量和应用健壮性。
|
4天前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
16 0
|
4天前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
13 0
|
14天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
35 2
|
3天前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
17 6
如何用java的虚拟线程连接数据库
|
7天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。