import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* FileOutputStream字节输入流,在控制台中显示
* FileOutputStream字节输出流,在文件中显示,控制台不显示
*/
public class Test {
static String src=("D:\\java\\EclipseWorkspace\\Chapter02\\src\\com\\sky\\homework\\p15\\Test.java");
/*将源文件绝对路径赋值给src
正斜杠转义单斜杠/,反斜杠转义双\\*/
static String deString="D:/Test.java";//目标文件
public static void main(String[] args) throws IOException {
m1();//FileOutputStream字节输出流
System.out.println();
m2();//使用字节数组、异常处理快速复制文件,自动关闭流
System.out.println();
m3();//一次复制一个字节,异常处理较为缓慢复制文件,手动关闭流
}
private static void m3() {
FileInputStream fis3=null;
FileOutputStream fos3=null;
try {
fis3=new FileInputStream(src);
fos3=new FileOutputStream(deString);
int cc=fis3.read();
while(cc!=-1){
fos3.write(cc);
cc=fis3.read();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(fis3!=null){//当读取文件不为空时,使用异常处理手动关闭输入流
try{
fis3.close();//每读取一次字节时需关闭输入流
}catch (IOException e) {
e.printStackTrace();
}
}
if(fos3!=null){
try {
fos3.close();//每写入一次字节时需关闭输入流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void m2() {
copyFily(src,deString);
}
private static void copyFily(String src, String deString) {
try (
FileInputStream fis1=new FileInputStream(src);
//建立字节输入流通道,读取文件
FileOutputStream fos2=new FileOutputStream(deString);
//建立字节输出流通道,写入文件
){
byte bytes[]=new byte[1024];
int len=fis1.read(bytes);
while(len!=-1){
fos2.write(bytes,0,len);
len=fis1.read(bytes);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void m1() throws IOException {
FileOutputStream fos=new FileOutputStream("D:/a.txt");
//如果访问的文件不存在, 系统会创建一个新文件; v如果文件已存在, 会覆盖文件原来的内容
fos.write(65);//把65对应的字符A保存到文件中
fos.write(66);//把66对应的字符A保存到文件中
fos.write(67);//把67对应的字符A保存到文件中
/*FileOutputStream fos = new FileOutputStream("d:/def.txt" , true);
//如果文件不存在就创建文件,如果文件已存在, 把内容保存到文件的后面, 即以追加的方式打开 文件
*/
//换行,在Windows操作系统中换行需要使用\r\n俩个字符
fos.write('\r');
fos.write('\n');
byte[] bytes = "bjpowernode".getBytes();
/*String类中的getBytes(String charsetName) 方法
使用指定的字符集将此 String 编码为 byte 序列,
并将结果存储到一个新的 byte 数组中。*/
fos.write(bytes); //把bytes数组中所有的字节保存到文件中
fos.write(13);//回车
fos.write(10);//换行
//把字节数组的部分字节保存到文件中
fos.write(bytes, 0, 2);
fos.close();
}
}