File流、IO流的概念

本文讲解了Java中File流、IO流的基础知识,涉及文件对象实例化、文件属性检查、文件创建与删除、文件夹递归遍历以及一个趣味问题——啤酒兑换策略。
摘要由CSDN通过智能技术生成

一、File流的概念

 二、IO流的概念

三、File流的常用方法

1.创建对象

import java.io.File;

public class FileTest1 {
    public static void main(String[] args) {
        //创建一个file对象,指代某一个具体的文件
        File f1 = new File ( "E:/FileTest/hz.txt" );
        System.out.println ( f1.length () );//返回文件大小 (字节)
        //创建一个file对象,指代某一个具体的文件夹
        File file2 = new File ( "E:/FileTest" );
        System.out.println ( file2.length () );//文件夹本身的大小  而不是文件夹的大小
        //file对象可以指带一个不存在的文件路径
        File f3 = new File ( "E:/FileTest/aaa.txt" );
        System.out.println ( f3.length () );//0
        System.out.println ( f3.exists () );//查看文件是否存在//false
        //定位的文件在模块中应该如何定位?
        //绝对路径:带盘符
        File file4 = new File ("D:\\xuexi\\src\\bbb.txt");
        //建议使用相对路径:默认直接在工程下寻找文件
        new File ( "xuexi\\src\\bbb.txt" );
        System.out.println ( file4.length () );// 7


    }
}

2.判断文件类型、获取文件信息功能

import java.io.File;
import java.text.SimpleDateFormat;

public class FileTest2 {
    public static void main(String[] args) {
        //1.创建文件对象指代某个文件
        File f1 = new File ( "E:/FileTest/hz.txt" );
        //2.public boolean exists():判断当前文件对象,对应的文件路径是否存在 存在返回True
        System.out.println ( f1.exists () );//true
        //3.public boolean isFile():判断当前文件对象是否为文件,是文件返回true
        System.out.println ( f1.isFile () );
        //4.public boolean isDirectory() :判断当前文件对象是否为文件夹
        System.out.println ( f1.isDirectory () );
        //5.public  String getName():获取文件的名称包含后缀
        System.out.println ( f1.getName () );//hz.txt
        //6.public long length():获取文件大小,返回字节个数
        System.out.println ( f1.length () );
        //7.public long lostModified():获取文件的最后修改时间
        System.out.println ( f1.lastModified () );//1695005604267
        long time = f1.lastModified ();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat ( "yyyy:MM:dd HH:mm:ss" );
        System.out.println ( simpleDateFormat.format ( time ) );//2023:09:18 10:53:24
        //8.public String getPath():获取创建文件对象时的绝对的路径
        File f2 = new File ( "xuexi\\src\\bbb.txt" );
        System.out.println ( f2.getPath () );//返回创建时的路径
        System.out.println ( f1.getPath () );
        //9.public String getAbsolutePath():获取绝对路径
        System.out.println ( f1.getAbsolutePath () );
        System.out.println ( f2.getAbsolutePath () );//D:\xuexi\xuexi\src\bbb.txt
    }
}

3.创建文件和删除文件

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

public class FileTest3 {
    public static void main(String[] args) throws IOException {
        //1.public boolean createFile():创建一个新文件(文件不存在时创建,创建成功返回true)
        File f1 = new File ("E:/FileTest/hzzz.txt");
        System.out.println ( f1.createNewFile () );
        //2.public boolean mkdir():创建文件夹  注意 只能创建一级文件夹
        File f2 = new File ( "E:/FileTest/aaa" );
        System.out.println ( f2.mkdir () );
        //3.public boolean mkdirs():创建文件夹 创建多级文件夹
        File f3 = new File ( "E:/FileTest/bbb/ccc/ddd/eee" );
        System.out.println ( f3.mkdirs () );
        //4.public boolean delete():新建文件、或者空文件 注意 不能删除非空文件夹
        System.out.println ( f1.delete () );
        System.out.println ( f2.delete () );


    }
}

4.遍历文件夹(方法只能遍历一级文件夹,不能遍历2级及以上的文件夹)

import java.io.File;

public class FileTest4 {
    public static void main(String[] args) {
        //1.public String [] list():获取当前目录下所有的”一级文件名称“到一个字符串数组去返回
        File f1 = new File ( "E:/FileTest/bbb" );
        String[] names = f1.list ();
        for (String name : names) {
            System.out.println ( name );
        }

        //2.public File[] listFiles():获取当前目录下所有的“一级文件”到“另一个文件按对象数组中去返回”(重点)
        File[] files = f1.listFiles ();
        for (File file : files) {
            System.out.println ( file.getAbsolutePath () );
        }

    }
}

5.用递归的方法遍历文件夹

1.递归方法

2.案例

 

 3.经典的递归问题:猴子吃桃

public class Test1 {
    public static void main(String[] args) {
        //1.找函数关系式
        //f(x)-f(x)/2 -1=f(x+1)
        //变形
        //2f(x)-f(x)-2=2f(x+1)
        //f(x)=2f(x+1)+2
        //求f(1)=?
        System.out.println ( f ( 1 ) );//1534
        System.out.println ( f ( 2 ) );//766
        System.out.println ( f ( 3 ) );//382

    }
    public static int f(int x){
        if (x==10){
            return 1;
        }
        return 2*f(x+1)+2;
    }

}

 4.文件搜索

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

public class SearchFileTest {
    public static void main(String[] args) throws IOException {
        searcheFile ( new File ( "D:/" ),"QQ.exe" );
    }

    /**
     *
     * @param dir  目录
     * @param fileName  要搜索的文件名称
     */
    public static void searcheFile(File dir,String fileName) throws IOException {
        //1.拦截非法情况
        if (dir==null||!dir.exists ()||dir.isFile ()){
            return;//代表无法搜索
        }
        //2.获取当前目录下的全部的一级文件对象
        File[] files = dir.listFiles ();
        //3.判断当前目录是否存在一级文件对象,以及是否可以拿到一级文件对象
        if(files!=null&&files.length>0){
            //4.遍历全部一级文件对象
            for (File file : files) {
                //5.判断文件是否为文件,还是文件夹
                if(file.isFile ()){
                    if (file.getName ().contains ( fileName )){
                        System.out.println ( file.getAbsolutePath () );
                        //qq启动!!!!!
                        Runtime runtime = Runtime.getRuntime ();
                        runtime.exec ( file.getAbsolutePath () );
                    }
                }else {
                    //6.是文件夹
                    searcheFile ( file,fileName );
                }

            }
        }


    }
}

 5.文件删除

import java.io.File;

public class DeleteFileTest {
    public static void main(String[] args) {

    }
    public static void deleteDir(File dir){
        //1.传入的对象是文件夹
        if (dir==null||!dir.exists ()){
            return;
        }
        //2.传入的对象是文件
        if(dir.isFile ()){
            dir.delete ();
            return;
        }
        //1.dir存在且是文件夹,拿到里面的一级文件对象
        File[] files = dir.listFiles ();
        if (files==null){
            return;
        }
        //2.这是一个存内容的文件夹干掉里面的内容在干掉自己
        for (File file : files) {
            if (file.isFile ()){
                file.delete ();
            }else {
                deleteDir ( file );
            }
            dir.delete ();
        }

    }
}

6.啤酒问题

啤酒两元一瓶,4个盖子可以换一瓶,两个空瓶可以换一瓶,请问十元可以喝多少瓶

public class Test2 {
    public static int totalNumber;//总瓶子数
    public static int lastBottleNumber;//上轮剩余瓶子数
    public static int lastCoverNumber;//上轮剩余瓶盖数
    public static void main(String[] args) {
buy ( 10 );
        System.out.println (totalNumber);
    }
    public static void buy(int money){
        //1.先买了几瓶
        int buyNumber=money/2;
        totalNumber+=buyNumber;
        //2.把盖子和瓶子换算成钱继续买
        //计算本轮的盖子数和瓶子数
        int totalBottleNumber=buyNumber+lastBottleNumber;
        int totalCoverNumber=buyNumber+lastCoverNumber;
        int allMoney=0;
        //换算成钱
        if (totalBottleNumber>=2){
            allMoney+=(totalBottleNumber/2)*2;
        }
        lastBottleNumber=totalBottleNumber%2;
        if (totalCoverNumber>=4){
            allMoney+=(totalCoverNumber/4)*2;
        }
        lastCoverNumber=totalCoverNumber%4;
        if (allMoney>=2){
            buy ( allMoney );
        }




    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值