Java IO字节输出流的总结
Java IO字节输出流,作用是对文件进行写入。
以字节流文件有蛮多方式的,下面介绍三种比较基础的方式。
一.FileOutputStream的使用
package com.xykj.fileOuterput;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputTest {
/*
* 文件写入FileOutputStream的使用
*/
public static void main(String[] args) {
// 写文件的地方
File file = new File("D:/jap");
// 文件字节流写入的类
FileOutputStream fos = null;
try {
// 这个都不用判断文件是否存在 !
// 系统会将你输入的文件名当成文件
// 使用字节流向目的地址写入文件
// 如果加第二个参数true,表示每次在原来的文件上追加东西
fos = new FileOutputStream(file, true);
fos.write("123456789 \r\n 123".getBytes());
fos.write("123456789 \r\n 123".getBytes());
//一般要把存入的数据刷新缓冲进去
fos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二.FileOutputStream和BufferedOutputStream的使用
package com.xykj.fileOuterput;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamTest {
/**
* 高效的字节型输出流?
* BufferedOutputStream的使用
* */
public static void main(String[] args) {
//定义一个输出流
FileOutputStream fos=null;
//定义一个缓冲输出流
BufferedOutputStream bos=null;
try {
//把输出地址给输出流
fos=new FileOutputStream("D:/jj.txt");
//把输出流对象传递给缓冲输出流
bos=new BufferedOutputStream(fos);
//往缓冲流里面写入文件
bos.write("liwenzhi".getBytes());
//刷新缓冲
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭所有的流
bos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
三.PrintWriter的使用
这是最方便简单的写文件方式,主要是对文本文件有用!
package com.xykj.fileOuterput;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class PrinterWriteTest {
// PrintWrite的使用
public static void main(String[] args) {
//打印流
PrintWriter pw=null;
try {
//往打印流添加目的路径
pw=new PrintWriter("D:/printer.text");
pw.write("123456 \n");
pw.write("123456 \n");
pw.write("123456 \n");
pw.write("123456 \n");
//刷新一下打印流
pw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
//关闭打印流
pw.close();
}
}
}
以上是文件写入的3中基本方式,前面两种是基本的写入方式,
可以对任何格式的文件再读取后进行写入,第三种主要是快速实现文字的写入。
前面的例子都是对字符串的写入,下面对其他文件进行写入。
这里还设计到读取文件,实际操作是边读边写。
四.写入一个图片文件
package com.xykj.lesson6;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Test6 {
/**
* 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
*
* 程序设计思路:
* 这题不能使用renameTo,
* 解题步骤:
* 1、在目的地址创建一个图片文件
* 2、读取源地址文件的字节流
* 3、把读取到的字节流写入到目的地址的文件里面
* 4、刷新输出流,并关闭就可以了
*
* @throws Exception
* */
public static void main(String[] args) {
// 本题示范把D盘下的mm.jpg复制到D盘java文件夹里面
// 源文件地址
File fileFrom = new File("D:/mm.jpg");
// 目的文件地址
File fileTo = new File("D:/java/mm.jpg");
// 1、创建目的文件地址
try {
if (!fileTo.createNewFile()) {
System.out.println("创建文件失败!");
}
// 2、读取源地址文件的字节流
FileInputStream fis = new FileInputStream(fileFrom);
FileOutputStream fos = new FileOutputStream(fileTo);
int len = 0;
byte[] buf = new byte[1024];
while ((len = fis.read(buf)) != -1) {
// 3、把读取到的字节流写入到目的地址的文件里面
fos.write(buf, 0, len);
}
// 刷新下输出流
fos.flush();
// 关闭输入流和输出流
fis.close();
fos.close();
System.out.println("文件复制成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
五.对IO字节输出流的总结
字节输出流用途是写文件,并把文件保存在某个位置。
输出流没有输入流那么麻烦,这里不用判断文件是否存在,直接进行写入就可以了。
而且读取文件要一直判断是否已经读完,写文件的话想写就写。
但是写文件的文件的目录还是要确保存在的,否则不会写入。