大家好,乐字节小乐又来了。上一篇给大家带来的是:Java中的IO流之输入流|乐字节,本文将继续讲述IO流之输出流。
 

一、输出流

1、抽象类:OutputStream 和 Writer

OutputStream和Writer也非常相似。
在OutputStream 里包含如下方法:
 
在 Writer 中, 因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来代替字符数组,即以String对象来作为参数。 包含如下方法:
 

2、文件节点类: FileOutputStream 和 FileWriter

FileOutputStream 和 FileWriter,它们都是节点流,直接和指定文件关联。
public class WriteFile {
public static void main(String[] args) {
//1、建立联系 File对象 源头 目的地
File dest=new File("c:/IO/print.txt");
//2、选择流 文件输出流 OutputStream FileOutputStream
OutputStream out=null;
//以追加形式写出文件 必须为true 否则会覆盖
try {
out=new FileOutputStream(dest,true);
//3、操作
String str="shsxt is very good \r\n good good good";
//字符串转成字节数组
byte[] data=str.getBytes();
out.write(data,0,data.length);
out.flush();//强制刷新出去 } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件未找到");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件写出失败");
}finally{
try {
if(out!=null){
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("关闭输出流失败");
}
}
}
}
//1、创建源
File dest=new File("f:/IO/char.txt");
//2、选择流
Writer wr=new FileWriter(dest,true);
//3、写出
String str="锄禾日当午\r\n码农真辛苦\r\n一本小破书\r\n一读一上午";
wr.write(str);
//追加内容
wr.append("我就是追加进去的");
wr.flush();//强制刷出
//4、关闭资源
wr.close();

  

 结合输入输出流,可以实现文件拷贝
public static void copyFile(String srcPath, String destPath) throws FileNotFoundException,IOException{
// 1、建立联系 源(存在且为文件) 目的地(文件可以不存在)
File src = new File(srcPath);
File dest = new File(destPath);
if(!src.isFile()){//不是文件或者为null时抛出异常
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
// 2、选择流
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
// 3、操作
byte[] flush = new byte[1024];
int len = 0;
// 读取
while (-1 != (len = in.read(flush))) {
// 写出
out.write(flush, 0, len);
}
out.flush();// 强制刷出
// 关闭流 先打开的后关闭
out.close();
in.close();
}

  

3、缓冲处理流:BufferedOutputStream 和 BufferedWriter

缓冲流提升性能,BufferedWriter存在新增方法newLine(),不能发生多态
public static void copyFile(String srcPath, String destPath) throws FileNotFoundException,IOException{
// 1、建立联系 源(存在且为文件) 目的地(文件可以不存在)
File src = new File(srcPath);
File dest = new File(destPath);
if(!src.isFile()){//不是文件或者为null时抛出异常
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
// 2、选择流
InputStream in = new BufferedInputStream(new FileInputStream(src));
OutputStream out =new BufferedOutputStream(new FileOutputStream(dest));
// 3、操作
byte[] flush = new byte[1024];
int len = 0;
// 读取
while (-1 != (len = in.read(flush))) {
// 写出
out.write(flush, 0, len);
}
out.flush();// 强制刷出
// 关闭流 先打开的后关闭
out.close();
in.close();
}
} //1、创建源 仅限于 字符的纯文本
File src=new File("f:/char.txt");
File dest=new File("f:/testIO/char.txt");
//2、选择流
BufferedReader reader=new BufferedReader(new FileReader(src));
BufferedWriter wr=new BufferedWriter(new FileWriter(dest,true));pend(msg2);
//3、新增方法操作
String line=null;
while(null!=(line=reader.readLine())){
wr.write(line);
//wr.append("\r\n");
//换行符号
wr.newLine();
}
wr.flush();//强制刷出
// 4、关闭流 先打开的后关闭
out.close();
in.close();

  

4、转换处理流:OutputStreamWriter

可以处理文件的字符集,即将文件按指定字符集进行编码存储 。
//写出文件	编码
BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(
new BufferedOutputStream(
new FileOutputStream(
new File("f:/testIO/char.txt")
)
),"utf-8"
)
);
String info=null;
while(null!=(info=br.readLine())){
bw.write(info);
bw.newLine();
}
bw.flush();
bw.close();

  

5、字节数组节点类: ByteArrayOutputStream

/**
* 字节数组输出流:操作与文件输出流有些不同,有新增方法,所以不可以使用多态
* @throws IOException
*/
public static byte[] write() throws IOException{
//目的地 字节数组
byte[]dest;
//选择流 不同点:不需要将目的地放入new ByteArrayOutputStream()
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//操作 写出, 可以当作将本地的内容通过字节数组写入服务器
String msg="字节数组输入流:操作与文件输入流操作一致";
byte[]info=msg.getBytes();
//将内容写入bos
bos.write(info,0,info.length);
//不同点:获取数据 toByteArray():是将字节数组输出流转为字节数组
dest=bos.toByteArray();
//释放资源
bos.close();//由于bos在jvm中,所以关闭与否不影响
return dest;
}

  

再来看几个作业题,大家不妨思考思考。
1、Reader和Writer的基本特点是?
2、FileReader和FileWriter的作用是?
3、BufferedReader和BufferedWriter的作用是?
4、word文档能使用字符流操作吗?为什么?
5、使用BufferedReader和BufferedWriter实现文本文件的拷贝
6、什么情况下可以使用字符流拷贝文件夹?什么情况下不能?拷贝文件夹应该使用字符流还是字节流?
7、拷贝文件 使用哪些流?
8、InputStreamReader和OutputStreamWriter的作用。
9、ByteArrayInputStream与 ByteArrayOutputStream的数据源是什么?
10、为什么ByteArrayOutputStream 不推荐使用匿名?
11、将”坚信没有学不会的知识,只有不想学的知识”写出到字节数组中。
12、从上述的 字节数组中,读取字符串。
13、DataInputStream和DataOutputStream的特点是?
14、将3.14 写出到字节数组中,再进行读取
15、序列化和反序列化指的是什么?
16、想序列化某个类的对象,该类必须实现Serializable接口吗?
17、说说Serializable接口的特点。
18、transient的作用是?
19、使用ObjectInputstream和ObjectOutputStream实现将某个对象存储到硬盘上,然后再读到程序中。
20、PrintStream打印流经常用于什么情况?
 

Java中的IO流之输出流|乐字节的更多相关文章

  1. Java中的IO流之输入流|乐字节

    亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入 ...

  2. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  3. Java中的IO流大体介绍

    由于Java中的IO流是在是知识点繁多,所以我大约花了1周的时间将其整理起来.但是整理起来后并不是将完事了,我还是要分字节流和字符流来讲述.然后字节流和字符流中还有是否带有缓冲流. 讲述完IO流后我将 ...

  4. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  5. Java中的IO流(五)

    上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream ...

  6. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  7. JAVA 中的IO流

    Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的 ...

  8. Java中的IO流(四)

    上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Pr ...

  9. Java中的IO流(二)

    上一篇<Java中的IO流(一)>把学习IO流的字符流作了一下记录,本篇把字节流记录一下. 一,Java中的字节流 Java中的字节流的操作方式与字符流的操作方式大致相同,连方法名都是类似 ...

随机推荐

  1. 项目管理、bug管理工具 ---禅道使用流程

    使用前描述: 禅道是付费的一款云平台工具,它可以实现项目管理.需求管理.bug提交.bug跟踪.文档管理.bug统计等功能 使用账号.密码:公司提供,登录后基本识别操作流程如下: 1.登录首页-我的地 ...

  2. UOJ#316. 【NOI2017】泳池 动态规划,Berlekamp-Massey,Cayley-Hamilton定理

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ316.html 题解 首先,我们将答案转化成最大矩形大小 \(\leq k\) 的概率 减去 \(\leq k-1\) 的 ...

  3. MySQL 获得 当前日期时间 函数

    mysql> select now(); 输出 -- :: 例子 mysql> ), now(); +---------------------+----------+---------- ...

  4. Spring MVC国际化配置

    Spring MVC国际化配置 前言 项目开发中要考虑支持国际化,框架选用的是Spring MVC框架,那么问题来了Spring MVC如何配置并实现国际化. 实现过程(Maven项目) 对于Spri ...

  5. 【随记】安装SQL Server 2008 R2 提示创建usersettings/microsoft.sqlserver.configuration.landingpage.properties.se

    在安装SQL Server 2008 R2 提示创建usersettings/microsoft.sqlserver.configuration.landingpage.properties.se.. ...

  6. python操作toml文件

    # -*- coding: utf-8 -*- # @Time : 2019-11-18 09:31 # @Author : cxa # @File : toml_demo.py # @Softwar ...

  7. centos安装jdk1.8的三种方法

    一.手动解压安装包: 1.在user目录下新建java文件夹:   # cd /usr/   # mkdir java   # cd java 2.下载jdk1.8,进入http://www.orac ...

  8. Kettle建立数据库链接报错-'MS SQL Server' driver (jar file) is installed. kettle的bug,对于12.2而言

    1.链接sql server数据库报错 错误连接数据库 [My_vm_win_sql] : org.pentaho.di.core.exception.KettleDatabaseException: ...

  9. GIS空间分析案例教程——带背景和周围要素的逐要素导出地理

    GIS空间分析案例教程--带背景和周围要素的逐要素导出地理 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 目的:导出多边形要素类的每个要素 实 ...

  10. java项目代码上线

    java项目代码上线   1:java项目代码上线架构图 ip地址及主机名规划 10.0.0.11 deploy 10.0.0.12 tomcat-web01 10.0.0.13 git.oldboy ...