Java基础-IO基础

server/2024/10/20 5:56:12/

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与输入流关联的文件描述符

java">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

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

java">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的其他方法

java">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() - 关闭输出流

java">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

java">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

java">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.ppmy.cn/server/133260.html

相关文章

iOS--NSURLSession Alamofire流程源码解析(万字详解版)

一、NSURLSession NSURLSession的主要功能是发起网络请求获取网络数据,是Apple的网络请求原生库之一。Alamofire就是对NSURLSession的封装,如果对NSURLSession不熟悉的话,那么Alamofire源码看起来会比较费劲的。因此我们先简单学习下NSURLSe…

wpf grid 的用法

WPF中的Grid是一种布局控件&#xff0c;可用于将子控件按照行和列的方式排列。 以下是Grid控件的用法&#xff1a; 在XAML文件中&#xff0c;添加一个Grid控件&#xff1a; <Grid> </Grid>在Grid控件中&#xff0c;添加行和列定义&#xff1a; <Grid><…

ue5 扇形射线检测和鼠标拖拽物体

这里的NumTrace是要发射几根射线&#xff0c;Degrees Per Trace是每根射线之间的角度&#xff0c; 例如 要在角色面前实现一个180度的扇形射线检测&#xff0c;就需这两个变量乘起来等于180 TraceLength是射线的长度 下面是鼠标拖动物体逻辑&#xff0c;很简单 这里的Floor和…

HTML(五)列表详解

在HTML中&#xff0c;列表可以分为两种&#xff0c;一种为有序列表。另一种为无序列表 今天就来详细讲解一下这两种列表如何实现&#xff0c;效果如何 1.有序列表 有序列表的标准格式如下&#xff1a; <ol><li>列表项一</li><li>列表项二</li>…

Ubuntu22.04中安装英伟达驱动并部署Pytorch深度学习环境

安装英伟达驱动 本文基于windows10ubuntu22.04双系统&#xff0c;给ubuntu22.04安装英伟达驱动。 安装必要。依赖 sudo apt update # 获取最新的软件包信息 sudo apt upgrade # 升级软件包 sudo apt install g sudo apt install gcc sudo apt install make禁用ubuntu默认驱动…

Vue3工程基本创建模板

创建vue工程 执行这两个绿色的命令 输入 code . 打开vscode 安装依赖 Element - plus npm install element-plus --save 在vscode的 main.js 换这个代码 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/inde…

【Kafka】Kafka Producer的缓冲池机制原理

如何初始化的bufferPool的 在初始化的时候 初始化BufferPool对象 // 设置缓冲区 this.accumulator new RecordAccumulator(xxxxx,其他参数,new BufferPool(this.totalMemorySize, config.getInt(ProducerConfig.BATCH_SIZE_CONFIG), metrics, time, PRODUCER_METRIC_GROUP_N…

在QT中使用V4L2获取传上来的yuyv(4:2:2)的数据转换为QImage显示在屏幕上

背景 项目需要用到OV3703 USB免驱摄像头在I.MX6ULL的平台上&#xff0c;但是勾八QCamera的库只能去处理RGB格式的数据,yuyv的处理不了&#xff0c;所以只能自己去把yuyv&#xff08;4:2:2&#xff09;的数据转换为RGB去显示。幸好有个德国牙医写了个V4L2的中间件可以获取到yuy…