Java笔记第四弹

File类创建功能
public boolean createNewFile();//当该文件名不存在时,创建一个由该抽象路径名命名的新空文件
public boolean mkdir();//创建由此抽象路径名命名的目录
public boolean mkdirs();//创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
相关应用:
public class Main {
    public static void main(String[] args) throws IOException {
        File f1=new File("E:\\itcast\\java.txt");
        System.out.println(f1.createNewFile());//创建文件

        File f2=new File("E:\\itcast\\javaee");
        System.out.println(f2.mkdir());//创建目录

        File f3=new File("E:\\itcast\\javaweb\\HTML");
        System.out.println(f3.mkdirs());//创建多级目录

        File f4=new File("E:\\itcast\\javasee.txt");
        System.out.println(f4.createNewFile());//创建文件
    }
}
//不能名字相同,即使分别是文件和目录也不行
//起初不存在时,返回true;建立之后,会返回false;
//在创建目录时仅仅写出了文件名称,该文件与模块在同级目录下
File类删除功能
public boolean delete();//删除由此抽象路径名表示的文件或目录
//绝对路径:完整的路径名,不需要其他任何信息就可以定位它所表示的文件
//相对路径:必须使用取自其他路径的信息进行解释,例如:myfile\\java.txt
相关应用:
//在当前模块目录下创建java.txt文件
File f1=new File("myfile\\java.txt");
System.out.println(f1.createNewFile());

//删除当前模块目录下的java.txt文件
System.out.println(f1.delete());

//在当前模块目录下创建itcast目录
File f2=new File("myfile\\itcast");
System.out.println(f2.mkdir());

//删除当前模块目录下的itcast目录
System.out.println(f2.delete());

//在当前目录下创建itcast目录,然后在该目录中创建一个java.txt文件
//上级目录若是不存在,无法在该目录下创建文件
File f3=new File("myfile\\itcast");
System.out.println(f3.mkdir());
File f4=new File("myfile\\itcast\\java.txt");
System.out.println(f4.createNewFile());

//删除当前模块下的目录itcast-->先删除内容,再删除目录
System.out.println(f4.delete());
System.out.println(f3.delete());
File类的判断和获取功能
public boolean isDirectory();//测试此抽象路径名表示的File是否为目录
public boolean isFile();//测试此抽象路径名表示的File是否为文件
public boolean exists();//测试此抽象路径名表示的File是否存在
public String getAbsolutePath();//返回此抽象路径名的绝对路径名字符串
public String getPath();//将此抽象路径名转换为路径名字符串
public String getName();//返回由此抽象路径名表示的文件或目录的名称
public String[] list();//返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles();//返回此抽象路径名表示的目录中的文件和目录的File对象数组
相关应用:
File f1=new File("myfile\\java.txt");
        System.out.println(f1.isDirectory());
System.out.println(f1.isFile());
        System.out.println(f1.exists());
System.out.println(f1.getAdsolutePath());
System.out.println(f1.getPath());
System.out.println(f1.getName());

File f2=new File("E:\\itcast");
String[] str=f2.list();
for(String s:str){
    System.out.println(s);
}

File[] ff=f2.listFiles();
for(File f:ff){
    //System.out.println(f);
    if(f.isFile()){
        System.out.println(f.getName());
    }
}
递归
//定义一个方法f(n),表示第n个月的兔子对数
//第(n-1)个月--->f(n-1);  第(n-2)个月--->f(n-2);
//规模较小,少量程序
//递归出口---递归规则(规模较小)
案例:递归求阶乘
public class Main {
    public static void main(String[] args) {
        System.out.println(qiu(5));
    }
    public static int qiu(int n){
        if(n==1){
            return 1;
        }else{
            return n*qiu(n-1);
        }
    }
}
案例:遍历目录
import java.io.File;

public class Main {
    public static void main(String[] args) {
        File f=new File("E:\\itcast");
        //调用方法
        huoqu(f);
    }
    //定义方法
    public static void huoqu(File f){
        File[] ff=f.listFiles();
        if(ff!=null) {
            for (File lf : ff) {
if(lf.isDirectory()){
    huoqu(lf);
}else{
    System.out.println(lf.getAbsolutePath());//获取绝对路径
}
            }
        }
    }
}

IO流

分为:字节流:输入流、输出流

字符流:字符输入流、字符输出流

一般按照数据类型分类

@可以读懂记事本中的内容,使用字符流;否则使用字节流

如果不知道使用哪种类型的流,就使用字节流

字节流写数据
//字节流抽象基类
1、InputStream:这个抽象类是表示字节输入流的所有类的超类
2、OutputStream:这个抽象类是表示字节输出流的所有类的超类
    //子类名特点:子类名称都是以其父类名作为子类名的后缀
相关应用:
//调用系统功能创建了文件
//创建了字节输出流对象
//让字节输出流对象指向创建好的文件
FileOutputStream f=new FileOutputStream("myByteStream\\ff.txt");

//void write(int b);
//将指定的字节写入此文件输出流
f.write(97);//存入相应的AscII码值

//释放资源
//关闭此文件输出流
//释放与此流相关联的任何系统资源
f.close();
步骤:

1、创建字节输出流对象;

2、调用字节输出流对象的写数据方法;

3、释放资源;

字节流写数据的三种方式
void write(int b);//将指定的字节写入此文件输出流---一次写一个字节数据
void write(byte[]b);//将b.length字节从指定的字节数组写入此文件输出流---一次写一个字节数组数据
void write(byte[] b,int off,int len);//将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流---一次写一个字节数组的部分数量
相关应用:
FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt");

//方式一
fos.write(97);

//方式二
byte[] bys={97,98,99,100,101};
fos.write(bys);
//返回字符串对应的字符数组
byte[] bys="abcde".getBytes();
fos.write(bys);

//方式三
fos.write(bys,0,bys.length);
字节流写数据的两个小问题
1、字节流写数据如何实现换行?
FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt");

for(int i=0;i<10;i++){
    fos.write("hello".getBytes());
    fos.write("\r\n".getBytes());
}

fos.close();
//换行符:Windows:\r\n   Linux:\n   Mac:\r
2、字节流写数据如何实现追加写入?
FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt",true);//true表示追加写入
字节流写数据加异常处理
//finally在异常处理时提供finally块执行所有清除操作,比如说IO流中的释放资源
//使用
try{
    可能出现异常的代码;
}catch(异常类名  变量名){
    异常的处理代码;
}finally{
    执行所有清除操作;
    //有时候还需要判断文件是否为null
}
posted @ 2022-07-23 21:41  yesyes1  阅读(13)  评论(0编辑  收藏  举报