java IO流学习笔记------(1)
IO流总述
• 输入流:数据源到程序(InputStream、Reader读进来)
• 输出流:程序到目的地(OutputStream、Writer写出去)
流分类 :
• 节点流:可以直接从数据源或目的地读写数据
• 处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。 目的主要是简化操作和提高性能。
• 节点流和处理流的关系:
① 节点流处于io操作的第一线,所有操作必须通过他们进行;
② 处理流可以对其他流进行处理(提高效率或操作灵活性)。
• 字节流:按照字节读取数据(InputStream、OutputStream)
• 字符流:按照字符读取数据(Reader、Writer) ,因为文件编码的不同,从而有了对字符进行高效操作的字符流对象。原理:底层还是基于字节流操作,自动搜寻了指定的码表。
IO流读取和写出的四个固有步骤:
1.创建源
2.选择流
3.操作
4.释放(有的流内部自动释放.但写上无错)
IO流—文件字节流FileInputStream&FileOutputStream
FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像、视频等),全字符请考虑FileReader
FileOutputStream:通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像、视频等),全字符请考虑FileWriter
重要方法:
int read() 从该输入流读取一个字节的数据
int read(byte[] b) 从该输入流读取最多 b.length个字节数组
int read(byte[] b,int off,int len) 从该输入流读取最多len个字节到字节数组,off 偏移量,即从第几个字节开始读取
int write() 将指定字节写入此文件输出流
int write(byte[] b) 将b.length个字节数组从指定的字节数组写入此文件输出流
int write(byte[] b,int off,int len) 将len字节从指定的字节数组开始,从偏移量off开始写入此文件流
close() 关闭流(不可少)
注意:
创建文件输出流以写入由指定的File对象表示的文件。 如果第二个参数为true ,则字节将写入文件的末尾而不是开头
用FileOutputStream流时最好加上flush()刷新操作
用多个流在关闭时,遵循先打开的后关闭
练习代码
文件字节输入流练习
package Io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* @author 赌徒
* 文件字节输入流练习
*
*/
public class FileInputStreamT1 {
public static void main(String[] args) throws IOException {
//源头
File srcFile=new File("data.txt");
//选择流
FileInputStream fis=new FileInputStream(srcFile);
byte[] b=new byte[1024];
int len=-1;
//操作
while((len=fis.read(b))!=-1) {
System.out.println(new String(b));
}
//释放
fis.close();
}
}
文件字节输出流练习
package Io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author 赌徒
* 文件字节输出流练习
*
*/
public class FileOutputStreamT1 {
public static void main(String[] args) throws IOException {
//源头
File srcFile=new File("data.txt");
FileOutputStream fos=new FileOutputStream(srcFile,true);
String string="你好!";
byte[] b=string.getBytes();
//操作
fos.write(b);
//刷新
fos.flush();
//释放
fos.close();
}
}
文件字节流综合练习(文件的复制)
package Io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author 赌徒
* 文件的复制
*
*/
public class test {
public static void main(String[] args) throws IOException {
//源头
copy("data.txt", "copy1.txt");
}
public static void copy(String srcFile,String srcFile1 ) throws IOException {
//选择流
FileInputStream fis=new FileInputStream(srcFile);
FileOutputStream fos=new FileOutputStream(srcFile1);
byte b[]=new byte[1024];
int len=-1;
//操作
while((len=fis.read(b))!=-1) {
fos.write(b,0,len);
}
fos.flush();
// 释放
// 先打开的后关闭
fos.close();
fis.close();
}
}