IO原理及字节流
//147
一:概念
流:从一端到另一端,源头与目的地
二:IO流分类
1.流向:输入流和输出流
2.数据:字节流:二进制,可以一切文件(文本,音视频)
字符流:文本文件
3.功能:
节点流:包裹源头
处理流:增强功能,提高性能
三:字节流
字节流:以字节为单位获取数据
输入流:InputStream 常用方法:read(byte[] b),read(byte[] b,int off,int len),close()
FileInputStream()
输出流:OutputStream 常用方法:write(byte[] b),write(byte[] b,int off,int len),flush(),close()
FileOutputStream()
四:操作
读文件
1.建立联系---------Flie文件 源头
2.选择流------------文件输入流 InputStream FileInputStream()
3.操作 数组大小 read------byte[] car=new byte[1024]; read 输出
4.释放资源------------关闭
写文件
1.建立联系---------Flie文件 目的地
2.选择流------------文件输出流OuputStream FileuOuputStream()
3.操作------------write(),flush
4.释放资源------------关闭
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
//147
public class ByteIo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//建立联系 File对象
File src=new File("H:/1/1.txt");
//选择流
InputStream is1=new FileInputStream(src);
//读取操作(缓冲数组)
byte[] car=new byte[1024];
int len=0;//接收实际读取大小
//循环读取
while (-1!=(len=is1.read(car))) {//read()从输入流到数组
//输出 字节数组转为字符串
String info=new String(car,0, len);
System.out.println(info);
}
if (null!=is1) {
is1.close();
}
}
}
package io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//147
public class ByteIo02 {
public static void main(String[] args) throws IOException {
File dest=new File("H:/1/2.txt");
OutputStream os1=new FileOutputStream(dest,true);
String s1="This is writen by lzk.";
//字符串转字节数组
byte[] data=s1.getBytes();
os1.write(data, 0, data.length);//write()从数组到输出流
os1.flush();//强制刷新出去
os1.close();
}
}
文件拷贝
1.建立联系---------Flie文件 源头 目的地
2.选择流------------文件输入流 InputStream FileInputStream()
和输出流文件输出流OuputStream FileuOuputStream()
3.操作 数组大小 read------byte[] car=new byte[1024];
int len=0;
whlie(-1!=(len=输入流.read(car))){
输出流.write(car,0,car.length)
}
flush()
4.释放资源------------关闭
package io;
//148 文件复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class ByteIo03Copy {
public static void main(String[] args) throws IOException {
String src="H:/1/1.jpg";
String dest="H:/1/3.jpg";
FileCopy(src, dest);
}
public static void FileCopy(String srcPath,String destString) throws IOException{
// 1
File src=new File(srcPath);
File dest=new File(destString);
if (!src.isFile()) {
System.out.println("只能拷贝文件");
}
//2
InputStream is1=new FileInputStream(src);
OutputStream os1=new FileOutputStream(dest);
//3
byte[] car=new byte[1024];
while (-1!=(is1.read(car, 0, car.length))) {
os1.write(car, 0, car.length);
}
//4
os1.flush();
os1.close();
is1.close();
}
}
文件夹拷贝
1.递归查找子孙级文件,文件夹
2.文件 复制(IO流复制)
文件夹 创建
package io;
/*
* 149 文件夹复制
* 1.文件复制 copyDir
* 2.文件创建 makedirs()
* 3.递归查找子孙
* */
import java.io.File;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String srcPath="H:/1";
String destPath="H:/2";
File src=new File(srcPath);
File dest=new File(destPath);
if (src.isDirectory()) {//如果是文件夹
dest=new File(destPath,src.getName());
}
ByteIo03Util.copyDir(src,dest);
}
}
public static void copyDir(File src, File dest) throws IOException {
if(src.isFile()){
ByteIo03Util.FileCopy(src,dest);
}
else if(src.isDirectory()){
//确保目标文件夹存在
dest.mkdir();
for(File temp:src.listFiles()){
copyDir(temp, new File(dest, temp.getName()));
}
}
}
字符流
字符流:以字符为单位获取数据
输入流:Reader常用方法:read(char[] cbuf),read(char[] cbuf,int off,int len),close()
FileReader()
输出流:Writer常用方法:write(char[] cbuf),write(char[] cbuf,int off,int len),flush(),close()
FileWriter()
Reader FileReader
Writer FileWriter
一:纯文本读取
1.建立联系
2.选择流------------Reader FileReader
3.读取 -----char[] car=new byte[1024]
4.释放资源------------关闭
二:纯文本写出
1.建立联系
2.选择流------------Writer FileWriter
3.读取 -----writer(car,0,len)
write(str);
4.释放资源------------关闭
package chario;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/*
* 151 纯文本复制
* */
public class CopyFile {
public static void main(String[] args) throws IOException {
File src=new File("H:/1/1.txt");
File dest=new File("H:/1/5.txt");
Reader r1=new FileReader(src);
Writer w1=new FileWriter(dest);
char[] car=new char[1024];
int len=0;
while (-1!=(len=r1.read(car))) {
w1.write(car,0,len);
}
w1.flush();
w1.close();
if(r1!=null){
r1.close();
}
}
}