一、IO流概述
二、IO流-字节流
1.文件字节输入流
每次读取一个字节
//1.创建文件字节输入流管道,与源文件接通
InputStream is = new FileInputStream("file-io-app\\src\\messi.txt");//简化写法
//2.开始读取文件的字节数据
//read:每次读取一个字节返回,如果没有数据了返回-1
//int b1 = is.read();
//System.out.println((char) b1);
//int b2 = is.read();
//System.out.println((char) b2);
//3.使用循环改进上述代码
int b;
while((b = is.read()) != -1){
System.out.print((char) b);
}
//读取数据的性能差
//读取汉字输出会乱码
//流使用完毕后必须关闭,释放系统资源
is.close();
每次读取多个字节
byte[] buffer = new byte[3];
int len;//记住每次读取多少个字节
while((len = is.read(buffer)) != -1){
String rs = new String(buffer,0,len);
System.out.print(rs);
}
is.close();
一次读取全部字节
//1.一次性读取完文件的全部字节到一个字节数组中去
FileInputStream is = new FileInputStream("file-io-app\\src\\cris3.txt");
// 方法一:
File f = new File("file-io-app\\src\\cris3.txt");
long size = f.length();
byte[] buffer = new byte[(int)size];
int len = is.read(buffer);
System.out.println(new String(buffer));
// 方法二:
byte[] buffer = is.readAllBytes();
System.out.println(new String(buffer));
2.文件字节输出流
//1.创建一个字节输出流管道与目标文件接通
//该管道会覆盖之前的数据
//OutputStream os = new FileOutputStream("file-io-app/src/cris4.txt");
//追加数据管道:会在原数据之后继续生成新的数据
OutputStream os = new FileOutputStream("file-io-app/src/cris4.txt",true);
//2.开始写字节数据出去
//一次性输出一个字节出去
os.write(97);
os.write('b');
//一次性输出多个字节出去
byte[] bytes = "我爱你中国".getBytes();
os.write(bytes);
os.write(bytes,0,15);//"我爱你中国"
//换行符
os.write("\r\n".getBytes());
os.close();
三、释放资源的方式
1.try-catch-finally
2.try-catch
try (
//1.创建字节输入流管道
InputStream is = new FileInputStream("E:/文件/ME.jpg");
//2.创建字节输出流管道
OutputStream os = new FileOutputStream("D:/ME.jpg");
){
//3.创建一个字节数组
byte[] buffer = new byte[1024];
//4.从字节输入流中读取数据,写出去到字节输出流中,读多少写多少
int len;
while ((len = is.read(buffer)) != -1){
os.write(buffer,0,len);
}
System.out.println("复制成功");
} catch (IOException e) {
e.printStackTrace();
}