IO操作类--字节流与字符流(核心)

字节流与字符流(核心)
使用File类只能够实现文件本身的操作,但是与文件内容的操作无关,要是想进行文件内容的操作,用以下两组流完成;
字节流:InputStream,OutputStream(可以处理一切文件,包括二进制,音频,doc等等)
字符流:Reader,Writer(只能处理纯文本,全部可见字符,txt,html)
但是不管使用何种流,基本的操作流程是一样的,以文件操作为例:
1.确定操作文件的路径:
2.提供字节流或字符流的子类为字节流和字符流类对象实例化:
3.进行输入,输出的操作
4.关闭流,流属于资源操作,资源操作完成一定要关闭:


字节输出流OutputStream

java.io.OutputStream是可以进行字节数据(byte)的输出,这个类的定义结构如下
public abstract class OutputStream
extends Object

implements Closeable,Flushable

首先可以发现在OutputStream类之中实现了两个接口:

Closeable:JDK1.5提供  Flushable:JDK1.5提供
public interface Closeable extends AutoCloseable public interface Flushable
public void close() throws IOException public flush() throws IOException
从实际的开发来讲,对于Closeable和Flushable两个接口是属于后来再次抽象的产物,本身的创建意义是希望将所有存在有关闭资源操作的类
进行统一的关闭管理。而在OutputStream类里面也定义有close()和flush()两个方法。
在OutputStream类存在有三个write()方法
输出单个字节:public abstract void write(int b) throws IOException
输出全部的字节:public void write(byte[] b)throws IOException
输出部分字节:public void write(byte[] b,int off,int len) throws IOException

但是OutputStream只是一个抽象类,所以如果要想取得本类的实例化对象,那么就必须利用子类进行实例化,本次操作将要进行的是文件操作,
所以可以使用FileOutputStream子类,这个类定义了两个常用的构造方法:
构造方法:public FileOutputStream(File file) throws FileNotFoundException:覆盖
构造方法:public FileOutputStream(File file,boolean append) throws FileNotFoundException:追加

范例:进行文件的输出操作:
package io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class OutputStreama {


public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("D:"+File.separator+"test.txt");//通过File类定义要输出的路径
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
//通过OutputStream的子类对象为父类对象实例化
OutputStream output=new FileOutputStream(file);
String msg="Hello Wordl";//要输出的数据
byte data[]=msg.getBytes();//将字符串变为字节数组
output.write(data);///将字节数组数据输出
output.close();//资源的对象关闭
}


}
但是此时不管程序是执行几次,对于文件中的内容都是只是一个覆盖,如果不希望出现覆盖,则可以使用追加的方式创建FileOutputStream
类对象
//通过OutputStream的子类对象为父类对象实例化,追加内容
OutputStream output=new FileOutputStream(file,true);
String msg="Hello Wordl.\r\n";//要输出的数据
以上是将内容全部进行了输出,那么也可以设置输出的范围:
output.write(data,0,5);//将字节数组数据输出;


一:读取文件
1,建立联系 File对象
2.选择流 文件输入流 InputStream FileInputStream
3.操作:byte[] cat=new byte[1024];+read+读取大小
输出
4关闭资源
package io;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


/**
 * 1,建立联系 File对象
2.选择流 文件输入流 InputStream FileInputStream
3.操作:byte[] cat=new byte[1024];+read+读取大小
输出
4关闭资源
 * @author Administrator
 *
 */
public class InputStreama {


public static void main(String[] args) {
// TODO Auto-generated method stub
//1.建立联系 File对象
File file=new File("D:"+File.separator+"test.txt");
//2.选择流
InputStream input=null;//提升作用域
try {
input=new FileInputStream(file);
//3.操作不断读取 缓冲数组
byte [] cat=new byte[1024];
int len=0;//接收 实际读取大小
//循环读取
while(-1!=(len=input.read(cat))) {
//输出 字节数组转成字符串
String info=new String(cat,1,len);
System.out.println(info);
}
} 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 {
//4.关闭资源
if(null!=input) {
input.close();
}
}catch(Exception e2) {
System.out.println("关闭资源");
}
}
}


}


二,写出文件
1,建立联系 File对象
2.选择流 文件输入流 OutputStream FileOutputStream
3.操作:write()+flush()
4关闭资源
package io;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;


/**
 * 1,建立联系 File对象
2.选择流 文件输入流 OutputStream FileOutputStream
3.操作:write()+flush()
4关闭资源
 * @author Administrator
 *
 */
public class OutputStreamb {


public static void main(String[] args) {
// TODO Auto-generated method stub
//1.建立联系 File对象
File file=new File("D:"+File.separator+"test.txt");
//2.选择流OutputStream
OutputStream output=null;
//追加
try {
output=new FileOutputStream(file,true);
//3.操作
String str="\r\n hello ff ccc \r\n";
//字符串转字节数组
byte [] data=str.getBytes();
output.write(data,0,data.length);

output.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(null!=output) {
output.close();
 }
}catch(Exception e2) {
System.out.println("关闭资源失败");
}
}
}


}

猜你喜欢

转载自blog.csdn.net/a584898/article/details/81021753
今日推荐