(面试)文件操作和IO

  • 文件定义 

1.狭义文件:存储在硬盘上的数据,以文件为单位,进行组织,文件夹叫做目录,是一种特殊的文件

2.广义文件:操作系统负责管理软硬件的资源(操作系统Linux都统一抽象成文件来进行管理,一切皆是文件)

3.硬盘特点:

(硬盘存储空间大,内存存储空间小;硬盘访问速度比较慢,而内存访问速度比较快;硬盘成本比较低,内存成本比较高;硬盘上数据断电不丢失,内存数据断电会丢失)

  • 文件路径 

1.绝对路径(\目录\......)

2.相对路径 (首先要有一个基准路径,以基准路径为起点,在继续进行;在相对路径中..表示返回上级目录)

  • 文件内容读写

                   字节流(以字节为单位,适用于二进制文件)

Inputstream-----FileInputStream                     Outputstream---------FileOutputStream

                     字符流(适用于文本文件)

Reader-------FileReder                          Writer-----FileWriter

 字节流读取文件(读取文件完成要关闭文件)

 public static void main(String[] args) throws IOException{
        try(InputStream inputStream=new FileInputStream("hello.txt")) //相当于打开文件{
            while (true){
                int b=inputStream.read();
                if (b==-1){
                    //文件读取完毕
                    break;
                }
                System.out.println("%c",b);
             }
          }
        }

字节流写文件

OutputStream outputStream=new FileOutputStream("bbb.txt");

 字符流读文件

  • 使用Scanner进行读(针对文本文件可以使用scanner读取,scanner是inputStream基础上转化成字符流)
  public static void main(String[] args) throws IOException{
        //需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
        try (InputStream inputStream=new FileInputStream("d:test.txt")){
            Scanner scanner=new Scanner(inputStream,"UTF-8");
            while (scanner.hasNext()){
                String s=scanner.next();
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
  •  printWriter来写数据
   public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF8")) {
                try (PrintWriter writer = new PrintWriter(osWriter)) {
                    writer.println("我是第一行");
                    writer.print("我的第二行\r\n");
                    writer.printf("%d: 我的第三行\r\n", 1 + 1);
                    writer.flush(); //进行数据刷新操作
               }
           }
       }
   }

 1.文件操作的时候一定要close:因为每一个进程都对应PCB,PCB里面有一个字段,文件描述符表(相当于是一个顺序表/数组)进程每次打开一个文件,都会在表里创建一个项,这一项就表示一个文件,关闭一个文件就会把表里对应项给释放掉,不关闭就意味着这个表项在这里占着位置,如果持续打开文件并且都不关就会导致表项被耗尽,后续元素打开失败

 2.一个进程能够打开几个文件:在系统中配置的

 3.文件泄露:JVM是会自动释放,但是对应流对象如果被GC销毁,会自动关闭对应文件,如果代码有问题,则仍然会保持这种流对象引用,不会触发GC,文件就会一直打开

  • 文件读写应用 

文件复制:

1.把第一个文件打开,把里面内容按字节读取出来,写到第二个文件里面即可

2.先输入你要复制的文件,把源文件复制到哪里去

3.打开源文件,按照字节读取内容,写到目标文件 

//文件复制
    public static void main(String[] args) throws IOException {
        //打开源文件和目标文件
        InputStream inputStream=new FileInputStream("d:test1.txt");
        OutputStream outputStream=new FileOutputStream("d:test2.txt");
        //读取文件
       while (true){
           int b=inputStream.read();
           if (b==-1){
               break;
           }
           outputStream.write(b);
       }
       inputStream.close();
       outputStream.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值