写点什么

Java- 进阶:Java-File-&-IO—1

  • 2022 年 4 月 19 日
  • 本文字数:3327 字

    阅读完需:约 11 分钟

//try 外面声明变量,try 里面建立对象,为了提升流对象作用域//定义 FileOutputStream 的引用 FileOutputStream fos = null;try {//创建 FileOutputStream 对象 fos = new FileOutputStream(file);//写出数据 fos.write("abcde".getBytes());} catch (IOException e) {System.out.println(e.toString() + "----");throw new RuntimeException("文件写入失败,重试");} finally {//一定要判断 fos 是否为 null,只有不为 null 时,才可以关闭资源 if (fos != null) {try {fos.close();} catch (IOException e) {throw new RuntimeException("关闭资源失败");}}}}}


##四、字节输入流 ###1. 概述 java.io.InputStream: 此抽象类是表示字节输入流的所有类的超类。读取任意文件,每次只读取 1 个字节 ###2. 核心方法 abstract int read():读取一个字节 read()方法的特点:read() 执行一次,就会自动读取下一个字节,返回值是读取到的字节, 读取到结尾返回 -1


public class IoDemo {public static void main(String[] args) throws IOException {//创建字节输入流的子类对象 FileInputStream fis = new FileInputStream("E:\a.txt"); //ABCD//读取一个字节,调用 read 方法,返回 int//使用循环方式,读取文件,循环结束的条件:read() 返回 -1int len = 0; //接收 read()的返回值 while((len = fis.read()) != -1){System.out.print((char)len); //可以转换成字符}//关闭资源 fis.close();}}


int read(byte[] b):读取一定数量的字节,并将其存储在缓冲区数组 b 中 int read(byte[] b, int off, int len) :读取最多 len 个字节,存入 byte 数组。数组的作用:缓冲的作用, 提高效率 read 返回的 int,表示读取到多少个有效的字节数


public class IoDemo {public static void main(String[] args) throws IOException {//创建字节输入流的子类对象 FileInputStream fis = new FileInputStream("E:\a.txt");//创建字节数组 byte[] b = new byte[1024];


int len = 0;while((len = fis.read(b)) != -1){System.out.print(new String(b,0,len)); //使用 String 的构造方法,转为字符串}//关闭资源 fis.close();}}


###3. FileInputStream 类 ####(1)构造方法为这个流对象 绑定数据源 FileInputStream(File file)FileInputStream(String name)参数:File 对象 和 String 对象 ####(2)输入流读取文件的步骤创建字节输入流的子类对象调用读取方法 read 读取关闭资源 ####(3)读取数据的方式:第一种方式:一次读取一个字节数据第二种方式:一次读取一个字节数组第二种方式效率更高,每次读取都会和操作系统发生一次交互,第二种方式每次可以读取多个数据,提高了操作效率 ####4、释放资源的另一种方式


//1.第一种释放资源的方式 closeQuietly//释放输入流资源 closeQuietly(fis);//释放输出流对象 closeQuietly(fos);private static void closeQuietly(Closeable close) {if(close != null) {try {close.close();} catch (IOException e) {e.printStackTrace();}}}


//2.jdk7 中引入的 try-with-resource 语句


try(放申请资源的语句){


}catch() {


}


// 一旦资源的申请放在 try-with-resource 语句的()中,那么资源会保证一定自动被释放


##五、字节流文件复制 ###1. 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 读取单个字节


public class Copy {public static void main(String[] args) {long s = System.currentTimeMillis();//定义两个流的对象变量 FileInputStream fis = null;FileOutputStream fos = null;try{//建立两个流的对象,绑定数据源和数据目的 fis = new FileInputStream("D:\test.mp3"); //8,003,733 字节 fos = new FileOutputStream("d:\test.mp3");//字节输入流,读取 1 个字节,输出流写 1 个字节 int len = 0 ;while((len = fis.read())!=-1){fos.write(len);}}catch(IOException e){System.out.println(e);throw new RuntimeException("文件复制失败");}finally{try{if(fos!=null)fos.close();}catch(IOException e){throw new RuntimeException("释放资源失败");}finally{try{if(fis!=null)fis.close();}catch(IOException e){throw new RuntimeException("释放资源失败");}}}long e = System.currentTimeMillis();System.out.println(e-s);}}//耗时:61817


###2. 读取字节数组


public class Copy_1 {public static void main(String[] args) {long s = System.currentTimeMillis();FileInputStream fis = null;FileOutputStream fos = null;try{fis = new FileInputStream("D:\test.mp3");fos = new FileOutputStream("E:\test.mp3");//定义字节数组,缓冲 byte[] bytes = new byte[1024*10];//读取数组,写入数组 int len = 0 ;while((len = fis.read(bytes))!=-1){fos.write(bytes, 0, len);}}catch(IOException e){System.out.println(e);throw new RuntimeException("文件复制失败");}finally{try{if(fos!=null)fos.close();}catch(IOException e){throw new RuntimeException("释放资源失败");}finally{try{if(fis!=null)fis.close();}catch(IOException e){throw new RuntimeException("释放资源失败");}}}long e = System.currentTimeMillis();System.out.println(e-s);}}//耗时:41


##六、字符输出流 ###1. 概述 java.io.Writer 所有字符输出流的超类。写文件,写 文本文件 ###2. 方法介绍 void write(int c):写入单个字符 void write(String str) :写入字符串 void write(String str, int off, int len):写入字符串的某一部分 void write(char[] cbuf):写入字符数组 abstract void write(char[] cbuf, int off, int len) :写入字符数组的某一部分 ###3. FileWriter 类 Writer 类是抽象类,找到子类对象 FileWriter 构造方法:参数也是 File 类型对象 和 String 文件名字符输出流,写数据的时候,必须要运行一个功能,刷新功能:flush()


public class WriterDemo {public static void main(String[] args) throws IOException{FileWriter fw = new FileWriter("c:\1.txt");


//写 1 个字符 fw.write(100);fw.flush();


//写 1 个字符数组 char[] c = {'a','b','c','d','e'};fw.write(c);fw.flush();


//写字符数组一部分 fw.write(c, 2, 2);fw.flush();


//写如字符串 fw.write("hello");fw.flush();


fw.close();}}


##七、字符输入流 ###1. 概述 java.io.Reader,字符输入流读取文本文件,所有字符输入流的超类,专门读取文本文件 ###2. 方法介绍 int read(): 读取单个字符 int read(char[] cbuf):将字符读入数组 abstract int read(char[] cbuf, int off, int len) :将字符读入数组的某一部分没有读取字符串的方法 ###3. FileReader 类 Reader 类 是抽象类,找到子类对象 FileReader 构造方法:写入的数据目的。绑定数据源。参数也是 File 类型对象 和 String 文件名


public class ReaderDemo {public static void main(String[] args) throws IOException{FileReader fr Java 开源项目【ali1024.coding.net/public/P7/Java/git】 = new FileReader("c:\1.txt");//读字符/int len = 0 ;while((len = fr.read())!=-1){System.out.print((char)len);}/


//读数组 char[] ch = new char[1024];int len = 0 ;while((len = fr.read(ch))!=-1){System.out.print(new String(ch,0,len)); //转字符串}fr.close();}}


###4. flush 方法和 close 方法区别 flush()方法:用来刷新缓冲区的,刷新后可以再次写出,只有字符流才需要刷新 close()方法:用来关闭流释放资源的的,如果是带缓冲区的流对象的 close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出


##八、字符流复制文本文件字符流复制文本文件,必须是文本文件

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级 Java 开发面试高频考点题笔记 300 道.pdf”和“Java 核心知识体系笔记.pdf”文件分享,内容丰富,囊括了 JVM、锁、并发、Java 反射、Spring 原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有 Java 进阶学习的知识笔记脑图(内含大量学习笔记)!


资料整理不易,读者朋友可以转发分享下!


Java 核心知识体系笔记.pdf



中高级 Java 开发面试高频考点题笔记 300 道.pdf



架构进阶面试专题及架构学习笔记脑图



Java 架构进阶学习视频分享

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java-进阶:Java-File-&-IO—1_Java_爱好编程进阶_InfoQ写作平台