`
李媛媛liyuanyuan
  • 浏览: 14749 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

IO流

阅读更多
IO流
java中的输入输出抽象为叫做流的概念

流的继承体系:
在java中,为了对不同来源和性质的流对象调用统一的方法,java中的流首先定义了顶层出入、输出的借口或抽象类,这样不同性质具体的流对象就会有一个统一的调用方法以便使用。

流的分类:
基础字节流(原始流)InputStream输入流和OutputStream输出流。基础流是直接连结到输入源中的流。
InputStream输入流和OutputStream输出流是抽象类,不能直接实例化对象,要通过其子类如:
        //创建从源文件来的输入流
InputStream ins=new java.io.FileInputStream(srcName);
//创建输出流
OutputStream out=new FileOutputStream(bakName);


过滤流(节点流)用来包装基础流以提供更好的特性,如BufferedInputStream和BufferedOutputStream具有缓冲功能的类;
//创建输入缓冲流缓冲流以一个FileInputStream对象为参数
BufferedInputStream  bis=new BufferedInputStream(ins);
//创建缓冲输出流对象
BufferedOutputStream bos=new BufferedOutputStream(out);

缓冲流操作完后要关闭流,否则会出现问题。
缓冲流的优点是提高了文件读取写入的速度


基与具体数据类型的流:从流中读取指定数据类型的数据。接口DateInput和DateOutput,子类DateInputStream和DateOutputStream
Date流创建对象时也要以FileOutputStream类对象为参数

基与对象读写:对象的输入输出流.接口ObjectInput和ObjectOutput,子类ObjectInputStream和ObjectOutputStream
Object流创建对象时也要以FileOutputStream类对象为参数

IO流的主要作用:
IO流主要针对文件内容操作。例如:对文件内容的修改,添加,删除,读取文件内容,写入文件内容

常用方法:
InputStream:
int available(); 流中可读取的有效字节的长度(以byte计)
void close();关闭流
int read(); 从输入流中读取数据的下一个字节
read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
OutputStream
void close();关闭流
void flush();刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b) 将数组b写入到目标文件中
void write(byte[] b, int off, int len) 将指定数组中从偏移量 off 开始的 len 个字节写入此输出流。即写入数组的一部分
void write(int b) 将指定的字节写入此输出流


代码
public class FileIODemo {
/**
* 主函数
*/
public static void main(String[] args) {
FileIODemo fio = new FileIODemo();
// 定义一个读取文件的路径
String path = "src/cn/netjava/lesson15/FileIODemo.java";
// 定义一个写入文件的路径
String newPath = "src/cn/netjava/lesson15/FileIODemo.java.bak";
// 调用读取文件的方法
if(fio.readFile(path)){
System.out.println("读取文件成功!");
}else {
System.out.println("读取文件失败!");
}



}

/**
* 读取文件的方法
*
* @param path表示要读取文件的路径
* @return 返回文件是否读取成功
*/
public boolean readFile(String path) {
// 定义一个布尔变量,用来表示文件是否读取成功
boolean state = false;
try {
// 实例化一个输入流的对象
InputStream is = new FileInputStream(path);
// 获取文件的长度
int length = is.available();
// 根据文件字节的长度,来定义一个byte数组
byte array[] = new byte[length];
// 调用一次读满array数组的方法
// is.read(array);
// 循环读取文件
for (int i = 0; i < length; i++) {
// 读取文件
array[i] = (byte) is.read();
}
// 将byte转换为字符串
String str = new String(array);
// 输出
System.out.println("文件内容是:\n" + str);
is.close();
state = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return state;
}



}

public class BufferedIODemo {

/**
* 主函数
*/
public static void main(String[] args) {
BufferedIODemo bio = new BufferedIODemo();
// 定义一个读取文件的路径
String path = "src/cn/netjava/lesson15/BufferedIODemo.java";
// 定义一个写入文件的路径
String newPath = "src/cn/netjava/lesson15/BufferedIODemo.java.bak";
// 调用拷贝文件的方法
bio.copyFile(path, newPath);
}

/**
* 拷贝文件的方法
*
* @param path表示要读取文件的路径
* @param newPath表示要写入文件的路径
* @return 返回文件是否拷贝成功
*/
public void copyFile(String path, String newPath) {
try {
// 实例化一个输入流的对象
InputStream is = new FileInputStream(path);
// 实例化一个缓冲输入流对象
BufferedInputStream bis = new BufferedInputStream(is);

// 实例化一个输出流的对象
OutputStream os = new FileOutputStream(newPath);
// 实例化一个缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(os);

int i = 0;
// 循环读取文件内容,只要读取的值不是-1就表示还未到文件的末尾
while ((i = bis.read()) != -1) {
// 将i写入到文件中
bos.write(i);
}
bos.flush();//强制将缓冲中的内容写入到文件中
bos.close();
os.close();
bis.close();
is.close();

System.out.println("拷贝成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics