java(24):IO(1):OutPutStream
来源:互联网 发布:淘宝微淘在哪 编辑:程序博客网 时间:2024/06/05 15:37
日期:2017/11/11
IO流是java重要的数据存储手段。
一、 IO流分类:
A:数据流向
输入流 读数据
输出流 写数据
B:数据类型
字节流 字符流
默认情况下,IO流分类说的是按照数据类型分。
IO流的四个基类:
字节流
字节输入流 InputStream
字节输出流 OutputStream
字符流
字符输入流 Reader
字符输出流 Writer
练习代码1-写入数据和读数据:
package com.io;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;/* * IO流分类: * A:数据流向 * 输入流读数据 * 输出流写数据 * B:数据类型 * 字节流 * 字符流 * 默认情况下,IO流分类说的是按照数据类型分。 * * IO流的四个基类: * 字节流 * 字节输入流InputStream * 字节输出流OutputStream * 字符流 * 字符输入流Reader * 字符输出流Writer * * 需求:请把一句话:"helloworld"写入一个文本文件。 * 通过简单的分析后,我们找到了OutputStream。 * 由于OutputStream是一个抽象类,所以我们应该找其子类来学习。 * 学习前,我们先回想一个问题,就是硬盘上的文件,java提供了哪个类表示呢?File * 再结合现在的字节输出流OutputStream,两个拼接一下就有了一个新的名字:FileOutputStream * * FileOutputStream的构造方法: * FileOutputStream(File file) * FileOutputStream(String name) * * 字节输出流操作步骤: * A:创建字节输出流对象 * B:调用写数据功能写数据 * C:释放资源 * * 练习:请把字节的名字写到一个文本文件 */public class FileOutputStreamDemo {public static void main(String[] args) throws IOException {// 创建字节输出流对象FileOutputStream fos1 = new FileOutputStream("E:\\file\\aa.txt");fos1.write(2);//写入一个2字节流FileInputStream fos2 = new FileInputStream("E:\\file\\aa.txt");System.out.println("fos2.read(): "+fos2.read());//String ---> byteString a = "Helloworld";System.out.println("a.getBytes(): "+a.getBytes());fos1.write(a.getBytes());fos1.close();fos2.close();// 如果传递的不是String,而是File,如果做呢?// File file = new File("a.txt");// FileOutputStream fos = new FileOutputStream(file);FileOutputStream fos = new FileOutputStream("E:\\file\\a.txt"); OutputStream os = new FileOutputStream("a.txt");/* * 创建字节输入流对象做了哪些事情呢? A:调用系统功能创建了一个文件a.txt B:创建了一个对象fos * C:把fos对象指向了a.txt文件 */ // 写数据// public void write(int b):一次写一个字节的数据 fos.write(57); fos.write(55); fos.write(97);// public void write(byte[] b):一次写一个字节数组的数据 byte[] bys = {97,98,99,100,101}; fos.write(bys);// 曾经我们讲解过,可以通过String得到byte[] byte[] byss = "abcde".getBytes(); fos.write(byss); fos.write("helloworld".getBytes());// public void write(byte[] b,int off,int len):一次写一个字节数组的一部分 fos.write("helloworld".getBytes(), 0, 5); fos.write("helloworld".getBytes(), 0, "helloworld".length());//释放资源fos.close();//关闭此文件输出流并释放与此流有关的所有系统资源。/* * 两件事情: * A:关闭流对象(流对象不可以继续在写数据了) * B:释放与此流相关的资源(通知系统去释放与此流相关的资源) *///java.io.IOException: Stream Closed//fos.write("haha".getBytes());// while(true){}}}
练习代码2-换行符写入
package com.io;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/* * 两个小问题: * A:实现数据的换行? * 不同的系统,针对换行符号的识别是不一样的。 * Mac:\r * linux:\n * windows:\r\n * 系统自带的记事本软件,只能识别该系统能够识别的换行。 * 而Eclipse自带的记事本,以及Editplus却可以识别任意的换行符。 * * B:实现数据的追加写入? * public FileOutputStream(String name,boolean append) * 如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。 */public class FileOutputStreamDemo2 {public static void main(String[] args) throws IOException {// 创建字节输出流对象FileOutputStream fos = new FileOutputStream("E:\\file\\aaa.txt");for(int x=0;x<10;x++){fos.write(("Hello"+x).getBytes());System.out.println(x+"---"+("Hello"+x).getBytes());// fos.write(("hello" + x + "\n").getBytes()); fos.write(("hello" + x + "\r").getBytes());}fos.close();}}
练习代码3-更加完善的代码封装(异常)
package com.io;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/* * FileOutputStrema写数据的异常处理 */public class FileOutputStreamDemo3 {public static void main(String[] args) {makefile();}public static void makefile() {FileOutputStream fos = null;try{fos = new FileOutputStream("E:\\file\\aaaa.txt");fos.write(("Hello world \r".getBytes()));}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally{if(fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}}
常用方法:
1. String.getBytes():
byte[]
getBytes()
使用平台的默认字符集将此
String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 byte[]
getBytes(Charset charset)
使用给定的 charset 将此
String
编码到 byte 序列,并将结果存储到新的 byte 数组。 void
getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)
已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过
getBytes()
方法,该方法使用平台的默认字符集。 byte[]
getBytes(String charsetName)
使用指定的字符集将此
String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中。2. FileOutputStream.write():
void
write(byte[] b)
将
b.length
个字节从指定 byte 数组写入此文件输出流中。 void
write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量
off
开始的 len
个字节写入此文件输出流。 void
write(int b)
将指定字节写入此文件输出流。
3. FileOutputStream.close():
void
close()
关闭此文件输出流并释放与此流有关的所有系统资源。
阅读全文
0 0
- java(24):IO(1):OutPutStream
- Java IO(三):OutputStream
- Java基础--------(6)IO流InputStream和OutputStream
- Java IO ---学习笔记(InputStream 和 OutputStream)
- JAVA IO源码学习系列一(OutputStream)
- java.io.OutputStream翻译
- Java.IO.InputStream-OutputStream
- java IO之OutputStream
- java.io.OutputStream.flush()
- Java IO - InputStream&OutputStream
- Java IO : outputStream 、Writer
- Java IO 之 OutputStream源码
- JAVA 的IO操作(二) 字节输出流和输入流:OutputStream和InputStream
- javaIO(1):OutputStream和FileOutputStream源码分析及“装饰者模式”在IO中的应用
- 黑马程序员---IO流(字节流InputStream、OutputStream)
- IO流——(字节流)OutputStream和InputStream
- IO/OutputStream
- java io (三) InputStream OutputStream类
- linux sedsedsedsedsed
- linux 下使用intel mpi 进阶
- Magento根据条件进行商品筛选
- Python操作MySQL
- Verilog读取文本中的数据和输出数据到文本
- java(24):IO(1):OutPutStream
- Tree Traversals Again (25)
- java 获取时间与系统时间不一致问题
- CS231N 笔记3_卷积神经网络
- CMT-CQUPT 第一届 ACM 校赛环境搭建(PC^2)
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 判断输入框的输入格式是否正确,并禁止其他输入框输入内容
- 【51单片机实验】INT0中断计数
- 杭电ACM OJ 1010 Tempter of the Bone 图的深度搜索,奇偶剪枝,难得有一道像点样子的好题