Java基础-IO基础

IO是指input/output,即输入和输出。输入和输出是以内存为中心的:

  • input 从外部往内存输入数据,比如硬盘中的数据写入内存等。

  • output 从内存往外输出数据,比如内存数据写入硬盘等。

File

File类表示一个文件或者一个目录。使用File对象可以对磁盘进行读写操作。

常用操作

//绝对路径或者相对路径
String pathname="E:\\demo\\file\\";
//1.打开文件
File file=new File(pathname);
if(!file.exists()) {//2.创建文件file.createNewFile();//创建目录file.mkdir();
}
//3.判断类型
System.out.println(file.isFile());
if (file.isDirectory()) {//4.获取当前目录下的所有文件和目录File[] files = file.listFiles();//获取当前目录下以.txt结尾的文件File[] listFiles = file.listFiles(((dir, name) -> dir.isFile() && name.endsWith(".txt")));
}
//5.获取父目录
File parentFile = file.getParentFile();
//6.删除文件
file.delete();
file.deleteOnExit();

InputStream

InputStream是java.io包下的最基本的输入流。InputStream是一个抽象类,是所有输入流的超类。

常用操作

  • available() - 返回输入流中可用的字节数

  • read() - 从输入流中读取一个字节的数据

  • read(byte[] array) - 从流中读取字节并存储在指定的数组中

  • close() - 关闭输入流

常用子类

FileInputStream

用于从文件中读取字节数据。FileInputStream其他方法

  • getChannel() - 返回FileChannel与输入流关联的对象

  • getFD() - 返回FileDescriptor与输入流关联的文件描述符

public class Test {public static void main(String[] args) throws Exception {//绝对路径或者相对路径String pathname="E:\\demo\\file\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流FileInputStream inputStream = new FileInputStream(file);//2.获取输入流的长度int available = inputStream.available();//3.读取一个字符int read = inputStream.read();//4.批量读取byte[] data = new byte[Math.min(available, 256)];int len = 0;while ((len = inputStream.read(data)) > 0) {System.out.println(new String(data, 0, len));}//5.关闭输入流inputStream.close();}}
}

ByteArrayInputStream

用于从字节数组读取字节数据。

public class Test {public static void main(String[] args) throws Exception {//1.创建输入流ByteArrayInputStream inputStream = new ByteArrayInputStream("ByteArrayInputStream".getBytes(StandardCharsets.UTF_8));//2.获取输入流的长度int available = inputStream.available();//3.读取一个字符int read = inputStream.read();//4.批量读取byte[] data = new byte[Math.min(available, 256)];int len = 0;while ((len = inputStream.read(data)) > 0) {System.out.println(new String(data, 0, len));}//5.关闭输入流inputStream.close();}
}

ObjectInputStream

用于读取对象。主要用于读取ObjectOutputStream写入的数据。ObjectInputStream的其他方法

public class Test implements Serializable {private String name;public Test(String name) {this.name = name;}@Overridepublic String toString() {return "Test{" +"name='" + name + '\'' +'}';}public static void main(String[] args) throws Exception {//序列化对象ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(2048);ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(new Test("test"));byte[] bytes = byteArrayOutputStream.toByteArray();byteArrayOutputStream.close();objectOutputStream.close();//1.创建输入流ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(bytes));//2.获取对象Object object = inputStream.readObject();if (Objects.nonNull(object) && object instanceof Test) {System.out.println(object);}//3.关闭输入流inputStream.close();}
}

OutputStream

OutputStream是java.io包下的最基本的输出流流。OutputStream是一个抽象类,是所有输出流的超类。

常用操作

  • write(int ) - 将指定的字节写入输出流

  • write(byte[] array) - 将指定数组中的字节写入输出流

  • flush() - 强制将输出流中存在的所有数据写入目标

  • close() - 关闭输出流

public class Test implements Serializable {public static void main(String[] args) throws Exception {//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流OutputStream outputStream = new FileOutputStream(pathname);//2.数据写入到输出流outputStream.write(1);outputStream.write("hello world".getBytes(StandardCharsets.UTF_8));//3.输出流数据写入到目标outputStream.flush();//4.关闭输出流outputStream.close();}}
}

常用子类

FileOutputStream

用于将字节数据写入到文件中。FileOutputStream其他方法

  • getChannel() - 返回FileChannel与输入流关联的对象

  • getFD() - 返回FileDescriptor与输入流关联的文件描述符

ByteArrayOutputStream

用于将字节数据写入到字节数组中。ByteArrayOutputStream其他方法

  • toString() - 字节数组转成String对象并返回

  • toByteArray() - 返回字节数组

  • writeTo(OutputStream out) - 字节数组写入到输出流中

ObjectOutputStream

ObjectOutputStream其他方法

Reader

Reader是一个字符为单位的输入流接口

常用操作

  • read() - 从输入流中读取一个字符的数据

  • read(char[] array) - 从流中读取字符并存储在指定的数组中

  • read(CharBuffer buffer) - 从流中读取字符并存储在指定的缓冲区中

  • close() - 关闭输入流

常用子类

FileReader

public class Test implements Serializable {public static void main(String[] args) throws Exception{//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流Reader reader = new FileReader(file);//2.读取一个字符int read = reader.read();//3.批量读取CharBuffer charBuffer=CharBuffer.allocate(256);while (reader.read(charBuffer) > 0) {//从写模式切换到读模式charBuffer.flip();System.out.println(charBuffer);//清空缓冲区charBuffer.clear();}int len = 0;char[] data = new char[256];while ((len = reader.read(data)) > 0) {System.out.println(new String(data, 0, len));}//4.关闭输入流reader.close();}}
}

CharArrayReader

InputStreamReader

Writer

Writer是一个字符为单位的输出流接口

常用操作

  • write(int c) - 写入一个字符

  • write(String str) - 写入一个字符串

  • write(char[] array) -写入一个字符数组

  • close() - 关闭输入流

常用子类

FileWriter

public class Test implements Serializable {public static void main(String[] args) throws Exception{//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {char[] buffer = new char[128];//1.创建输出流FileWriter writer = new FileWriter(file);//2.写入一个字符writer.write(12);//3.写入字符串writer.write("hello world");writer.flush();//4.关闭输出流writer.close();}}
}

CharArrayWriter

OutputStreamWriter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451864.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器虚拟化是什么?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

父子元素中只有子元素设置margin-bottom的问题

问题代码如下所示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.div1 {background-color: red;width: 80px;height: 80px;border: 1px solid orange;}.div2 {bac…

【飞腾加固服务器】全国产化解决方案:飞腾FT2000+/64核,赋能关键任务保驾护航

在信息安全和自主可控的时代背景下&#xff0c;国产化设备的需求与日俱增&#xff0c;尤其是在国防、航空航天、能源和其他关键行业。高可靠性和极端环境设计的国产加固服务器&#xff0c;搭载强大的飞腾FT2000/64核处理器&#xff0c;全面满足国产自主可控的严苛要求。 性能强…

光伏电站设计之辐照度效果(threejs实现)

类似 solaredge里面的日照度效果 1、由经纬度和屋顶朝向获取&#xff08;参考pvlib&#xff09;当前地区的辐照度值&#xff0c; 2、根据辐照度值插值获取对应辐照度的颜色。 3、计算片段着色器里面计算每个顶点的遮挡率和紫色混合 4、计算鼠标移动中的投射屋顶位置辐照度&…

Ansible自动化运维管理工具

一、Ansible 1.1、自动化运维管理工具有哪些&#xff1f; 工具架构语言使用情况Ansible无clientpython 协议用ssh95%puppetC/Sruby 协议用http基本不用chefC/Sruby 协议用http基本不用saltstackC/Spython 协议用ssh5% 1.2、Ansible简介 Ansible是一个基于Py…

网易翻译工具解析!这几大翻译器值得一试!

翻译工具的出现&#xff0c;使得跨语言沟通变得更加便捷。本文将为您推荐几款优秀的翻译工具&#xff0c;包括福昕在线翻译、福昕翻译客户端、海鲸AI翻译和网易有道翻译&#xff0c;帮助您在学习、工作和生活中轻松应对语言挑战。 福昕在线翻译 直达链接&#xff08;复制到浏…

c4d渲染和3d渲染有什么区别?c4d和3dmax哪个容易学?

在现代设计和创意产业中&#xff0c;3D渲染技术是不可或缺的一部分。它能够帮助设计师和艺术家将他们的创意转化为逼真的视觉效果&#xff0c;从而更好地展示和传达他们的想法。在众多3D渲染软件中&#xff0c;C4D渲染和3D Max是两款备受关注的软件。 本文将探讨C4D渲染和3D渲…

深度学习领域,你心目中 idea 最惊艳的论文是哪篇?

深度学习发展至今&#xff0c;共经历了三次浪潮&#xff0c;20 世纪40年代到60年代深度学习的雏形出现在控制论(cybernetics)中&#xff0c;20 世纪 80 年代 到 90 年代深度学习表现为 联结主义(connectionism)&#xff0c;直到 2006 年&#xff0c;才真正以深度学习之名复兴。…

Android中的内容提供者

目录 1.创建内容提供者 1--手动创建一个Android应用程序 2--创建自定义的内容提供者 2.访问其他应用程序 1. 解析URI 2. 查询数据 3. 遍历查询结果 3)案例:读取手机通信录 1.声明权限 2.activity_main.xml文件内容 3.my_phone_list.xml文件内容 4.定义PhoneInfo实体 5.定义MyPh…

现代大数据架构Kappa

现代大数据架构中的Kappa架构是一种处理大数据的架构&#xff0c;它作为Lambda架构的替代方案出现&#xff0c;旨在简化数据处理流程。以下是对Kappa架构的详细介绍&#xff1a; 一、核心思想 Kappa架构的核心思想是简化数据处理流程&#xff0c;通过使用单一的流处理层来同时…

就是这个样的粗爆,手搓一个计算器:热量计算器

作为程序员&#xff0c;没有合适的工具&#xff0c;就得手搓一个&#xff0c;PC端&#xff0c;移动端均可适用。废话不多说&#xff0c;直接上代码。 HTML: <div class"calculator"> <label for"weight">体重 (kg):</label> <inpu…

Git之代已修改文件的目录高亮设置

不管Android Studio或者Idea&#xff0c;进入Setting 选择如图所示&#xff0c;并进行勾选 就可以高亮了。

【C++】类的默认成员函数:深入剖析与应用(上)

&#x1f600;在上一篇文章中我们初步了解了C的基础概念&#xff0c;现在我们进行对C类的默认成员函数进行更加深入的理解&#xff01; &#x1f449;【C新手入门指南&#xff1a;从基础概念到实践之路】 目录 &#x1f4af;前言 &#x1f4af;构造函数 一、构造函数的定义…

Ambari-2.7.4和HDP-3.1.4安装(附Ambari和HDP安装包)

1.、环境及软件准备 Ambari-2.7.4和HDP-3.1.4下载 ,提取码:3rwq 环境:CentOS7(我这里使用的是CentOS7.9版本)、三台虚拟机,单节点内存13GB、存储80GB 软件:mysql5.7+、jdk8、ambari-2.7.4.0-centos7.tar.gz、HDP-3.1.4.0-centos7-rpm.tar.gz、HDP-UTILS-1.1.0.22-centos7…

Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1buHvw58&ftt&id22173428704 Javascript源码 //引用http模块创建web服务器&#xff0c;监听指定的端口获取以GET、POST、JSON等方式上传的数据&#xff0c;并回应驱动读卡…

阿里云数据库导出 | 数据管理(兼容数据库备份)

文章目录 1、数据库导出2、操作步骤3、DMS - Data Management Service 1、数据库导出 2、操作步骤 3、DMS - Data Management Service

C#的自定义对话框和提示窗体 - 开源研究系列文章

上次的应用因为需要用到对话框和提示窗体&#xff0c;然后系统自带的MessageBox界面个人又看不上&#xff0c;所以就想自己编写一个自定义的窗体&#xff0c;于是有了本文&#xff0c;具体的已经应用到笔者其它的应用里了。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b;…

Bootstrapping、Bagging 和 Boosting

bagging方法如下&#xff1a; bagging和boosting比较

k8s-对命名空间资源配额

对k8s命名空间限制的方法有很多种&#xff0c;今天来演示一下很常用的一种 用的k8s对象就是ResourceQuota 一&#xff1a;创建命名空间 kubectl create ns test #namespace命名空间可以简写成ns 二&#xff1a; 对命名空间进行限制 创建resourcequota vim resourcequ…

秋招面试题记录_半结构化面试

c八股(可能问的多一点) 1.简单说说C11语法特性 答&#xff1a; 1.auto以及decltype自动类型推导&#xff0c;避免手动声明复杂类型&#xff0c;减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…