IO 复习
创始人
2024-05-28 13:45:15
0

IO

把电脑硬盘中的数据读到程序中,称为输入,进行数据的read操作

把程序往外部设备写数据,称为输出,进行数据的write操作

File类

一个File对象可以表示计算机硬盘上的一个文件或目录(文件夹)

可以获取文件信息,创建文件,删除文件

但是不能对文件中的数据进行读写操作

一些File类的方法

public class FileDemo {public static void main(String[] args) {
​
​/*File类中构造方法*//*String p = "E:/";File f1 = new File(p,"demo.txt");File f2 = new File(p,"demo.txt");*/
​/*File pf = new File("E:");File f2 = new File(pf,"demo.txt");*/
​File f = new File("E:/demo.txt");System.out.println(f.canExecute());// 文件是否可以被执行System.out.println(f.canRead());// 是否可以读取System.out.println(f.canWrite());// 是否可以写
​System.out.println("---------------------------");System.out.println(f.exists());// 文件是否存在System.out.println(f.getAbsolutePath());//获得文件绝对地址
​System.out.println(f.getName());// 获取文件名字System.out.println(f.getParent());// 获取父级地址
​System.out.println(f.isAbsolute());//是否为绝对路径System.out.println("---------------------------");System.out.println(f.isDirectory());// 是否是文件夹System.out.println(f.isFile());// 是否是文件System.out.println(f.isHidden());// 是否隐藏文件
​System.out.println(new Date(f.lastModified()));//文件最后一次修改的时间System.out.println(f.length());//文件内容长度 以字节为单位
​}
}

流的分类

按照流(java提供的读写文件的类)的读写单位划分为

字节流:每次读写是以字节为单位(计算机中的所有数据存储都是字节为单位) 可以读取任意文件(视频,音频...)

字符流:每次都写是以字符为单位 只能读取纯文本文件(txt,java,html)

字节流

输入字节流:InputStream

FileInputStream就是节点流 直接负责对接文件,对文件进行读写操作

输出字节流:OutputStream

FileOutputStream

public class StreamDemo1 {
​public static void main(String[] args) throws IOException {
​//创建一个输入字节流对象 并为其指定要读的文件FileInputStream in = new FileInputStream("E:/demo.txt");//输入的源文件不存在,会报错FileOutputStream out = new FileOutputStream("D:/demo.txt");//输出时文件不存在是可以自动创建//in.read() 每次读到一个字节数据  并返回, 直到读完后返回-1.int b = 0;while ((b = in.read()) != -1) {out.write(b);}in.close();out.close();//关闭流通道 释放文件}
}
public class StreamDemo2 {
​public static void main(String[] args) throws IOException {
​FileInputStream in= new FileInputStream("E:/feige.exe");FileOutputStream out = new FileOutputStream("E:/demo.exe");//read()  write(int b) 每次只能读入 写出一个字节 效率低, 读写次数多//in.read(b); 每次读一个byte数组个字节内容,返回实际向数组装入的字节数量 读完也是返回-1byte[] b = new byte[1024];int size=0;// 每次最多读取b.length个字节数据为字节数组while((size=in.read(b))!=-1){System.out.println(size);//每次向外写出一个byte数组个字节,从第0个开始,写size个,效率高out.write(b,0,size);}in.close();out.close();}
}

根据封装类型不同流分为:

节点流: 封装的是某种特定的数据源,如文件、字符串、字符串数组等

FileInputStream就是节点流 直接负责对接文件,对文件进行读写操作

处理流:封装的是其他流对象,处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法

public class StreamDemo4 {
​public static void main(String[] args) throws IOException {
​//节点流  直接负责数据读和写FileInputStream in = new FileInputStream("E:/feige.exe");FileOutputStream out = new FileOutputStream("E:/demo.exe");
​//处理流/包装流/缓存流(带缓冲区)BufferedInputStream bin = new BufferedInputStream(in);BufferedOutputStream bout = new BufferedOutputStream(out);
​byte [] b  = new byte[1024];int size = 0;while((size=bin.read())!=-1){bout.write(b,0,size);}
​bin.close();bout.flush();//刷新缓存区bout.close();
​
​}
}

字符流

字符流只能读纯文本文件

输入字符流

Reader

InputStreamReader

输入转换流,可以把原始字节结合 编码转为字符

FileReader 可以读入一个字符

输出字符流

Writer

OutputStreamWriter

将字符转为字节

FileWriter 可以写出一个字符

FileReader reader = new FileReader("E:/demo.txt");
FileWriter writer = new FileWriter("E:/demo1.txt");
​
char[] cs  = new char[10];
int size = 0;
// reader.read();// 一次读到一个字符编码
while((size=reader.read(cs))!=-1){System.out.println(size);writer.write(cs,0,size);
}
reader.close();
writer.close();

 //节点流 直接包含数据
FileReader reader = new FileReader("E:/demo.txt");
FileWriter writer = new FileWriter("E:/demo2.txt",true);//后面输出不会覆盖前面的,会保留前面的内容
​
//字符处理流BufferedReader breader = new BufferedReader(reader);BufferedWriter bwriter = new BufferedWriter(writer);//readLine() 一次读一行数据  一次缓冲一行数据String line  = null;while((line=breader.readLine())!=null){bwriter.write(line);//一次写出一行数据bwriter.newLine();//插入一个换行符}
​breader.close();bwriter.flush();//缓冲流关闭前需要刷新bwriter.close();

字符处理流这里我们可以一行一行的读和写,这样加大了读写操作的效率

对象输入流和对象输出流

对象---指的是java程序运行时产生的对象

将程序运行时,创建的对象,输出到一个文件中

为什么要将运行时的对象输出到文中?

为了实现数据 持久保存 有时,服务器要关闭(程序结束运行),结束运行时,将一些保存下来

对象输出-->对象序列化

对象输入流 将文件中存储的对象信息 在输入到程序中-->对象反序列化(java中创建对象的方式之一)

java中创建对象 不仅仅只有new一种 对象反序列化 反射

创建一个User类 并且实现Serializable接口,如果不实现的话,那么此类对象信息将无法被输出到文件中

//需要被序列化的类,必须实现Serializable接口,会为类生成一个序列化id号,是唯一与类对应
public class User implements Serializable {
​private Integer id;private String name;
​public User(Integer id, String name) {this.id = id;this.name = name;}
​public Integer getId() {return id;}
​public void setId(Integer id) {this.id = id;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
}

public class ObjectStream {
​public static void main(String[] args) throws IOException, ClassNotFoundException {
​/* Date date = new Date();String s = new String("abc");User user = new User(1, "jim");
​// 讲对象信息输出到文件中  称为对象序列化  对象的类必须实现java.io.Serializable接口FileOutputStream out = new FileOutputStream("E:/obj.txt");ObjectOutputStream objectOut = new ObjectOutputStream(out);objectOut.writeObject(date);objectOut.writeObject(s);objectOut.writeObject(user);objectOut.flush();objectOut.close();*/
​// 对象反序列化  将文件中的信息输入到程序  再创建一个对象FileInputStream in = new FileInputStream("E:/obj.txt");ObjectInputStream objIn = new ObjectInputStream(in);Date date = (Date) objIn.readObject();String s = (String) objIn.readObject();User user = (User) objIn.readObject();
​System.out.println(date);System.out.println(s);System.out.println(user.getId()+":"+user.getName());}
}

相关内容

热门资讯

你的晚安是我的早安是什么歌曲 你的晚安是我的早安是什么歌曲苏天伦《你的早安是我的晚安》“你的晚安是我的早安”是单小源的歌曲《东京遇...
积极进取的小故事 积极进取的小故事现代的普通人,不要名人的。不能与别人重复,尽快回答   啄木鸟的故事       啄...
熊出没之探险日记3什么时候播出... 熊出没之探险日记3什么时候播出?熊出没之探险日记3,春节前播放。熊出没只是探险日记三2020年5月4...
谁知道所有有关“七”的歌?拜托... 谁知道所有有关“七”的歌?拜托了各位 谢谢就是歌曲名里有“七”这个字的!谢谢七月七迅谈日晴 看我七十...
求一本小说 女主穿越了三次 每... 求一本小说 女主穿越了三次 每次都在福临身边 后来怀孕了孩子被打掉了那个 女主叫什么雯?那个女主就是...
如果记忆不说话,流年也会开出花... 如果记忆不说话,流年也会开出花的基本信息书 名:《如果记忆不弯饥好说话,流年也会开出花》埋铅 作 者...
你好,旧时光漫画版在哪里可以看... 你好,旧时光漫画版在哪里可以看?暂时在绘心上连载
一首英文歌,男的组合唱的,MV... 一首英文歌,男的组合唱的,MV是一个婚礼的过程。求歌名。是不是darin的can'tstoplove...
为什么很多人喜欢用胶片相机? 为什么很多人喜欢用胶片相机?有一种情怀叫做“怀旧“吧,现在数码相机越来越普遍了,已经到了”全民摄影“...
女主先爱上男主,男主却不喜欢女... 女主先爱上男主,男主却不喜欢女主或者是另有所爱,最后女主男主还是在一起的穿越小说。有木有再生缘:我的...
爱情失恋伤感句子 爱情失恋伤感句子越是美好的从前,越幸福的曾经,现在只能带来锥心的疼痛,痛到撕心裂肺,肝肠寸断,终于痛...
24岁穿这个会不会显老 24岁穿这个会不会显老有点显老,这个颜色款式,颜色有点暗,没有活力,属于那种气质佳,长得高雅的女人,...
哈尔的移动城堡英语版 哈尔的移动城堡英语版可以发给我吗度盘~请查收~
秦时明月之万里长城什么时候播 秦时明月之万里长城什么时候播据说是今年暑假开播别急,官网什么的信他你就输了,12年之前底应该会出,杭...
孩子会得抽动症吗? 孩子会得抽动症吗?我天生的气性比较大,有时跟别人斗嘴时候就会手脚哆嗦,麻木,我问一下这是不是抽动症就...
亨德尔一生为音乐献出了怎样的贡... 亨德尔一生为音乐献出了怎样的贡献?亨德尔一生写了歌剧41部,清唱剧21部,以及大量的管乐器与弦乐器的...
礼仪起源和发展的经典故事? 礼仪起源和发展的经典故事?一、礼仪的起源;1、天神生礼仪;2、礼为天地人的统一体;3、礼产生于人的自...
描写桂林山水的句子有哪些? 描写桂林山水的句子有哪些?天下风光数桂林有杨万里的“梅花五岭八桂林,青罗带绕碧玉簪”;有邹应龙的“无...
避免与强敌正面对决的成语 避免与强敌正面对决的成语避免与强敌正面对决的成语避实就虚 【近义】避重就轻、避难就易、声东击西【反义...
多愁善感类的成语 多愁善感类的成语心细如发【解释】:极言小心谨慎,考虑周密。亦作“心细于发”。【出自】:吴梅《题天香石...