栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

File类、递归算法、IO流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

File类、递归算法、IO流

一、File类

类代表与平台无关的文件和目录

File  能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

1. 构造器:

public class TestFile {
    public static void main(String[] args) {
    //路径中的要写 \ 还可以写 /
    //String参数的构造器
    //File file1 = new File("D:/Lession/Java2113/temp.txt");
    //File file2 = new File("D:/Lession/Java2113/a.txt");
    //File(File parent, String child) 构造器
    //File file1 = new File("D:/Lession/Java2113");
    //File file2 = new File(file1,"temp.txt");
    }
}
import java.io.File;
import java.io.IOException;

public class IOTest {
	public static void main(String[] args) {
		File f=new File("d:/huayu.txt");
		//如果文件不存在,则创建一个新文件
		if(!f.exists()) {
			try {
				f.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//获得文件的基本信息
		System.out.println(f.getName());
		System.out.println(f.getAbsolutePath());
		System.out.println(f.length());
		//是否是普通文件或目录
		System.out.println(f.isFile());
		System.out.println(f.isDirectory());
		//删除文件
		f.delete();
	}
}

2. 常用的方法:

createNewFile : 创建一个空文件

mkdir : 创建一个文件夹(目录)

mkdirs : 创建多级文件夹

File file1 = new File("D:/Lession/Java2113/a/b/c");
//file1.mkdir();
//创建多级文件夹
file1.mkdirs();

delete : 删除文件 或 文件夹 ,文件夹为空目录时才能删除;如果要想要删除一个非空的文件夹,则可以使用递归算法来实现。

exists: 判断文件或文件夹是否存在

getPath: 获得文件的路径(封装的路径)

toString : 相当于getPath()

getAbsolutePath : 获得其绝对路径

getName : 获得文件或文件夹的名字

getParent : 获得文件目录的路径

isFile / isDirectory :判断file对象是文件还是文件夹

length:文件大小,单位是字节

listFiles : 获得当前文件夹中的所有文件和文件夹对象数组

File file = new File("D:\Lession\Java2113\预热");
File[] files = file.listFiles();
for(File f:files) {
    System.out.println(f);
}
二、递归方法

1.递归( recursion)

• 递归的定义

若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接或间接地调用自己,则称这个过程是递归的过程

• 递归的思想

递归的基本思想就是把规模大的问题转化为规模小的多个相似的子问题来解决

•递归有两种:

        (1)直接递归:自己调用自己

(2)间接递归: A 中调用 B , B 中又调用了 A

在方法中调用自身方法

public class TestDG {
    //计算n阶乘的方法
    public static int jc(int n) {
    if(n==1)
        return 1;
        return jc(n-1)*n;
    }
    public static void main(String[] args) {
        System.out.println(jc(3));
    }
}

2.递归的三要素

1). 明确递归终止条件

   递归应该有一个明确的临界点,程序一旦到达了这个临界点,就不用再继续递归调用。换句话说,该临界点就是一种简单情境,可以防止无限递归。

2). 给出递归终止时的处理办法

  在递归的临界点存在一种简单情境,在这种简单情境下,应该直接给出问题的解决方案。一般地,在这种情境下,问题的解决方案是直观的、容易的。

3). 提取重复的逻辑,缩小问题规模

   递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。

 3.递归模板

public 返回值 recursion(){
    //1.递归结束条件
    if(){
        
    }
    //2.业务代码

    //3.向下递归调用
    recursion();

    //4.清空,善后处理(不是必须)
}

实例:递归删除文件

删除非空的目录中的所有文件 

	public static void delete(File f) {
		//1.结束条件
		if(f.isDirectory()) {
			//查找所有子文件;
			File[] fs=f.listFiles();
			for(File file:fs) {
				//3.向下调用
				delete(file);
				
			}
		}
		//2.业务代码
		f.delete();	
	}

找到一个文件夹中所有的.java文件

public class TestFile {
    public static void main(String[] args) {
        File file = new File("D:\Lession\Java2113\预热");
        delete(file);
    }
    //找到 “预热文件夹”中所有的java文件 ,存储到List集合中
    public static void getFile(File file,List list) {
        String hzm = "";
        String name = "";
        int index = -1;
        //判断file是否是文件夹
        if(file.isDirectory()) {
            File[] files = file.listFiles();
            for(File f:files) {
                if(f.isDirectory()) {
                    getFile(f,list);
                }else {
                    name = f.getName();
                    index = name.lastIndexOf(".");
                    if(index!=-1) {
                        hzm = name.substring(index);
                    }
                    if(".java".equals(hzm)) {
                        list.add(f);
                    }
                }
            }
        }
    }
    //删除文件夹下的所有文件和文件夹
    public static void delete(File file) {
        //获得有的文件及文件夹
        File[] files = file.listFiles();
        //如果是文件,删除
        for(File f:files) {
            if(f.isDirectory()) {
                delete(f);
            }
            //删除当前文件夹或文件夹
            f.delete();
        }
        file.delete();
    }
}
三、IO流(输入/输出流:Input / Output)

IO数据流是一个有序的二进制数据,Java的IO流其实就是一些IO流工具类

• 通常程序需要从外部获取/输出信息 • 这个“外部”范围很广,包括诸如键盘、显示器、文件、磁盘、网络、另外一个程序等 • “信息”也可以是任何类型的,例如一个对象、串字符、图像、声音等

       •通过使用 java.io 包中的输入/输出流类就可以达到输入输出信息的目的

IO流的分类

1. 输入流和输出流:方向上的分类,以内存为角度的方向,例如,编程实现从U盘一个文件复制到硬盘一个文件 中,用输入流读内容,用输出流写内容,InputStream和Reader类的子类都是输入流;OutputStream和 Writer的子类都是输出流

2. 字节流和字符流:处理数据量分类,也就是每读 / 写一次读 / 写了一字节,那么这个流就是字节流 ;通常处理中文,显示中文时要使用字符流。InputStream和OutputStream类的子类都是字节流;Reader和 Writer的子类都是字符流

3. 节点流和处理流:节点流有叫基本流;处理流又叫高级流 ;处理流都是对节点流的封装,也就是处 理流在节点流的基础上增加了额外的功能。节点流能处理所有的功能需求,但效率低,处理流能处 理特定的需求,效率高

FileInputStream

public class TestFile {
    public static void main(String[] args) {
        //读取temp.txt文件内容
        //流使用后 一定要关闭!!!写在finally中
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("D:\Lession\Java2113\temp.txt");
            int temp = 0;
            while((temp = fis.read())!=-1) {
                System.out.println(temp);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号