package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.junit.Test;
/*
输出字节流:
--------| OutputStream:是所有输出字节流的父类;抽象类;
-----------| FileOutputStream:向文件写入数据的输出字节流;
FileOutputStream使用步骤:
1、找到目标文件;
2、建立数据的输出通道;
3、把数据转换成字节数组写出;
4、关闭资源;
FileOutputStream要注意的细节:
1、创建FileOutputStream输出流对象的时候,如果目标文件不存在,会自动创建目标文件;
2、创建FileOutputStream输出流对象的时候,如果目标文件已经存在,会清除目标文件中的所有数据;
3、创建FileOutputStream输出流对象的时候,如果目标文件已经存在,并且需要向目标文件中追加数据的时候,
需要使用new FileOutputStream(file, true)构造函数,第二个参数为true表示追加写入;
4、使用write(int b)方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,
一个字节八位,只是把低八位的二进制数据写出,其他二十四位的数据全部丢弃;
00000000-01110000-00001100-00011100
byte一个字节;short两个字节;int四个字节;long八个字节;
*/
public class Demo4 {
// 将数据写出到文件中
@Test
public void test1() throws Exception{
// 1、找到目标文件;
File file = new File("D:\\a.txt");
// 2、建立数据的输出通道;
FileOutputStream out = new FileOutputStream(file);
String content = "Hello World";
// 3、把数据转换成字节数组并写出;
out.write(content.getBytes());
// 4、关闭输出流,释放资源
out.close();
}
// 写出指定长度的数据到文件中
@Test
public void test2() throws IOException {
// 找到目标文件
File file = new File("D:\\a.txt");
// 建立数据的输出通道
FileOutputStream out = new FileOutputStream(file);
String content = "Hello World";
// 将数据转换成字节数组
byte[] buf = content.getBytes();
// 写出指定长度的数据;参数2表示从索引值为0的位置开始写出,参数3表示写出多少个字节;
out.write(buf, 0, 5);
// 关闭资源
out.close();
}
// 拷贝图片
@Test
public void test3() throws IOException{
// 找到目标文件
File srcFile = new File("D:\\photos\\11.jpg");
File descFile = new File("D:\\11.jpg");
// 建立数据的输入输出通道
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(descFile);
// 创建一个字节缓冲数组,存储读取到的内容;
byte[] buf = new byte[1024];
int len = 0;
// 边读边写:先用输入流读取数据,然后再将读取到的数据写出到目标文件中;
while ((len = in.read(buf)) != -1){
out.write(buf, 0, len);
}
// 关闭资源;原则:先开后关,后开先关;
out.close();
in.close();
}
}
package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* IO流的异常处理
*/
public class Demo5 {
public static void main(String[] args) {
copyImage();
}
// 拷贝图片的异常处理
public static void copyImage(){
FileInputStream in = null;
FileOutputStream out = null;
// 找到目标文件
File inFile = new File("D:\\photos\\11.jpg");
File outFile = new File("D:\\11.jpg");
try{
// 创建输入输出通道
in = new FileInputStream(inFile);
out = new FileOutputStream(outFile);
// 边读边写
int len = 0;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) != -1){
out.write(buf, 0, len);
}
}catch(IOException e){
System.out.println("拷贝图片失败。。。");
throw new RuntimeException(e);
}finally {
try {
if (out != null){
out.close();
System.out.println("关闭输出流成功。。。");
}
} catch (IOException e) {
System.out.println("关闭输出流失败。。。");
throw new RuntimeException(e);
}finally {
if (in != null){
try {
in.close();
System.out.println("关闭输入流成功。。。");
} catch (IOException e) {
System.out.println("关闭输入流失败。。。");
throw new RuntimeException(e);
}
}
}
}
}
}