【Java】IO流相关操作

news2025/2/1 10:04:58

目录

常见的文件操作

创建文件

得到文件信息

目录操作

IO流

FileInputStream 

FileOutputStream

FileReader

FileWriter

BufferedReader

BufferedWriter

ObjectOutputStream

ObjectInputStream

InputStreamReader

OutputStreamReader

PrintStream

PrintWriter

Properties

properties读文件

properties写文件

注意


常见的文件操作

创建文件

//根据路径创建一个File对象
public File(String pathname)
//根据 父目录 + 子路径 创建一个File对象
public File(String parent, String child)
//根据 父目录文件 + 子路径 创建一个File对象
public File(File parent, String child)
//创建新文件
public boolean createNewFile()

得到文件信息

//得到文件名
System.out.println(file.getName());
//绝对路径
System.out.println(file.getAbsolutePath());
//父目录
System.out.println(file.getParent());
//文件大小 单位:字节
System.out.println(file.length());
//文件是否存在
System.out.println(file.exists());
//是不是一个文件
System.out.println(file.isFile());
//是不是一个目录
System.out.println(file.isDirectory());

目录操作

//创建一级文件目录
public boolean mkdir()
//示例
String filePath = "E:\\test";
File file = new File(filePath);
file1.mkdir()

//创建多级文件目录
public boolean mkdirs()
//示例
String filePath1 = "E:\\test\\demo\\a";
File file1 = new File(filePath1);
file1.mkdirs()

IO流

FileInputStream 

创建流

public FileInputStream(String name)
//示例
String filePath = "E:\\hello.txt";
FileInputStream fileInputStream = new FileInputStream(filePath);

读取数据常用api

//单个字节读取,返回下一个字节数据,读完返回-1
public int read()
//示例
int readData = 0;
while((readData = fileInputStream.read()) != -1){
      System.out.print((char)readData);
}
//字节数组读取,字节读取到数组,返回读取的字节个数,读完返回-1
public int read(byte b[])
//示例
int readLength;
byte[] buf = new byte[8];
while((readLength = fileInputStream.read(buf)) != -1){
      System.out.print(new String(buf,0,readLength));
}

FileOutputStream

创建流

//如果叠加可以将append参数设置为true,false则覆盖原文件
public FileOutputStream(String name, boolean append)

输出数据常用api

//单个字节输出
public void write(int b) 
//数组输出
public void write(byte b[])
public void write(byte b[], int off, int len)

FileReader

创建流

public FileReader(String fileName)
//示例
String filePath = "E:\\story.txt";
FileReader fileReader = = new FileReader(filePath);

读取数据常用api

//读取单个字符
public int read()
//示例
while((data = fileReader.read()) != -1) {
       ystem.out.print((char)data);
}

//字符数组读取
public int read(char cbuf[], int offset, int length) 
//示例
char[] temp = new char[100];
int readLen = 0;
while((readLen = fileReader.read(temp)) != -1) {
      System.out.print(new String(temp,0,readLen));
}

FileWriter

创建流

public FileWriter(String fileName)
//示例
String filePath = "E:\\note.txt";
FileWriter fileWriter = new FileWriter(filePath);

 写数据常用api

//写字符串
public void write(String str)
//写字符数组
public void write(char cbuf[])

BufferedReader

创建流

//包装流
public BufferedReader(Reader in)
//示例
String filePath = "E:\\story.txt";
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));

读取数据常用api

//按行读取
public String readLine()
//示例
String s = "";
while((s = bufferedReader.readLine()) != null){
    System.out.println(s);
}

BufferedWriter

创建流

public BufferedWriter(Writer out)
//示例
String filePath = "E:\\BufferedWriterDemo.txt";
//在源文件上追加的话,在被包装的流设置append参数
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));

写数据常用api

//写字符串
public void write(String str)
//换行
public void newLine()

ObjectOutputStream

创建流

public ObjectOutputStream(OutputStream out)
//示例
String filePath = "E:\\data.txt";
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath));

序列化对象常用api

//序列化数据到文件中
out.writeInt(100);//int -> Integer自动装箱,Integer实现了Serializable接口
out.writeBoolean(true);
out.writeChar('g');
out.writeDouble(1001);
out.writeUTF("放入字符串");//String
out.writeObject(new Dog("菲",23));

ObjectInputStream

创建流

public ObjectInputStream(InputStream in)
//示例
String filePath = "E:\\data.txt";
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath));

 反序列化对象常用api

//想要使用其反序列化的对象的方法,需要向下转型
//读取(反序列化)的顺序需要和你保存数据(序列化)的顺序一致
System.out.println(in.readInt());
System.out.println(in.readBoolean());
System.out.println(in.readChar());
System.out.println(in.readDouble());
System.out.println(in.readUTF());
Object dog = in.readObject();
System.out.println("运行类型:" + dog.getClass());
System.out.println(dog);
Dog temp = (Dog)dog;
System.out.println(temp.getName());

InputStreamReader

创建流

public InputStreamReader(InputStream in, String charsetName)
//示例
String filePath = "E:\\story.txt";
//FileInputStream 包装成 InputStreamReader
InputStreamReader in = new InputStreamReader(new FileInputStream(filePath),"gbk");
BufferedReader br = new BufferedReader(in);

字符转换常用api

public String readLine()
//示例
String s = "";
while((s = br.readLine()) != null){
    System.out.println(s);
}

OutputStreamReader

创建流

public OutputStreamWriter(OutputStream out, String charsetName)
//示例
String filePath = "E:\\trans.txt";
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath),"gbk"));

字符转换常用api

//字符输出
public void write(String str)

PrintStream

创建流

public PrintStream(OutputStream out)
//示例
//在默认情况下PrintStream输出数据的位置时 标准输出 即显示器
PrintStream out = new PrintStream(System.out);

常用api 

//输出字符串
public void print(String s)

//注:可以调用System的setOut方法修改打印流输出的位置或设备
System.setOut(new PrintStream("E:\\f1.txt"));

PrintWriter

创建流

public PrintWriter(OutputStream out)
//示例
PrintWriter out =  new PrintWriter(System.out);
PrintWriter o2 = new PrintWriter(new FileWriter("E:\\f2.txt"));

常用api

//写出一个字符串
public void write(String s)

Properties

properties读文件

创建

public Properties()
//示例:创建对象并加载配置文件
Properties properties = new Properties();
properties.load(new FileReader("src\\a.properties"));

常用api 

//获取文件中的所有信息
properties.list(System.out);
//根据key获取对应的值
System.out.println(properties.getProperty("username"));
System.out.println(properties.getProperty("password"));

properties写文件

创建

Properties properties = new Properties();

常用api

//如果有key则修改,如果没有则添加
properties.setProperty("charset","utf-8");
properties.setProperty("user","dd");
properties.setProperty("password","123456");
//写入信息,传入一个输出流和注释(可不写=>null)
properties.store(new FileWriter("src\\a2.properties",true),"test");

注意

1、再用io流写文件时,写完之后要刷新流或者关闭流,要不然无法写入

2、包装流使用到了装饰器设计模式

3、对象序列化和反序列化时,序列化和反序列化的对象应该来自同一个位置的同一个类

4、字节流更适合来处理二进制文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 思路 1、继承关系 2、运行时类型检查 结语 我的其他博客 前言 在Java编程中,强制类型转换是一个常见的操作&#xf…

鸿蒙应用开发ArkTS容器组件的使用

线性布局——Column/Row 线性布局是应用中最常用的布局,通过线性容器 Row 和 Column 构建 线性布局是其他布局的基础,其子元素在水平方向和垂直方向依次排列 线性布局的排列方向由所选容器组件决定,Column 容器内子元素按照垂直方向排列&a…

CSS-计数器 counter-reset、counter-increment、counter-reset

计数器 CSS的计数器通过在 content 上应用 counter() 或 counters()函数来显示计数的。其中计数器是由counter-reset和counter-increment 来进行操作的。 counter-increment 语法 counter-increment参数1:计算器名称 该标识符由不区分大小写的字母 a 到 z&#xf…

服务熔断(Hystrix)

服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

Open3D 入门教程

文章目录 1、概述2、安装3、点云读写4、点云可视化 4.1、可视化单个点云4.2、同一窗口可视化多个点云4.3、 可视化的属性设置 5、k-d tree 与 Octree 5.1、k-d tree5.2、Octree 5.2.1、从点云中构建Octree5.2.2、从体素栅格中构建 Octree 6、点云滤波 6.1、体素下采样6.2、统计…

java.lang.IllegalStateException: Duplicate key

序言 最近监控扫描出我们项目的某些异常信息,报错java.lang.IllegalStateException: Duplicate key xxx,看到异常来自stream流,然后定位看了一下是某位同事的代码使用stream流把List转Map集合出现重复的key异常信息。List集合A对象来源于某个…

Python命名规范中的[单/双][前导/后缀]下划线小结

如图所示 出处 Single and Double Underscores in Python Names

「C/C++ 01」 深拷贝和浅拷贝

目录 一、概念 1. 浅拷贝 2. 深拷贝 3. 深浅拷贝问题 4. 总结 二、在C的类中实现深拷贝 1. 拷贝构造函数 中实现深拷贝 a. 自己开辟一个新空间,然后将内容拷贝到新空间 b. 借助构造函数来实现深拷贝 2. operator 中实现深拷贝 a. 自己开辟一个新空间,…

JAVA版的鸿鹄云商B2B2C:多商家入驻直播商城系统特性解析 商城免 费搭建

鸿鹄云商 b2b2c产品概述 【b2b2c平台】,以传统电商行业为基石,鸿鹄云商支持“商家入驻平台自营”多运营模式,积极打造“全新市场,全新 模式”企业级b2b2c电商平台,致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

pyqt5实现wget下载视频文件的进度条显示

简介: 最近在写一个项目,用到了wget下载视频,为了更好的视觉效果,所以使用pyqt5中QProgressBar来实现下载进度条。当视频开始下载就会弹出下载进度条,下载完成后进度条消失。效果如下图; 具体代码实现 : …

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

2023 年 1 月份后,比特币 Ordinals 协议出现后为铭文赛道的出现奠定了基础,它以聪为单位将比特币分成份,并在每一聪上攥刻不同的信息以达到非同质化资产的效果,而此后包括 BRC20 在内的诸多采用了 Ordinals 方案的应用不断面向市场…

生成式AI大模型对人类进化的影响

你是不是发现每天的工作都离不开ChatGPT之类的语言生成模型?离不开类似Midjourney的图像生成模型?离不开一些设计类的AI辅助工具?如果是,那说明你已经逐步被AI侵蚀了,你的创造力也正在逐渐下降,大模型正在剥…

使用通道和模式

通过通道、选择语句和最佳实践掌握 Go 中的并发编程 并发编程是构建高效和响应迅速的软件的强大范例。Go,也被称为 Golang,通过通道提供了一种健壮且优雅的解决方案来进行并发通信。在这篇文章中,我们将探讨通道的概念、它们在并发编程中的作…

Qt配置opencv,cmake编译参考笔记,已成功

Qt版本:Qt5.14.2 opencv:4.5.4(不要用4.5.5!!很坑别问我为什么知道) cmake:下的最新版本 前言:为什么非得要用cmake编译呢?跳过cmake不好吗? 之前用的opencv…

pickle反序列化

文章目录 基础知识pickle简介可序列化对象object.__reduce__() 函数 pickle过程详细解读opcode简介pickletools 漏洞利用利用思路如何手写opcode 工具pker实战例题[MTCTF 2022]easypickle[HZNUCTF 2023 preliminary]pickle 基础知识 pickle简介 与PHP类似,python也…

内存管理学习

内存管理 在计算系统中,通常存储空间分为两种:内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为…

两种方法解决win10开机慢,经验分享

方法一: 1、按快捷键“winR”打开 运行窗口。 2、这时候输入“msconfig”后 ,点击“确定”或者按“ENTER”键。 3、这时候会打开一个名为“系统配置”的窗口, 在“常规”选项框下 勾选“有选择的启动”下的“加载系统服务”和“加载启动项”。…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…

[已解决] Ubuntu远程桌面闪退+登录显示“远程桌面由于数据加密错误 , 这个会话将结束“

两个月前,由于跑代码在Ubuntu配置环境,乱七八糟的下载了很多东西,导致了一系列问题..... 问题1 Ubuntu远程桌面闪退 实验室有两台服务器,IP后三位分别为141和142,其中141在输入密码后立即闪退,142可以正常…