java IO流

IO流

创建文件

package com.hniu.file;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;

public class FileCreate {
    @Test
    //方式1 new File(String pathname)
    public void create01(){
        File file=new File("G:\news1.txt");
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    //方式2 new File(File parent,String child) //根据父目录文件+子路径构建
    public void create02(){
        File parentfile=new File("G:\\");
        String fileName="news2.txt";
        File file = new File(parentfile, fileName);
        try {
            file.createNewFile();//创建文件
            System.out.println("创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    //方式3 new File(String parent,String child)//根据父目录加子路径构建
    public void create03(){
        File file=new File("G:/","news3.txt");
        try {
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

获取文件信息

package com.hniu.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class FileInformation {
    @Test
    //获取文件信息
    public void info(){
        //先创建文件对象
        File file =new File("G:\\news1.txt");
        //调用相应的方法,得到对应的值
        System.out.println("文件名字="+file.getName());
        System.out.println("绝对路径:"+file.getAbsolutePath());
        System.out.println("父级目录:"+file.getParent());
        System.out.println("文件大小(字节):"+file.length());
        System.out.println("文件是否存在:"+file.exists());//T
        System.out.println("是不是一个文件:"+file.isFile());//T
        System.out.println("是不是一个目录:"+file.isDirectory());//F

    }
}

常用的文件操作

package com.hniu.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class Directory {
    //判断 G://news1.txt是否存在如果存在就删除
    @Test
    public void m1(){
        String filePath="G:/news1.txt";
        File file=new File(filePath);
        if (file.exists()){
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }else {
            System.out.println("该文件不存在");
        }
    }
    //判断 G://news1 目录是否存在如果存在就删除
    @Test
    public void m2(){
        String filePath="G:\\demo\\a\\b\\c";
        File file=new File(filePath);
        if (file.exists()){
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }else {
            System.out.println("该目录不存在");
        }
    }
    //判断: G:\\demo\\a\\b\\c 目录是否存在,如果存在提示存在,否则创建
    @Test
    public void m3(){
        String filePath="G:\\demo1\\a\\b\\c";
        File file=new File(filePath);
        if (file.exists()){
            System.out.println("存在");
        }else {
            if (file.mkdirs()){//创建多级目录用mkdirs 创建一级目录用mkdir
                System.out.println(filePath+"创建成功");
            }else {
                System.out.println(filePath+"创建失败");
            }
        }
    }
}

流的概念

内存与存储设备之间传输数据的通道

流的分类

按方向【重点】

  • 输入流:将<存储设备>中的内容读到<内存>中
  • 输出流:将<内存>中的内容写到<存储设备>中

按单位

  • 字节流:以字节为单位,可以读写所有数据
  • 字符流:以字符为单位,只能读写文本数据

按功能

  • 节点流:具有实际传输数据的读写功能
  • 过滤流:在节点流的基础之上增强功能

字节流

InputStream

  • InputStream抽象类是使用类字节输入流的超类

  • inputStream 常用子类

    1. FileInputStream:文件读取

      package com.hniu.InputStream_;
      
      import org.junit.jupiter.api.Test;
      
      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.IOException;
      
      public class FileInputStream_ {
      
          @Test
          public void readFile01(){
              int read=0;
              String filePath="G:\\demo1\\hello.txt";
              FileInputStream fileInputStream=null;
              try {
                  //创建FinleInputStream 对象用于读取文件
                   fileInputStream = new FileInputStream(filePath);
                  //从该输入流读取一个字节的数据。如果没有输入可用,此方法将阻止
                  //如果放回-1表示读取完毕
                  while((read=fileInputStream.read())!=-1){
                      System.out.print((char)read);
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }finally {
                  try {
                      fileInputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
      
          }
      //    使用read(byte[] b) 读取文件,提高效率
          @Test
          public void readFile02(){
              int readLen=0;
              //字节数组
              byte[] buf=new byte[8];//一次读8个字节
              String filePath="G:\\demo1\\hello.txt";
              FileInputStream fileInputStream=null;
              try {
                  //创建FinleInputStream 对象用于读取文件
                  fileInputStream = new FileInputStream(filePath);
                  //如果返回-1表示读取完毕
                  //如果读取正常,返回实际读取的字节数
                  while((readLen=fileInputStream.read(buf))!=-1){
                      //这里读取字节数长度不要用buf.length,会读取错误
                      System.out.print(new String(buf,0, readLen));
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }finally {
                  try {
                      fileInputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
      
          }
      }
      
      
      1. outpitstream :文件写入

        package com.hniu.outputstream_;
        
        import org.junit.jupiter.api.Test;
        
        import java.io.FileNotFoundException;
        import java.io.FileOutputStream;
        import java.io.IOException;
        
        public class FileOutputStream01 {
            //FileOutputStream 将数据写到文件中,不存在则创建
            @Test
            public void weite(){
                FileOutputStream fileOutputStream=null;
                try {
                    //得到一个对象
                    fileOutputStream=new FileOutputStream("G:\\demo1\\a.txt");
                    //写入一个字节
                    fileOutputStream.write('H');
        
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        
        }
        
    2. BufferedInputStream:缓冲字节输入流

    3. ObjectInputStream: 对象字节输入流

字节流和字符流的区别

  • 主要区别在于两者之间处理信息的基本单位不同,
    • 字节流也称二进制流,它将数据以一个字节(Byte)为单位进行分组
    • 字符流是针对字符数据的特点进行过优化的,每次可以读写一个字符。

字节流

InputStream 类 和OutputStream类是处理字节流的输入/输出 顶级抽象类

InputStream类常用方法

方法名说明

OutputStream类常用方法

方法名说明

FileInputStream 类的使用

1.通过fileInputStream类读取文本文件中的数据,并将read()方法的返回值显示到控制台窗格

准备一个要读取的文本文件

ABC abc

测试

package FileInPutStreamTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author zwf
 * @Package: FileInPutStreamTest
 * @ClassName: demo01
 * @Description:
 * @date 2022/5/10 19:57
 */
public class demo01 {
    public static void main(String[] args) throws Exception {
        String FilePath = "F:\\java进阶\\IO\\src\\FileInPutStreamTest\\text"; //文件路径
        FileInputStream fileInputStream = new FileInputStream(FilePath);
        while (fileInputStream.available() != 0) {  //available()方法用于返回还有多小可读字节
            //read()方法从数据源中读取一个字节的二进制,并在高位补8个0再转换成一个十进制整数后放回给调用语句
            System.out.print("\t"+fileInputStream.read());
        }
        fileInputStream.close();
    }
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-go3JDtvf-1652608169571)(F:\2021年12月4号开始笔记\java-SE\img\Snipaste_2022-05-10_20-17-22.png)]

FileOutPutStream类的使用

1.使用FileInoutStream和FileOutStream类实现JPG格式图片文件的复制。

图片文件实际就是一种二进制格式的文件,可以通过FileInputStream类提供的read()依次读取,并通过FileOutputStream类提供的write()方法依次写入目标文件

package FileInPutStreamTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * @author zwf
 * @Package: FileInPutStreamTest
 * @ClassName: demo02
 * @Description:
 * @date 2022/5/10 20:32
 * 图片文件实际就是一种二进制格式的文件,可以通过FileInputStream类提供的read()依次读取,并通过FileOutputStream类提供的write()方法依次写入目标文件
 */
public class demo02 {
    public static void main(String[] args) throws Exception {
        //原图片路径
        String ImgPath="F:\\java进阶\\IO\\src\\FileInPutStreamTest\\1.jpg" ;
        //复制后的图片的路径
        String newImgPath="F:\\java进阶\\IO\\src\\FileInPutStreamTest\\new.jpg";
        FileInputStream fileInputStream = new FileInputStream(ImgPath); //读取图片的字节
        FileOutputStream fileOutputStream = new FileOutputStream(newImgPath); //输出图片的字节
        byte[] b=new byte[1024];//创建byte类型的数组,设置每次读取或输出的字节为1024 ,1M
        int len=0;
        //判断 读取图片如果结果为-1 表示读取完了
        while ((len=fileInputStream.read(b))!=-1){
            fileOutputStream.write(b,0,len);//将byte类型的数组的下标为0个元素开始的len个元素依次写入输出流
        }
        fileInputStream.close();
        fileOutputStream.close();
    }

}

过滤输入输出流

  • FilterInputStream和FilterOutStream抽象类分别实现了在二进制数据进行读写操作的同时,对所传输的数据,按指定的类型或格式进行转换
  • FilterInputStream和FilterOutStream拥有DataInputStream和DataOutputStream等子类

DataInputStream类

方法名说明

DataOutputStream类

方法名说明

DataInputStream和DataOutputStream使用

  1. 使用DataOutputStream类设计一个filterOut(int x ,double y,String z)方法,该方法能将一组不同类型的数据(int,double,String)写入二进制文件test.dat中,方法放回值为“数据写入成功”
  2. 使用DataInputStream类设计一个无参数,无返回值的filterIn()方法,该方法能将上述二进制文件中test.dat中的数据读取显示到控制台中
  3. 编写测试代码检验上述两个方法设计的正确性
package FileInPutStreamTest;

import java.io.*;

/**
 * @author zwf
 * @Package: FileInPutStreamTest
 * @ClassName: demo03
 * @Description:
 * @date 2022/5/11 21:10
 * 1. 使用DataOutputStream类设计一个filterOut(int x ,double y,String z)方法,该方法能将一组不同类型的数据(int,double,String)写入二进制文件test.dat中,方法放回值为“数据写入成功”
 * 2. 使用DataInputStream类设计一个无参数,无返回值的filterIn()方法,该方法能将上述二进制文件中test.dat中的数据读取显示到控制台中
 * 3. 编写测试代码检验上述两个方法设计的正确性
 */
public class demo03 {
    public static void main(String[] args) {
        //调用filterOut方法,将3个不同类型数据写入文件中
        try {
            System.out.println(filterOut("我的",10.1));
            filterIn();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    static String filterOut(String z,double y) throws Exception {
        //指定要操作的目标文件
        FileOutputStream fout = new FileOutputStream("F:\\java进阶\\IO\\src\\FileInPutStreamTest\\text.dat");
        //以fout对象为基础基础dout对象
        DataOutputStream dout = new DataOutputStream(fout);
//        dout.write(x); //写入一个int类型的数据
        dout.writeDouble(y);//写入一个double类型的数据
        dout.writeUTF(z);//写入一个字符串(UTF_8)
        fout.close();
        dout.close();
        return "数据写入成功";
    }
    static void filterIn() throws Exception {
        FileInputStream fin = new FileInputStream("F:\\java进阶\\IO\\src\\FileInPutStreamTest\\text.dat");
        DataInputStream din=new DataInputStream(fin);
//        System.out.println(fin);
//        System.out.println(din.readInt());
        System.out.println(din.readDouble());
        System.out.println(din.readUTF());
        fin.close();
        din.close();
    }
}

.close();
return “数据写入成功”;
}
static void filterIn() throws Exception {
FileInputStream fin = new FileInputStream(“F:\java进阶\IO\src\FileInPutStreamTest\text.dat”);
DataInputStream din=new DataInputStream(fin);
// System.out.println(fin);
// System.out.println(din.readInt());
System.out.println(din.readDouble());
System.out.println(din.readUTF());
fin.close();
din.close();
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值