Java第十天笔记01——文件与流
目录
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——文件与流相关推荐
- 【狂神说Java】Vue学习笔记01:前端知识体系
本文根据B站[狂神说Java]vue系列视频整理,如需观看视频,请点击链接跳转 [狂神说Java]Vue视频 2.前端知识体系 想要成为真正的"互联网Java全栈工程师"还有很长的 ...
- sun java学习_Java学习笔记 -- yaml文件配置
yaml文件语法: ----------------------------实际操作--------------------------------- 文件目录: 创建Cat类: package co ...
- Java第十一天笔记01——多线程编程
目录 1.进程和线程的区别 2.多线程的实现 3.多线程状态及生命周期 4.线程中的主要方法 5.线程的优先级 6.线程的高级操作 7.线程同步 8.死锁 9.Lock对象 1.进程和线程的区别 每个 ...
- Java第五天笔记01——面向对象基础
目录 1.面向过程和面向对象的编程思想 2.类的定义 3.成员变量.局部变量.静态变量的区别 4.类和对象的关系 5.对象的创建 6.创建对象原理 7.垃圾回收机制 8.构造方法 9.Java包 10 ...
- Java第三天笔记01——流程控制语句
目录 1.if条件语句 2.if...else条件语句 3.if...else if条件语句 4.switch条件语句 5.控制台输入 6.产生随机数 7.while循环 8.do-while循环语句 ...
- 苏晓茂的java面向对象核心编程笔记01
包装类 1.包装类 基本数据类型的引用类型 byte------->Byte short------>Short int-------->Integer char-------> ...
- 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】
学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...
- java第十九次学习笔记
java第十九次学习笔记 异常 java第十九次学习笔记 前言 一.try catch 二.多个异常如何处理 前言 斯人若彩虹遇上方知有 一.try catch package Demo01;impo ...
- 01.Java 编程入门学习笔记20210307
Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...
最新文章
- python可以自学吗-python能够自学吗
- python programming training(一):最大回文子字符串
- php内存泄漏的后果,记一次php内存泄漏的排查经过
- javascript 函数,数组,document.write()
- Unity 脚本的生命周期
- 几款软件需求分析工具
- 如何将文字转换成二维码?
- matlab编译桁架有限元计算(附有完整代码)
- Mac上使用Chrome浏览器截取长图
- ImportError: CuPy is not correctly installed解决方法
- 安卓ps2模拟器_RetroArch 1.9.0 for windows/mac/ios/Android【全平台主机游戏模拟器】
- go 学习笔记之解读什么是defer延迟函数
- gazebo设置_GAZEBO学习笔记(3)
- thingworx集中常见数据存储方法
- 基于ROS2开发的点云体素化
- python爬虫微信e校园签到,用Python爬虫的request方式实现自动签到!
- Core Data 教程:多托管对象上下文
- oracle数据库:ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接
- 【28】核心易中期刊推荐——医学影像识别及应用
- 新星计划 Electron+vue2 桌面应用 2 搭建及运行