Java--IO流

目录:IO流的体系,字节流,字符集,字符流

一.IO流的体系:

 

一.字节流:

1.FileOutputStream : 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中

书写步骤:(1)创建字节输出流对象

                  (2)写数据: 写到本地文件中的是整数在ASCII上对应的字符   字符9所对应的数字是57

                  (3) 释放资源

//1.创建对象
FileOutputSream fos = new FileOutputStream("myio\\a.txt");
//2.写出数据
fos.write(97);
//3.释放资源
fos.close();

 2.FileOutputStream写数据的三种方式

第三个方法的参数:第一个参数:数组;第二个参数:起始索引;第三个参数:个数

FileOutputStream fos = new FileOutputStream("myio\\a.txt");
byte[] bytes = {97,98,99,100};
fos.write(bytes,1,2); b c

3.FileInputStream : 操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。

书写步骤:(1)创建对象 

                           细节:如果文件不存在,就直接报错

                  (2)读数据  

                          细节:读到文件末尾了,read方法返回-1;

                  (3) 释放资源

                        细节:每次使用完都要释放资源

//1.创建对象
FileInputStream fis = new FileInputStream("myio\\a.txt");
//2.读取数据
int b1 = fis.read();
Sestem.out.println(b1);
//3.释放资源
fis.close();

4.FileInputStream的循环读取:

//1.创建对象
FileInputStream fis = new FileInputStream();
//2.循环读取
int b;
while((b = fis.read()) != -1){
 System.out.print((char)b);
 }
//3.释放资源
fis.close();

5.FileInputStream一次读多个字节

 

 注意:一次读一个字节数组的数据,每次读取会尽可能把数组装满

三.字符流:

1.字符流的底层其实就是字节流  字符流 = 字节流 + 字符集

2.特点:输入流:一次读一个字节,遇到中午时,一次读多个字节

              输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

3.使用场景:对于纯文本进行读写操作

4.FileReader:

(1)创建字符输入流对象

(2)读取数据

(3)释放资源

//1.创建对象并关联本地文件
FileReader fr = new FileReader("myio:\\a.txt");
//2.读取数据 read()
int ch;
while((ch = fr.read()) != -1) {
//想看的中文,就把这些十进制数据强转就可以了
 System.out.print((char)ch);
 }
//3.释放资源
fr.close();
//1.创建对象
        FileReader fr = new FileReader("D:\\作业\\04231803-张萍-Java实验\\a.txt");
        //2.读取数据
        char[] chars = new char[2];
        int len;
        while((len = fr.read(chars)) != -1) {
            //把数组中的数据变成字符串再打印
            System.out.println(new String(chars,0,len));
        }
        //3.释放资源
        fr.close();

5.FileWriter构造方法:

6.FileWriter成员方法:

7.FileWriter书写细节:

(1)创建字符输出流对象

(2)写数据

(3)释放资源

8.字节流和字符流的使用场景:

字节流:拷贝任意类型的文件

字符流:读取纯文本文件中的数据 ; 往纯文本文件中写出数据

综合练习:

1.拷贝一个文件夹,考虑子文件夹

//1.创建对象表示数据源
File src = new File(pathname);
//2.创建对象表示目的地
File dest = new Filepathname);
//3.调用方法开始拷贝
copydir(src,dest);

以上是写在main里面的

作用:拷贝文件夹
参数一:数据源
参数二:目的地
private static void copydir(File src,File dest) throws IOException {
//如果没有这个目录就自己创建
 dest.mkdirs();
//1.进入数据源
File[] files = src.listFiles();
//2.遍历数组
for(File file : files) {
 if(files.isFile()){
  //3.判断文件,拷贝
     FileInputStream fis = new FileInputStream(file);
     FileOutputStream fos = new  FileOutputStream(new File(dest,file.getName()));
     byte[] bytes = new byte[1024];
     int len;
     while(len = fis.read(bytes)) != -1){
       fos.write(bytes,0,len);
       }
  fos.close();
  fis.close();
}else{
    //4。判断文件夹,递归
 copydir(file,new File(dest,file.getName()));
}  

2.加密和解密

System.out.println(100 ^ 10); //110

 System.out.println(110 ^ 10); //100

//1.创建对象关联原始文件
FileInputStream fis = new FileInputStream("myio\\girl.jpg");
//2.创建对象关联加密文件
FileOutputStream fos = new FileOutputStream("myio\\ency.jpg");
//3.加密处理
int b;
while(b = fis.read()) != -1 ) {
 fos.write( b ^ 2);
 }
//4.释放资源
fos.close();
fis.close();

//解密时改一下上面那个路径代码即可
FileInputStream fis = new FileInputStream("myio\\ency.jpg");

FileOutputStream fos = new FileOutputStream("myio\\redu.jpg");

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值