您的位置:首页 > 其它

IO流 字符流 字节流 缓冲流 文件的复制

2017-10-25 16:05 579 查看

IO流

IO概述

IO流就是一个管道,是用来在设备之间传输数据

input:相对于内存/程序 往进走输入流

output:相对于内存/程序 往硬盘写入

分类

根据数据进出方式

1、输出流:

FileWriter 字符输出流

BufferedWriter 字符缓冲输出流

2、输入流:

- FileReader

- BufferedReader

根据读写数据的方式

字符流:文本文件 字符存储。读写过程可以按照一个或多个字符进行读写

字节流:图片、视频、音频 可以读取任何格式的文件。读写过程中可以一个或多个字节的读写

OutputStream

FileOutSteram

BufferedOutputSteram

InputStream

FileInputStream

BufferedInputStream

在计算机底层存储任何文件是,都是按照字节的形式进行存储的。

利用字符流实现文件拷贝

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;

/**
* 利用字符流实现文件的拷贝
* @author YandeHu
*
*/
public class DemoFileCopy {

public static void main(String[] args) throws Exception {
//创建输入输出对象
FileReader fr=new FileReader("E:\\01\\01\\a.txt");
FileWriter fw=new FileWriter("E:\\01\\01\\b.txt");
BufferedReader br=new BufferedReader(fr);
BufferedWriter bw= new BufferedWriter(fw);

//定义字符串类型的变量
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}

//关闭流
bw.close();
br.close();
System.out.println("拷贝完成");
}
}


字节流

InputStream

构造方法

read方法

OutputStram

构造方法

writer方法

文件字节输入\输出流的使用

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DemoCoqyStream {

public static void main(String[] args) throws Exception {
//创建字节输入、输出流
copyFile01();
copyFile02();
}

/**
* 封装方法
* @throws Exception
*/
public static void copyFile01() throws Exception{
FileInputStream fi=new FileInputStream("E:\\01\\01\\1.jpg");
FileOutputStream fo=new FileOutputStream("E:\\01\\01\\2.jpg");

//读文件
int len=-1;
while((len=fi.read())!=-1){
fo.write(len);
}
System.out.println("复制成功");
fi.close();
fo.close();
}

/**
* 封装方法 一次复制一个数组的
* @throws Exception
*/
public static void copyFile02() throws Exception{
FileInputStream fi=new FileInputStream("E:\\01\\01\\1.jpg");
FileOutputStream fo=new FileOutputStream("E:\\01\\01\\3.jpg");

//读取文件
byte [] b=new byte[1024];
int len=-1; //0 代表没有数据
while((len=fi.read(b))!=-1){
fo.write(b,0,len);
}
fi.close();
fo.close();
System.out.println(len+"复制成功");

}
}


缓冲字节流输入\输出的使用

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
* 利用缓冲字节流
* @author YandeHu
*
*/
public class DemoStreamBuffer {

public static void main(String[] args) throws Exception {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("b.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("c.txt"));
//硬盘写
bos.write("hello".getBytes());
System.out.println("写入成功");

//读
byte []b=new byte[10];
int len=-1;
while((len=bis.read(b))!=-1){
System.out.print(new String(b,0,len));
}
//bos.close();
bis.close();
}
}


利用字符输出流实现对文件内容的复制

过程是:先将要拷贝的文件读入到内存中,在将内容写入到另一个文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;

/**
* 利用字符流实现文件的拷贝
* @author YandeHu
*
*/
public class DemoFileCopy {

public static void main(String[] args) throws Exception {
//创建输入输出对象
FileReader fr=new FileReader("E:\\01\\01\\a.txt");
FileWriter fw=new FileWriter("E:\\01\\01\\b.txt");
BufferedReader br=new BufferedReader(fr);
BufferedWriter bw= new BufferedWriter(fw);

//定义字符串类型的变量
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}

//关闭流
bw.close();
br.close();
System.out.println("拷贝完成");
}
}


利用缓冲字节输入\输出流实现单击文件目录内容的拷贝

步骤:方法的功能是 将指定文件的内容拷贝到目标目录,main函数的里的功能是遍历指定文件目录,如果文件的目录存在则复制文件到目标文件。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
* 复制单级文件夹
* @author YandeHu
*1、创建缓冲输入输出对象
*2、读数据(一个字节数组,存储每次读到的一个数组的数据 ,定义一个整型 记录读取字节个数)
*3、循环
*
*/
public class DemoText {

public static void main(String[] args) throws Exception {
File file=new File("E:\\01\\01\\3.jpg");
String destPath="E:\\01\\02";
File dir=new File("E:\\01");
File[] listFiles = dir.listFiles();
if(listFiles==null){
return;
}else{
//遍历文件列表
for (File f : listFiles) {
if(f.exists()){
copy(file, destPath);
}
}
System.out.println("拷贝成功");
}

}
public static void copy(File file,String destPath) throws Exception{
//创建缓冲流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destPath+"\\"+file.getName()));

byte []bArray=new byte[1024];
int len=-1;
while((len=bis.read(bArray))!=-1){
bos.write(bArray,0,len);//将数组的内容写入到文件中
}
bis.close();
bos.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐