IO、IO序列化
文件:文件可认为是相关记录或放在一起的数据的集合。文件一般保存在硬盘、U盘、光盘、云盘的媒介中。
JAVA API:java.io.File类可操作文件
File对象的构建
File file=new File(String pathname);
需要注意的是:String pathname的格式为:e:\\test.txt或e:/test.txt
File类常用的方法:
boolean exists()【判断文件或目录是否存在】
boolean isFile()【判断是否是文件】
boolean isDirectory()【判断是否是目录】
String getPath()【返回此对象表示的文件的相对路径名】
String getAbsolutePath()【返回此对象表示的文件的相对路径名】
String getName()【返回此对象表示的文件或目录的名称】
booblean delete()【删除此对象指定的文件或目录】
booblean creatNewFile()【创建名称的空文件,不创建文件夹】
long length()【返回文件的长度,单位为字节】
创建文件的方法:
public void create(File file) {
if (!file.exists()) {
try {
file.createNewFile();
System.out.println("文件已创建!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
删除文件的方法:
public void delete(File file) {
if (file.exists()) {
file.delete();
System.out.println("文件已删除!");
}
}
显示文件的方法:
public void showFileInfo(File file) {
if (file.exists()) { // 判断文件是否存在
if (file.isFile()) { // 如果是文件
System.out.println("名称:" + file.getName());
System.out.println("相对路径: " + file.getPath());
System.out.println("绝对路径: " + file.getAbsolutePath());
System.out.println("文件大小:" + file.length() + " 字节");
}
if (file.isDirectory()) {
System.out.println("此文文件是目录");
}
} else
System.out.println("文件不存在");
}
流
流:流是指一连串流动的字符,是以先进先出方式发送信息的通道。

常用的文件读写类
文本文件的读写
字节流方式:FileInputStream、FileOutputStream
字符流方式:BufferedReader、BufferedWriter
二进制文件的读写
DataInputStream、DataOutputStream
字节流方式读写文本
FileInputStream 读文本文件
InputStream类常用方法
int read()【从此输入流中读取一个数据字节】
int read(byte[] b)【从此输入流中将最多b.length个字节的数据读入一个byte数组中。】
int read(byte[] b,int off,int len)【从此输入流中将最多len个字节的数据读入一个byte数组中】
void close()【关闭此文件输入流并释放与此流有关的所有系统资源】
int available() 【返回下一次对此输入流调用的方法可以不受阻塞的从此输入流读取(或跳过)的估计剩余字节】
子类FileInputStream常用的构造方法
FileInputStream(File file)【通过文件对象创建FileInputStream对象】
FileInputStream(String name)【通过name文件路径创建FileInputStream对象】
FileOutputStream 写文本文件
OutputStream类常用方法
void write(int c) 【将指定字节写入此文件输出流。】
void write(byte[] buf)【将 b.length 个字节从指定 byte 数组写入此文件输出流中。】
void write(byte[] b,int off,int len) 【将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。】
void close( ) 【关闭此文件输出流并释放与此流有关的所有系统资源。】
子类FileOutputStream常用的构造方法
FileOutputStream (File file) 【创建一个向指定 File 对象表示的文件中写入数据的文件输出流。】
FileOutputStream(String name) 【创建一个向具有指定名称的文件中写入数据的输出文件流。】
FileOutputStream(String name, boolean append) 【创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。】
需要注意的是:
1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容。
2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件。
3、FileInputStream和FileOutputStream创建的流属于节点流,直接操纵数据源。
字符流方式读写文本文件
BufferedReader读文本文件
实例:
//缓冲流的使用
public static void main(String[] args) throws Exception {
//BufferedReader读取文件信息
//reader类的子类FileReader
FileReader fr=new FileReader("f:/text.txt");
BufferedReader br=new BufferedReader(fr);
//利用缓冲流读取信息
String line=br.readLine();//每次读一行数据
while(line!=null){
System.out.println(line);
line=br.readLine();
}
//关闭流
br.close();
fr.close();
}
使用字符流读取文本文件相关类
Reader
FileReader(节点流)
BufferedReader(处理流)
Reader类常用方法
int read( )
int read(char[] c)
int read(char[] c,int off,int len)
void close( )
子类BufferedReader常用的构造方法
public BufferedReader(Reader in) //in通常使用FlieReader对象
子类BufferedReader特有的方法
public String readLine() //读取一行信息
BufferedWriter写文本文件
使用字符流写文本文件相关类
Writer
FileWriter(节点流)
BufferedWriter(处理流)
Writer类常用方法
void write(String str)
void write(String str,int off,int len)
void close()
void flush()
子类BufferedWriter常用的构造方法
BufferedReader(Writer out) //in通常使用FlieWriter对象
字节流方式读写二进制文件
DataInputStream类读取二进制文件(处理流)
FileInputStream的子类
与FileInputStream类结合使用读取二进制文件
DataOutputStream类写二进制文件(处理流)
FileOutputStream的子类
与FileOutputStream类结合使用写二进制文件
序列化与反序列化的过程:
package com.zx5;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
//--------------------------------序列化的过程-----------------------------------------------
public class Test {
//把对象写入到磁盘文件,叫做序列化,,,,,反序列化就是把磁盘文件还原
public static void main1(String[] args) throws Exception {
//集合都可以序列化
List<Object> list=new ArrayList<Object>();
list.add(10);
list.add("200");
list.add(23.23);
OutputStream out=new FileOutputStream("f:/text.txt");
//objectOutputStream序列化的流
ObjectOutputStream oos=new ObjectOutputStream(out);
//写入对象
oos.writeObject(list);
//关闭流
oos.close();
out.close();
}
//----------------------------------------反序列化------------------------------
public static void main(String[] args) throws Exception {
//反序列化:把二进制文件中的内容恢复成对象
//字节输入流对象
InputStream in=new FileInputStream("f:/text.txt");
//创建一个ObjectInputStream对象
ObjectInputStream ois=new ObjectInputStream(in);
//读取readObject()
Object obj=ois.readObject();//读出对象
List<Object> list=(List<Object>) obj;
for (Object object : list) {
System.out.println(object);
}
}
}
需要注意的是:
如果不对钱进行序列化,可用transient进行修饰,如:private transient double money;
IO、IO序列化的更多相关文章
- Netty学习二:Java IO与序列化
1 Java IO 1.1 Java IO 1.1.1 IO IO,即输入(Input)输出(Output)的简写,是描述计算机软硬件对二进制数据的传输.读写等操作的统称. 按照软硬件可分为: 磁盘I ...
- java.io.Serializable 序列化问题
java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...
- IO流--序列化流与反序列化流
IO流--序列化流与反序列化流: 序列化流:把对象当做流一样写入到文本文件中 ObjectOutputSream(); 反序列化流:把文本文件中的流对象还原成对象ObjectInputSream(): ...
- java.io.Serializable 序列化问题【原】
java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...
- IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO
IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块
python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...
- Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- java.io.Serializable 序列化接口
什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...
随机推荐
- Linux杀不死的进程之CPU使用率700%
1. 问题发现 [root@zwlbs3 ~]# top i. 发现有个进程CPU使用率居然700%,COMMAND 是一些随机的字符串组成,完了~ 中标了:第一想到就是“沙雕”它,kill 命令给我 ...
- 日志文件写入失败(permission denied)
用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...
- JD面试 || 移除教室人数
在昨天参加了东哥的笔试,选择题做的还算可以,但是还有道编程题和关于jdk8的Stream特性难住了.鉴于此用博客总结一下这道编程题,并结合Stream特性来简化代码,熟悉Api. 题目描述 某校在积极 ...
- jar在linux上运行
打jar后一直在linux远程的运行: nohup java -jar xxx.jar & CRT(打开时运行):(另外上传文件可使用“rz”命令,上传jar包) java -jar xxx. ...
- SSH开发模式——Struts2(第一小节)
在制定了学习计划的学习过程中,我感觉学习还是很有效率的.很短的时间内,我便学习完了JavaWeb的连接池.DbUtils框架及其一些工具类的使用. 学无止境,学习这些知识还远远不够,所以,在接下来的时 ...
- Shell总结2
1.---------->>sed命令用来取指定范围行. 2.--------------->>>>“$?“返回值的用法 (1)判断命令.脚本或函数等程序是否执行成 ...
- 一文了解:Redis主从复制
Redis主从复制 主从复制 主从复制,将一台Redis服务器的数据,复制到其他Redis服务器.前者称为主(master)节点,后者称为从(slave)节点 . 在默认的情况下,Redis都是主节点 ...
- 设计模式(C#)——06桥接模式
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 在早先,几乎每个手机的充电器接口都是不同的.每个型号的手机都有一个充电器,此时我们把充电器作为一个抽象类,抽象类中提 ...
- [Python] 常见的排序与搜索算法
说明: 本文主要使用python实现常见的排序与搜索算法:冒泡排序.选择排序.插入排序.希尔排序.快速排序.归并排序以及二分查找等. 对算法的基本思想作简要说明,只要理解了基本的思想,与实现语言无关. ...
- Jedis操作Redis--Key操作
/** * Key(键) * DEL,DUMP,EXISTS,EXPIRE,EXPIREAT,KEYS,MIGRATE,MOVE,OBJECT,PERSIST,PEXPIRE,PEXPIREAT,PT ...