Java中的IO流之输出流

大家好,乐字节小乐又来了。上一篇给大家带来的是: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打印流经常用于什么情况?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容