1.OutputStream类
OutputStream它不仅可以写入字节,字符,还可以写入图片等媒体文件
由于OutputStream是抽象类不能创建对象,所以用它子类来完成写入字节的操作
2 .FileOutputStream类
-
用OutputStream的子类java.io.FileOutputStream向文件中写入字节
-
FileOutputStream类的构造方法有5种重载方式,以下是常用的4种
案例:
package outputstream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
//创建 FileOutputStream对象
fos=new FileOutputStream("data.txt");
//写出指定的字节到输出流中
fos.write(97);
//写出指定的字节到输出流中
fos.write("abc".getBytes());
//字节数组一部分写入到字节流中
fos.write("1234567".getBytes(),1,5);
//flush
fos.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fos!=null){
//关闭FileOutputStream
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.InputStream类
InputStream它不仅可以读取字节,字符,还可以读取图片等媒体文件
由于IntputStream是抽象类不能创建对象,所以用它子类来完成写入字节的操作
4.FileInputStream类
-
用InputStream的子类java.io.FileInputStream从文件中读取字节
-
FileOutputStream类的构造方法有3种重载方式,以下是常用的2种
案例:
package inputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
// readByte();
read();
}
public static void readByte(){
FileInputStream fis=null;
try {
//创建FileInputSteam对象
fis=new FileInputStream("data.txt");
//定义字节数组
byte[] buffer=new byte[3];
int len;
//把流中数据读取到定义的字节数组中
//循环读取,判断读取的字节数量是否为-1,为-1,停止循环,否则继续循环
while((len=fis.read(buffer))!=-1){
String str=new String(buffer,0,len);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void read(){
FileInputStream fis=null;
try {
fis=new FileInputStream("data.txt");
int num=fis.read();
while(num!=-1){
System.out.print((char)num);
num=fis.read();
}
} catch (IOException e) {
e.printStackTrace();
}if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
5.FileInputStream与FileOutputStream实现文件复制
package outputstream_inputstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStreamAndFileOutputStreamCopyTest {
public static void main(String[] args) {
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("data.txt");
fos=new FileOutputStream("data1.txt");
byte[] buffer=new byte[3];
int len;
while ((len=fis.read(buffer))!=-1){
fos.write(buffer,0,len);
}
fos.close();
} catch (IOException e) {
e.printStackTrace();
}if (fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
6.BufferedOutputStream类
BufferedOutputStream类里有一个方法要注意
package outputstream;
import sun.nio.ch.IOUtil;
import writer_and_reader.IOUtills;
import java.io.*;
public class BufferedOutputStreamTest {
public static void main(String[] args) {
FileOutputStream fos=null;
BufferedOutputStream bos=null;
try {
//创建FileOutputStream对象
fos=new FileOutputStream("data2.txt");
//创建BufferedOutputStream对象
bos=new BufferedOutputStream(fos);
//BufferedOutputStream对象把数据写入字节输出流中
bos.write(97);
bos.write("abc".getBytes());
bos.write("shsy".getBytes(),1,2);
bos.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtills.close(bos);
IOUtills.close(fos);
}
}
}
7.BufferedInputStream类
BufferedInputStream类里有一个方法要注意
案例 :
package inputStream;
import writer_and_reader.IOUtills;
import java.io.*;
public class BufferedInputStreamTest {
public static void main(String[] args) {
FileInputStream fis=null;
BufferedInputStream bis=null;
try {
fis=new FileInputStream("data2.txt");
bis=new BufferedInputStream(fis);
byte[] buffer=new byte[3];
int len;
while((len=bis.read(buffer))!=-1){
String s=new String(buffer,0,len);
System.out.println(s);//三个三个读
}
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtills.close(bis);
IOUtills.close(fis);
}
}
}
8.BufferedInputStream与BufferedOutputStream实现文件复制
案例:
package outputstream_inputstream;
import writer_and_reader.IOUtills;
import java.io.*;
import java.util.Date;
public class BufferedInputStreamAndBufferedOutputStream {
public static void main(String[] args) {
Date start=new Date();
FileInputStream fis=null;
FileOutputStream fos=null;
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
fis=new FileInputStream("D:\\ tmp\\1.txt");
bis=new BufferedInputStream(fis);
fos=new FileOutputStream("D:\\ tmp\\11.txt");
bos=new BufferedOutputStream(fos);
byte[] buffer=new byte[1024];
int len;
while((len=bis.read(buffer))!=-1){
bos.write(buffer,0,len);
}
bos.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtills.close(bos);
IOUtills.close(fos);
IOUtills.close(bis);
IOUtills.close(fis);
}
Date end=new Date();
System.out.println(end.getTime()-start.getTime());
}
}
package writer_and_reader;
import java.io.*;
public class IOUtills {
public static void close(Writer w){
if(w!=null){
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(Reader r){
if (r!=null){
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(OutputStream os){
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(InputStream is){
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}