目录

1.File类

2.流的概念及API

3.字节输入流

4.字节输出流

5.使用字节输入和字节输出流复制文件

6.字符输入流

7. 字符输出流

8.字符输入和字符输出流复制文件内容

9.使用处理流复制文件内容


1.File类

(1)常见构造方法

①File 变量名 = new File(String pathname);

②File 变量名 = new File(URI uri);

③File 变量名 = new File(String parent, String child);

④File 变量名 = new File(File parent, String child);

(2)常见方法

(3)例子

package test;import java.io.File;
import java.io.IOException;public class Test {public static void main(String[] args) {File file = new File("D:" + File.separator + "temp2" + File.separator + "a.txt");//File.separator代表文件中的斜线“\”//相当于File file2 = new File("D:\\temp2\\a.txt");File file3 = new File("b.txt");File parent = new File("D:\\temp2");File file4 = new File(parent, "c.txt");File file5 = new File("D:\\temp2", "d.txt");if(!file2.exists()){//file2不存在try {parent.mkdir();//创建文件夹file2.createNewFile();//创建file2文件} catch (IOException e) {e.printStackTrace();}}System.out.println(file3.getAbsolutePath());//输出绝对路径File files = new File("D:\\temp2\\test\\a");files.mkdirs();//创建多级目录}
}

2.流的概念及API

(1)流的概念

  • 流(Stream )的概念代表的是程序中数据的流通
  • 数据流是一串连续不断的数据的集合
  • 在Java程序中,对于数据的输入/输出操作是以流(Stream)的方式进行的

(2)流的分类
①按流的方向不同
输入流、输出流
②按处理数据的单位不同
字节流、字符流
③按功能不同
节点流、处理流

3.字节输入流

(1)InputStream常用的方法

  (2)例子

读取“D:\temp2”目录下a.txt文件的内容

package test;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class InputStreamTest {/** 一个一个字节读取    */public static void method1(){File directory = new File("D:\\temp2");File file = new File(directory, "a.txt");InputStream is = null;//创建字节输入流对象try {is = new FileInputStream(file);System.out.println(is.read());System.out.println(is.read());System.out.println(is.read());System.out.println(is.read());System.out.println(is.read());System.out.println(is.read());System.out.println(is.read());//............} catch (Exception e) {e.printStackTrace();} finally{try {is.close();//释放流占用的资源} catch (IOException e) {e.printStackTrace();}}}/** 多个字节读取   */public static void method2(){File directory = new File("D:\\temp2");File file = new File(directory, "a.txt");InputStream is = null;//创建字节输入流对象try {is = new FileInputStream(file);byte[] b = new byte[5];//开房间存放读取的数据,这是数据的中转站,也叫做缓冲区int num = 0;//用于记录每次读取到的字节数量while((num = is.read(b)) != -1){System.out.println(new String(b, 0, num));//打印读到的结果}} catch (Exception e) {e.printStackTrace();} finally{try {is.close();//释放流占用的资源} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {method1();method2();}
}

4.字节输出流

(1)OutputStream常用的方法

(2)例子

给“D:\temp2”目录下b.txt文件写入内容

package test;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class OutputSreamTest {/** 一个一个字节写入b.txt */public static void method1(){File directory = new File("D:\\temp2");File file = new File(directory, "b.txt");OutputStream os = null;//创建字节输出流try {os = new FileOutputStream(file);os.write(97);//aos.write(98);//bos.write(99);//cos.write(100);//dos.write(101);//e//......} catch (Exception e) {e.printStackTrace();} finally{try {os.close();释放流占用的资源} catch (IOException e) {e.printStackTrace();}}}/** 多个字节写入b.txt  */public static void method2(){File directory = new File("D:\\temp2");File file = new File(directory, "b.txt");OutputStream os = null;//创建字节输出流try {os = new FileOutputStream(file);byte[] b = new byte[]{'A', 'B', 'C', 'D', 'E'};os.write(b);} catch (Exception e) {e.printStackTrace();} finally{try {os.close();释放流占用的资源} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {method1();method2();}
}

5.使用字节输入和字节输出流复制文件

将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”

package test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class CopyFileContent1 {public static void main(String[] args) {File directory = new File("D:\\temp2");File src = new File(directory, "a.txt");// 源文件File dest = new File(directory, "b.txt");// 目标文件InputStream is = null;// 创建字节输入流对象OutputStream os = null;// 创建字节输出流对象try {is = new FileInputStream(src);os = new FileOutputStream(dest);byte[] b = new byte[5];// 开房间存放读取的数据,这是数据的中转站,也叫做缓冲区int num = 0;// 用于记录每次读取到的字节数量while ((num = is.read(b)) != -1) {os.write(b, 0, num);// 将从a.txt文件中读取到的字节写入b.txt}} catch (Exception e) {e.printStackTrace();} finally {try {is.close();// 释放流占用的资源} catch (IOException e) {e.printStackTrace();}}}
}

6.字符输入流

(1)Reader常用的方法

(2)例子

读取“D:\temp2”目录下a.txt文件的内容

package test;import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class ReaderTest {/** 一个一个字符读取  */public static void method1(){File directory = new File("D:\\temp2");File file = new File(directory, "a.txt");Reader reader = null;try {reader = new FileReader(file);System.out.println((char)reader.read());System.out.println((char)reader.read());System.out.println((char)reader.read());System.out.println((char)reader.read());System.out.println((char)reader.read());//......} catch (Exception e) {e.printStackTrace();} finally{try {reader.close();//关闭字符流占用的资源} catch (IOException e) {e.printStackTrace();}}}/** 多个字符读取  */public static void method2(){File directory = new File("D:\\temp2");File file = new File(directory, "a.txt");Reader reader = null;try {reader = new FileReader(file);char[] cbuf = new char[5];int num = 0;while((num = reader.read(cbuf)) != -1){System.out.println(new String(cbuf, 0, num));}} catch (Exception e) {e.printStackTrace();} finally{try {reader.close();//关闭字符流占用的资源} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {method1();method2();}
}

7. 字符输出流

(1)Writer常用的方法

(2)例子

给“D:\temp2”目录下b.txt文件写入内容

package test;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class WriterTest {/** 一个一个字符写入  */public static void method1(){File directory = new File("D:\\temp2");File file = new File(directory, "b.txt");Writer writer = null;try {writer = new FileWriter(file);writer.write(65);writer.write(66);writer.write(67);writer.write(68);writer.write(69);writer.write(70);//......} catch (IOException e) {e.printStackTrace();} finally{try {writer.close();//释放字符输出流占用的资源} catch (IOException e) {e.printStackTrace();}}}/** 多个字符写入    */public static void method2(){File directory = new File("D:\\temp2");File file = new File(directory, "b.txt");Writer writer = null;try {writer = new FileWriter(file);char[] cbuf = {'A', 'B', 'C', 'D', 'E', 'F'};writer.write(cbuf);} catch (IOException e) {e.printStackTrace();} finally{try {writer.close();//释放字符输出流占用的资源} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {method1();method2();}
}

8.字符输入和字符输出流复制文件内容

将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”

package test;import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;public class CopyFileContent2 {public static void main(String[] args) {File directory = new File("D:\\temp2");File src = new File(directory, "a.txt");File dest = new File(directory, "b.txt");Reader reader = null;Writer writer = null;try {reader = new FileReader(src);writer = new FileWriter(dest);char[] cbuf = new char[5];int num = 0;while((num = reader.read(cbuf)) != -1){writer.write(cbuf, 0, num);}} catch (Exception e) {e.printStackTrace();} finally{try {reader.close();//关闭字符流占用的资源writer.close();} catch (IOException e) {e.printStackTrace();}}}
}

9.使用处理流复制文件内容

package test;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;public class CopyFileContent3 {public static void main(String[] args) {File directory = new File("D:\\temp2");File src = new File(directory, "a.txt");File dest = new File(directory, "b.txt");BufferedReader reader = null;// 创建缓冲字符输入流BufferedWriter writer = null;// 创建缓冲字符输出流Reader read = null;// 创建字符输入流Writer write = null;// 创建字符输出流try {read = new FileReader(src);write = new FileWriter(dest);reader = new BufferedReader(read);writer = new BufferedWriter(write);int num = 0;char[] cbuf = new char[5];while ((num = reader.read(cbuf)) != -1) {writer.write(cbuf, 0, num);writer.flush();// 刷新}} catch (Exception e) {e.printStackTrace();} finally {try {read.close();reader.close();write.close();writer.close();} catch (IOException e) {e.printStackTrace();}}}
}

自动资源管理
       在JDK 7之前,我们需要使用一个finally块,来确保资源确实被释放掉,不管try块是完成了还是中断了。比如说读取文件或者输入流的时候,我们需要在finally块中关闭它们;而在Java 7里面,你可以使用try-with-resource的特性来自动关闭资源,只要是实现了AutoClosable和Closeable接口的都可以,几乎所有的资源类型都实现了Closeable接口,并重写了close()方法。JDK 7引入了try-with-resource语句,来确保每个资源在语句结束后都会调用AutoClosable接口的close()方法进行关闭。

例子:

package test;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;public class CopyFileContent3 {public static void main(String[] args) {File directory = new File("D:\\temp2");File src = new File(directory, "a.txt");File dest = new File(directory, "b.txt");try (Reader read = new FileReader(src);BufferedReader reader = new BufferedReader(read);Writer write = new FileWriter(dest);BufferedWriter writer = new BufferedWriter(write);) {int num = 0;char[] cbuf = new char[5];while ((num = reader.read(cbuf)) != -1) {writer.write(cbuf, 0, num);writer.flush();// 刷新}} catch (Exception e) {e.printStackTrace();}}
}

Java第十天笔记01——文件与流相关推荐

  1. 【狂神说Java】Vue学习笔记01:前端知识体系

    本文根据B站[狂神说Java]vue系列视频整理,如需观看视频,请点击链接跳转 [狂神说Java]Vue视频 2.前端知识体系 想要成为真正的"互联网Java全栈工程师"还有很长的 ...

  2. sun java学习_Java学习笔记 -- yaml文件配置

    yaml文件语法: ----------------------------实际操作--------------------------------- 文件目录: 创建Cat类: package co ...

  3. Java第十一天笔记01——多线程编程

    目录 1.进程和线程的区别 2.多线程的实现 3.多线程状态及生命周期 4.线程中的主要方法 5.线程的优先级 6.线程的高级操作 7.线程同步 8.死锁 9.Lock对象 1.进程和线程的区别 每个 ...

  4. Java第五天笔记01——面向对象基础

    目录 1.面向过程和面向对象的编程思想 2.类的定义 3.成员变量.局部变量.静态变量的区别 4.类和对象的关系 5.对象的创建 6.创建对象原理 7.垃圾回收机制 8.构造方法 9.Java包 10 ...

  5. Java第三天笔记01——流程控制语句

    目录 1.if条件语句 2.if...else条件语句 3.if...else if条件语句 4.switch条件语句 5.控制台输入 6.产生随机数 7.while循环 8.do-while循环语句 ...

  6. 苏晓茂的java面向对象核心编程笔记01

    包装类 1.包装类 基本数据类型的引用类型 byte------->Byte short------>Short int-------->Integer char-------> ...

  7. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  8. java第十九次学习笔记

    java第十九次学习笔记 异常 java第十九次学习笔记 前言 一.try catch 二.多个异常如何处理 前言 斯人若彩虹遇上方知有 一.try catch package Demo01;impo ...

  9. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

最新文章

  1. python可以自学吗-python能够自学吗
  2. python programming training(一):最大回文子字符串
  3. php内存泄漏的后果,记一次php内存泄漏的排查经过
  4. javascript 函数,数组,document.write()
  5. Unity 脚本的生命周期
  6. 几款软件需求分析工具
  7. 如何将文字转换成二维码?
  8. matlab编译桁架有限元计算(附有完整代码)
  9. Mac上使用Chrome浏览器截取长图
  10. ImportError: CuPy is not correctly installed解决方法
  11. 安卓ps2模拟器_RetroArch 1.9.0 for windows/mac/ios/Android【全平台主机游戏模拟器】
  12. go 学习笔记之解读什么是defer延迟函数
  13. gazebo设置_GAZEBO学习笔记(3)
  14. thingworx集中常见数据存储方法
  15. 基于ROS2开发的点云体素化
  16. python爬虫微信e校园签到,用Python爬虫的request方式实现自动签到!
  17. Core Data 教程:多托管对象上下文
  18. oracle数据库:ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接
  19. 【28】核心易中期刊推荐——医学影像识别及应用
  20. 新星计划 Electron+vue2 桌面应用 2 搭建及运行

热门文章

  1. 稳压二极管工作原理、重要参数意义和典型电路参数计算
  2. 腾讯视频评论爬虫实战
  3. python微信图片dat转码
  4. c语言程序设计四则运算,用C语言编程实现一个简单的四则运算计算器
  5. java设计模式_UML类图(上)
  6. java socket设备交互系统
  7. 北京信息工程学院考研计算机,2017届信息工程学院考研光荣榜
  8. 物联网考计算机是跨专业,2014考研计算机等专业 加入物联网技术方向_跨考网
  9. 实践GoF的23种设计模式:建造者模式
  10. MathWorks MATLAB R2020a中文版