Java输出流FileOutputStream使用详解
Java输出流FileOutputStream使用详解
http://baijiahao.baidu.com/s?id=1600984799323133994&wfr=spider&for=pc
前面介绍了如何应用输入流FileInputStream从本地文件读取数据。本节介绍应用输出流FileOutputStream把数据写入本地文件。
用FileOutputStream写入文件流程如下:
使用FileOutputStream写入文件的过程同使用FileInputStream过程相同,都是先用File类打开本地文件,实例化输入输出流,然后调用流的读写方法读取或写入数据,最后关闭流。
FileOutputStream的构造方法
FileOutputStream提供了4个常用构造方法,用于实例化FileOutputStream对象,不同的场景使用不同的构造方法。
场景1:使用File对象打开本地文件,从文件读取数据。
场景2:不使用File对象,直接传入文件路径。
FileOutputStream的构造方法允许直接传入文件路径,而无须使用File对象。查看该构造方法的源代码,其内部使用了File对象打开文件。
场景3:打开文件,在文件的尾部追加写入数据。
场景要求在文件的尾部写入数据,由于前面两个构造函数都是文件开始写入数据(覆盖原文件),因此不能使用前面2个场景的构造函数。FileOutputStream提供了另外两个构构造方法,分别是:
FileOutputStream(File file, boolean append);
FileOutputStream(String name, boolean append);
同前面的构造方法相比,这两个构造方法各多了一个boolean参数append。append参数为true时,数据从文件尾部写入;append参数为false时,数据覆盖原文件。
FileOutputStream的写入方法
FileOutputStream类提供了多种文件写入方法,可以单独写一个字节到文件,也可以写一个byte数组到文件,也可以取byte数组的部分数据写入到文件。
例1:使用write(int b)方法写入文件。
例子程序首先调用File类的createNewFile()创建new.txt文件,然后将str内容写入到新创建的new.txt文件中。
例2:使用write(byte[] b)方法写入文件。
write(byte[] b)方法用于将b.length个字节从指定的byte数组写入到输出流。
String类的getBytes()方法可以将字符串转换为byte数组,使用FileOutputStream 类的write(byte[] b)方法,将转换的byte数组写入文件。
例3:使用write(byte[] b,int off,int len)方法写入文件。
该方法将len个字节的数据,并从数组b的off位置开始写入到输出流。
程序把指定的str内容写入到文件,fos.write(str.getBytes(),5,10)语句的第一个参数为byte数组,第二个参数5是从byte数组的下标5开始,第三个参数是写入的字节数。程序执行后,写入的内容为“is new file”。
使用该方法一定要注意数组越界的问题。例如,byte数组长度为20,从第下标12开始,写入15个字节到文件,就会造成数组越界,程序报错。
例4:使用FileOutputStream复制文件
复制文件是将源文件数据写入到新文件,在实际编程中,实现文件的复制有很多种方法,本案例使用FileInputStream和FileOutputStream实现文件的复制。
代码中的copyFile完成文件的复制,在复制之前,先判断一下源文件是否存在,然后申请一个byte数组,用于存储读取的源文件数据,该数组大小与源文件总字节数相同,读取成功后,再将数组内容写入到目标文件。程序输出结果如下图所示:
■ 知识点拨
使用FileOutputStream流可以写入字节数据到目标文件,FileOutputStream提供了单字节写入和byte数组写入两种方式。建议使用byte数组写入,将待写入的数据存储到一个byte数组中,然后再写入文件。当写入的文件已经存在时,需要指明写入方式是覆盖还是追加。
Java输出流FileOutputStream使用详解的更多相关文章
- java网络编程(TCP详解)
网络编程详解-TCP 一,TCP协议的特点 面向连接的协议(有发送端就一定要有接收端) 通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
- 国际化,java.util.ResourceBundle使用详解
java.util.ResourceBundle使用详解 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以: 轻松地本地化或翻译成不同的 ...
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- java.util.ResourceBundle使用详解
java.util.ResourceBundle使用详解 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以: 轻松地本地化或翻译成不同的 ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- java之StringBuilder类详解
StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...
- java.util.ResourceBundle使用详解(转)
java.util.ResourceBundle使用详解 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以: 轻松地本地化或翻译成不同的 ...
随机推荐
- AGC016D - XOR Replace 置换/轮换
目录 题目链接 题解 代码 题目链接 AGC016D - XOR Replace 题解 可以发现一次操作相当于一次置换 对于每个a上的位置映射到b对应 可以找到置换群中的 所有轮换 一个k个元素的轮换 ...
- python3 配置logging日志类
配置类config_file: from configparser import ConfigParser class config_file: def __init__(self,conf_file ...
- Java-IO流之输入输出流基础示例
一.理论: 1.什么是输入输出? 输入输出的对象是数据,数据的存储区域是磁盘或者光盘等设备,我们知道还有一个存储数据的空间----内存,其中磁盘的速度比较慢,内存的速度比较快,把数据读入内存的动作称作 ...
- Node.js_express_服务器渲染页面 ejs
服务器渲染页面 ejs 高效的 js 模版引擎 将数据提前渲染到页面上, 再将渲染好的页面返回响应给浏览器 提高首页加载速度 SEO 提前处理,提高加载速度 下载 ejs 包 npm install ...
- [LeetCode] Chalkboard XOR Game 黑板亦或游戏
We are given non-negative integers nums[i] which are written on a chalkboard. Alice and Bob take tu ...
- JavaScript学习day2 (基本语法上)
知识点 JavaScript 的变量 数据类型 运算符 JavaScript 的动态类型 变量:(变量的命名规则和其他语言类似) 由数字,字母,下划线组成,区分大小写 以字母开头 变量名不能有空格 不 ...
- Android自定义控件之日历控件
标签: android 控件 日历 应用 需求 2015年09月26日 22:21:54 25062人阅读 评论(109) 收藏 举报 分类: Android自定义控件系列(7) 版权声明:转载注 ...
- Linux 的 date 日期的使用
解决的问题有: 1:查看当前日期和时间 2:查看前几天的日期,或者后几天的日期. 3:查看上周几的日期,或者下周几的日期. 4:查看前后几小时,分钟.时间 编写一个简单的shell: 输出下个星期二的 ...
- Multi-Projector Based Display Code ---- FAQ
Frequently Asked Question How do I know that my camera has a proper lens? Answer: If you can see exa ...
- 精心调制的Bash主题分享
第一个是米色背景, 一样遵守蓝色为目录的习惯, 字体为浅灰色,代码和终端看起来相对比较清晰 第二个则是 深海蓝的背景风格,字体都选择饱和度较高的颜色,如下图 终端 配置方法,这里以 mintty 也就 ...