java学习--IO
目录
一、File 类
二、主要方法
1、创建文件
ceateNewFile
2、创建文件夹
mkDir()
mkDirs()
3、遍历文件夹
File[] files = listFile();
String[] files = file.list();
4、删除文件
文件夹和文件的删除都统一用
注意:文件夹不为空时,删除不成功!
5、创建临时文件
File.createTmpFile()
6.deleleOnExit() 与delete() 的区别
7、文件过滤器
文件过滤器是在遍历文件夹时使用,需要重写
三、流
对文件内容的操作
分类:
输入流: 外介
Scanner sc = new Scanner(System.in);
输出流:程序
字节流:传输单位
字符流:传输单位
InputStream : 所有字节输入流超类
OutputStream : 所有字节输出流超类
1. 字节流
ps:写文件时,如果文件不存在,会创建该文件
读文件时,如果文件不存在,则会抛异常。
package com.demo.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyDemo { /** * 文件拷贝方法 * @param oldpath * @param newpath * @return * 2018年8月28日 */ public static boolean copy(String oldpath,String newpath) { FileInputStream fis=null; FileOutputStream fos =null; try { fis = new FileInputStream(new File(oldpath)); fos = new FileOutputStream(new File(newpath)); byte [] b = new byte[1024]; int len = 0; while((len = fis.read(b))!= -1) { fos.write(b, 0, len); fos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { fos.close(); fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
2. 字符流
package com.demo.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyDemo { /** * 文件拷贝方法 * @param oldpath * @param newpath * @return * 2018年8月28日 */ public static boolean copy(String oldpath,String newpath) { FileWriter fw = null; FileReader fr = null; try { fw= new FileWriter(new File(newpath)); fr=new FileReader(new File(oldpath)); char[] c = new char[1024]; int len =0; while((len=fr.read(c))!=-1) { fw.write(c,0,len); fw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { fr.close(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
字节流转换成字符流的桥梁
InputStreamReader:
OutputStreamWriter:
字节流:
一次读写一个字节,一般应用于底层通信或者以
二进制流存储的文件,比如图片、视频、音频等多媒体文件。
字符流:
一次读写一个字符,缓冲流可对其进行包装,效率较高
因为字符流的字符编码采取
较好,一般有中文的文本采用字符流较好。
4. 缓冲流
利用缓冲字符流进行文件拷贝
package com.demo.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyDemo { /** * 文件拷贝方法 * @param oldpath * @param newpath * @return * 2018年8月28日 */ public static boolean copy(String oldpath,String newpath) { BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new FileReader(oldpath)); bw = new BufferedWriter(new FileWriter(newpath)); String data = null; while((data=br.readLine())!=null) { bw.write(data); bw.newLine(); bw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { bw.close(); br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
利用缓冲字节流进行文件拷贝
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyDemo { /** * 文件拷贝方法 * @param oldpath * @param newpath * @return * 2018年8月28日 */ public static boolean copy(String oldpath,String newpath) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(new FileInputStream(oldpath)); bos = new BufferedOutputStream(new FileOutputStream(newpath)); byte[] b = new byte[1024]; int len = 0; while((len = bis.read(b))!=-1) { bos.write(b,0,len);
bos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { bos .close(); bis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
5. 打印流
只有输出流,没有输入流
增强流,提供各种数据类型的格式输出
含有丰富的
打印流不会抛出异常,并不是没有异常,而是在其内部已经处理了
6. 对象流
序列化
反序列化
序列化的对象需要实现
package com.work.io; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class SerializableDemo implements Serializable{ /** * 2018年9月6日 */ private static final long serialVersionUID = 2105404167541676591L; private String name; private int age; public SerializableDemo(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Main{ public static void serialization(String path,Object obj) { ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream(path)); oos.writeObject(obj); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static List<SerializableDemo> unserialization(String path) { ObjectInputStream ois = null; List<SerializableDemo> list = new ArrayList<>(); try { ois=new ObjectInputStream(new FileInputStream("path")); SerializableDemo sd = null; while((sd=(SerializableDemo)ois.readObject())!=null) { list.add(sd); } return list; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }
7. flush() 方法
这个方法很是将存在内存中的数据清空。就像在水管的一端施加外力一样。
以下面的代码为例:
while((tempData = bis.read())!=-1){ os.write(tempData); os.flush(); }
while((tempData = bis.read())!=-1){ os.write(tempData); } os.flush();
上面这两种情况若是写到网页端的话,效果会很明显,
第一种是缓加载出来的。而后一种则是一下直接加载一大半或全部加载完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!