public class Dome {
public static void main(String[] args) throws FileNotFoundException, IOException {
//字节流 是对字母进行操作 字符流 可以对汉字进行操作
//字节流有两个抽象类 InputStream FileOutputStream 他们分别都有一个子类
//FileInputStream(输入流)
//FileOutputStream(输出流)
//实现遍历文件
//创建文件对象
File file = new File("D:\\abc\\aaa.txt");//接收一个字符串类型的文件地址
FileInputStream a = new FileInputStream(file);//与文件对象产生关联
int num = -1;//在FileInputStream 的read(读取文件内容)方法中 没有内容就会返回-1
//这里的num是在为遍历文件内容做准备
while ((num = a.read()) != -1) {
System.out.print((char) num);//因为我读取的字节最底层是一个数字
//所以需要一个强制类型转换 将他转换成我们所需要的内容
}
//输出结果为文件内容 abcd
//对文件aaa进行输入
//创建文件对象
File file1 = new File("D:\\abc\\aaa.txt");
//创建输出流 并与文件对象产生关联 这里的true是因为在输出流对对文件进行数据存储的时候
//每次都会进行覆盖 即重写编写一个文件覆盖原本文件(没有文件系统会自动生成文件) 如果我们
//不想对原文件进行修改 就需要在new的时候给参数true(默认为false)
FileOutputStream b = new FileOutputStream(file1,true);
String aaaa = "aaaa";
byte[] bytes = aaaa.getBytes();//使用字符串的方法对字符串aaaa进行转换 从而可以进行数据的存储
b.write(bytes);
System.out.println("ok");
//最后结果abcdaaaa
//对文件进行复制
//创建两个文件对象
File filea = new File("D:\\abc\\aaa.txt");//原文件
File fileb = new File("D:\\abc\\abc.txt");//复制文件(不存在)
//准备输入流与输出流 并于文件产生关联
FileInputStream a1 = new FileInputStream(filea);//输入流
FileOutputStream b1 = new FileOutputStream(fileb,true);//输出流
int abc = -1;//准备返回值
while((abc = a1.read()) != -1){
b1.write(abc);//代码在遍历文件的同时进行对文件abc的存储
b1.flush();//flush方法代表手动释放缓存区的数据 应每存储一点释放一点
//使用close也能释放缓存区的数据 但会结束流 就不能对文件进行操作了
}
a1.close();
b1.close();//关闭流 应遵循先开后管原则
//结果为创建了文件abc.txt 文件内容为与文件aaa.txt相同
}