File
File是java.io包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。
IO流
用于读写数据的(可以读写文件,或网络中的数据...)
创建File类的对象
构造器 | 说明 |
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
注意:File对象既可以代表文件,也可以代表文件夹。
File封装的对象仅仅是一个路径名,这个路径名是可以存在的,也允许是不存在的。
绝对路径、相对路径
绝对路径:从盘符开始
File file1 = new File(“D:\\itheima\\a.txt”);
相对路径:不带盼复,默认直接到当前工程下的目录寻找文件。
File file3 = new File(“模块名\\a.txt”);
创建文件、删除文件
File类创建文件的功能
方法名称 | 说明 |
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
File类删除文件的功能
方法名称 | 说明 |
public boolean delete() | 删除文件、空文件夹 |
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站。
import java.io.File;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws Exception {
File f1 = new File("E:\\王森\\Java资料\\Java资料\\第二阶段:基础加强13天课程(资料)\\全部PPT\\aaaday01、面向对象进阶(一).pptx");
System.out.println(f1.createNewFile());
File f2 = new File("E:\\王森\\Java资料\\Java资料\\第二阶段:基础加强13天课程(资料)\\全部PPT2");
System.out.println(f2.mkdir());
File f3 = new File("E:\\王森\\Java资料\\Java资料\\第二阶段:基础加强13天课程(资料)\\全部PPT3\\aaa\\bbb\\ccc\\ddd\\eee\\fff");
System.out.println(f3.mkdirs());
System.out.println(f1.delete());
System.out.println(f2.delete());
System.out.println(f3.delete());
}
}
遍历文件夹
File类提供的遍历文件夹的功能
方法名称 | 说明 |
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点) |
使用listFile方法时的注意事项:
当主调是文件,或者路径不存在时,返回null
当主调是空文件夹时,返回一个长度为0的数组
当主调是一个有内容的文件夹时,将里面所有一级文件和文件路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
前置知识:方法递归
认识递归的形式
什么是方法递归
递归是一种算法,在程序设计中广泛使用。
从形式上说:方法调用自身的形式称为方法递归(recursion)。
递归的形式
直接递归:方法自己调用自己。
间接递归:方法调用其他方法,其他方法又调回自己。
使用方法递归时需要注意的问题:
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
应用、执行流程、算法思想
案例:计算n的阶乘
public class Test4 {
public static void main(String[] args) {
System.out.println(test4(5));
}
public static int test4(int n){
if (n == 1){
return 1;
}else {
return test4(n-1)*n;
}
}
}
递归算法三要素:
递归公式:f(n) = f(n-1)*n;
递归的终结点:f(1)
递归的方向必须走向终结点
案例:猴子吃桃问题
猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个 第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个 以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个 等到第10天的时候发现桃子只有1个了。 需求:请问猴子第一天摘了多少个桃子?
public class Test5 {
public static void main(String[] args) {
System.out.println(f(1));
}
public static int f(int n){
if (n == 10){
return 1;
}else {
return 2*f(n + 1) + 2;
}
}
}
前置知识:字符集
标准ASCII字符集
ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
标准ASCII使用一个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。
GBK(汉字内码扩展规范,国标)
汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
UTF-8
是Unicode字符集的一种编码方案,采取可变长编码方案,共分为四个长度区:一个字节,两个字节,三个字节,四个字节
英文字符、数字等只占一个字节(兼容标准ASCII编码),汉字字符占用三个字节。
注意:技术人员在开发时都应该使用UTF-8编码!
字符集的编码、解码操作
IO流
IO流概述:
I指Input,称为输入流:负责把数据读到内存中
O指Output,称为输出流:负责写数据出去
IO流的分类
按流的方向分:输入流和输出流
按流中数据的最小单位分:字节流(适合操作所有类型的文件)字符流(只适合操作纯文本文件)
总结流的四大分类
字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流:以内存为基准,把内存中以字节写出到磁盘文件或者网络中去的流
字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流
字符输出流:以内存为基准,把内存中的数据写出到磁盘文件或者网络介质中去的流