使用字节流和字符流对文件进行操作
本文比较详细的记录了使用使用字节流和字符流对文件进行写入,读取,复制的操作
1.字节流
package com.yzy.io;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;/*** @className Test1.java* @author yangsir* @version V1.0* @date 2019年8月10日-下午4:13:33* @description**/
public class Test1 {public static void main(String[] args) throws IOException {// 打开文件时可能出现异常所以这里要抛出File file = new File("f:/test/yzy.txt");// 创建这个路径下文件的映射Writer w = new FileWriter(file);// 字符流一般用FileWriter来写入内容,如果文件不存在,这里的FileWriter会自动包装File从而创建出一个新文件w.write("字符流:主要用来处理字节或二进制对象");// 写入内容w.flush();// 写入内容后要刷新缓冲区w.close();// 关闭write流FileReader r = new FileReader(file);// 创建一个FileReader对象来读取文件内容char[] ch = new char[3];// 每次要读取的字符数int len;// 用来记录读取的长度while ((len = r.read(ch)) != -1) {// 当len为-1时说明文件已被读完,不等于时说明还可以继续读String s = new String(ch, 0, len);// 这里用new String来创建一个新对象,来获取所需要的字符的部分System.out.print(s);// 输出}r.close();// 最后要关闭read流FileReader fr = null;// 先创建一个fr用来读文件FileWriter fw = null;// 然后创建fw来写入新文件// 这里可能出现异常所以使用try块try {fr = new FileReader(new File("f:/test/yzy.txt"));// 读旧文件fw = new FileWriter(new File("f:/test/yzy1.txt"));// 创建FileWriter来写入内容char[] ch1 = new char[1024];// 此处参考上面int len1;while ((len1 = fr.read(ch1)) != -1) {fw.write(ch1, 0, len1);}// 两个catch块必须把子类写在前面,子类为文件找不到异常,父类为读写文件失败} catch (FileNotFoundException e) {e.printStackTrace();// 如果找不到就会让程序可以继续运行而且告诉你程序异常详细位置} catch (IOException e) {e.printStackTrace();} finally {// 复制成功或者失败都要关掉文件,所以放在finally块中try {if (fw != null)// 使用完毕,如果有内容,就可以关掉了fw.close();// 关闭write流,后打开先关闭if (fr != null)// 使用完毕,如果有内容,就可以关掉了fr.close();// 关闭read流} catch (IOException e) {// 如果没有内容则报一个读写文件失败e.printStackTrace();}}}
}
2.字符流
package com.yzy.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** @className Test2.java* @author yangsir* @version V1.0* @date 2019年8月10日-下午5:28:25* @description**/
public class Test2 {public static void main(String[] args) throws IOException {// 字节流与字符流相同的部分我就不写了String s = "字符流:主要用来处理字符或字符串";File file = new File("f:/test/yzy.txt");FileOutputStream out = new FileOutputStream(file, false);// 输出流// FileOutputStream的write方法不能写入字符串但是我们可以通过String类提供的getBytes()方法来转换为字符数组out.write(s.getBytes());// 这里如果写成(字符串长度,开始值,结束值)这种形式会出现问题,因为传入的中文// out.flush();这里不刷新缓存是因为字符流中close可以刷新out.close();FileInputStream in = new FileInputStream(file);// 输入流byte[] bu = new byte[1024];// 每次要读取的字节数int len = 0;// 用来记录读取的长度while ((len = in.read(bu)) != -1) {System.out.println(new String(bu, 0, len));}in.close();// 复制与字符流一样FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream("f:/1.avi");fos = new FileOutputStream("f:/2.avi");byte[] bytes = new byte[1024]; // 长度3看性能 长度为1024看性能int len1;while ((len1 = fis.read(bytes)) != -1) {fos.write(bytes, 0, len1);// 写入(字符串长度,开始值,结束值),这里我们传的是视频所以这样写}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (fos != null) {fos.close();}if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}}
}
附:流的分类
三大类:1)按数据单位:字节流(一般用于视频、音频等1字节 = 8bit)字符流(一般用与文本文件1字符 = 16bit)2)按流向分类:输入流 输出流3)按角色分类:节点流 处理流(缓冲流)
各种流关系:
抽象父类 | 字节流(实现抽象类) | 缓冲流(处理流) |
---|---|---|
字节流 | ||
InputStrem(输入) | FileInputStream | BufferdInputStream |
OutputStrem(输出) | FileOutputStream | BufferdOutputStream |
字符流 | ||
Reder(输入) | FileReader | BuffreedReader |
Writer(输出) | FlieWriter | BuffreedWriter |
使用字节流和字符流对文件进行操作相关推荐
- 字节流和字符流复制文件内容实例
字节流和字符流复制文件内容实例 字节流: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...
- 字节流与字符流对文件复制的效率
字节流与字符流在用于文件复制时效率差距较大 分别对文件夹下的txt文件,jpg文件与mp4文件进行复制粘贴操作,并使用日期类进行运行时间记录,比较几种方法的效率. public class copy ...
- 【java作业】2、 编写两个函数,分别使用字节流、字符流实现文件的拷贝;点击按钮,将第三个文本框的字符串的值设置为第一个文本框的字符串+第二个文本框的字符串。
拷贝文件 : public static void copy1(String a,String b) throws IOException {FileInputStream input = new F ...
- java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...
[单选题]肥胖是体内中性脂肪过多积聚的表现,超过标准体重多少者为肥胖 A. 超过标准体重10%以上 B. 超过标准体重15%以上 C. 超过标准体重20%以上 D. 超过标准体重25%以上 E. 超过 ...
- python字节流和字符流_字符流与字节流
[一]写在前面 简单总结一下分别用(一直混淆的)字节流or字符流读写文件. [二]字节流 2.1 字节流介绍 程序中的输入输出都是以流的形式保存的(输入流or输出流),流中保存的实际上全都是字节(一个 ...
- 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- java字节流分为_Java文件流可分为字节流和字符流。
[单选题]TCP 和 UDP 协议的相似之处是 () [单选题]That was the first time I ______ French with a foreigner. [判断题] [判断题 ...
- Java文件流字节流和字符流的区别
字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位, 字符流以字符为单位 处理对象不同:字节流能处理所有类型的文件,包括图片,视频等,而字符流只能处理字符类型的数据 字节流:一次读入 ...
最新文章
- HDU 4951 Multiplication table(2014 Multi-University Training Contest 8)
- linux ssh 登录后 空闲断开 解决方法
- 关于在hdfs上对数据创建外部表的原因
- 电脑动态屏保_8款电脑软件,每一款都能让你的电脑更好用
- beego之context新老版本使用
- Sublime Text 2 VS Vim
- 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
- webview是什么东西_做性能优化前需要考虑什么?
- perl 切换 dnspod 域名记录
- 大多数微型计算机都是基于,基于PCI总线数据采集系统的设计
- 杂牌机刷入Xposed框架
- psn注册什么服务器,怎么注册PSN港服账号?PSN港服官网注册教程
- 迅雷离线下载节点分布
- python词云背景图_python数据分析可视化,制作你想要的背景图词云
- PS:换背景天空(简单抠图)
- 第一章 SQL中使用的符号
- 计算机图形学应用题,计算机图形学教学大纲
- linux 起网口up_【Linux】ubuntu或linux网卡配置/etc/network/interfaces
- linux 16.04 密码,诡异的 登录 Linux / Ubuntu 16.04 系统 时, 系统提示 登录密码错误 之谜 !...
- 充分利用 cpu_如何充分利用云