JAVA学习笔记09——文件类,IO流

文件类

1.构造方法

public File(String pathname):通过给定的路径字符串转换为抽象路径名来创建新的File实例
路径可以是文件结尾,也可以是文件夹结尾
路径可以是相对路径也可以是绝对路径
路径可以是存在的也可以是不存在的
创建File对象,只是把字符串路径封装为File对象,不考虑存在情况

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        show();
    }

    private static void show() {
    
    
        File fl=new File("D:\\JAVA\\File\\text.txt");
        System.out.println(fl); //D:\JAVA\File\text.txt
    }
}

public File(String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例
parent:父路径
child:子路径
好处:父路径与子路径可以单独书写,使用灵活

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        show();
    }

    private static void show() {
    
    
        File fl=new File("D:\\JAVA\\File","text.txt");
        System.out.println(fl); //D:\JAVA\File\text.txt
    }
}

public File(File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例
好处:父路径可以使用File的方法对路径进行一些操作

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        show();
    }

    private static void show() {
    
    
        File parent=new File("D:\\JAVA\\File");
        File fl=new File(parent,"text.txt");
        System.out.println(fl); //D:\JAVA\File\text.txt
    }
}

2.常用方法

public String getAbsolutePath():返回此File的绝对路径字符串
public String getPath():将此File转换为路径名字符串
public String getName():返回此File表示的文件或目录名称
public long length():返回此File表示的文件的长度

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        File f=new File("F:\\JAVA\\File");
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getPath());
        System.out.println(f.getName());
        System.out.println(f.length());
        /*
        F:\JAVA\File
        F:\JAVA\File
        File
        0
         */
    }
}

判断方法
public boolean exists():此File表示的文件或目录是否实际存在
public boolean isDirectory():此File表示的是否为目录
public boolean isFile():此File表示的是否是文件

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        File f=new File("F:\\JAVA\\File");
        System.out.println(f.exists());
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());
        /*
        true
        true
        false
         */
    }
}

删除方法
public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件夹
1.此方法只能创建文件,不能创建文件夹
2.创建文件的路径必须存在,否则会出现异常

public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        File f=new File("F:\\JAVA\\File\\text.txt");
        boolean b=f.createNewFile();	//只能创建文件,不能创建文件夹
        System.out.println(b);
    }
}

public boolean delete():删除由此File表示的文件或目录
如果文件夹中存在文件,则返回false;如果不存在文件,则返回true

public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        File f1=new File("F:\\JAVA\\File\\text\\text1\\text2");
        boolean b1=f1.delete();
        System.out.println(b1);
    }
}

public boolean mkdir():创建由此File表示的目录,创建单级空文件夹
public boolean mkdirs():创建由此File表示的目录,包括任何必须但不存在的父目录,创建单级空文件夹,也可以创建多级文件夹

public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        File f1=new File("F:\\JAVA\\File\\text");
        boolean b=f1.mkdir();
        System.out.println(b);
        File f2=new File("F:\\JAVA\\File\\text\\text1\\text2");
        boolean b2=f2.mkdirs();
        System.out.println(b2);
    }
}	//只创建文件夹

目录遍历
public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录
public File[] listFiles():返回一个File数组,表示该File目录中所有的文件或目录

public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        File f1=new File("F:\\JAVA");
        //获取当前目录下的文件以及文件夹的名称
        String[] names=f1.list();
        for (String name : names) {
    
    
            System.out.println(name);
        }
        //获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
        File[] files=f1.listFiles();
        for (File file : files) {
    
    
            System.out.println(file);
        }
    }
}

IO流

1.IO概述

输入流:把数据从其他设备上读取到内存中的流
输出流:把数据从内存中写出到其他设备上的流

2.字节流

字节输出流
public void close():关闭此输出流并释放与此相关联的任何系统资源
public void flush():刷新此输出流并强制任何缓冲的输出字节被写出
public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流
public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流
public abstract void write(int b):将指定的字节输出流
构造方法:
FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(File file):创建一个向指定File对象表示的文件中写入数据的文件输出流
构造方法作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件/文件路径,创建一个空文件
3.会把FileOutputStream对象指定创建好的文件

public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
        FileOutputStream fos=new FileOutputStream("F:\\JAVA\\File\\text1.txt");
        //调用FileOutputStream对象中的write方法,把数据写入到文件中
        fos.write(97);
        //释放资源
        fos.close();
    }
}
public class Demo01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
        FileOutputStream fos=new FileOutputStream(new File("F:\\JAVA\\File\\text2.txt"));
        //调用FileOutputStream对象中的write方法,把数据写入到文件中
        /*public void write(byte[] b)一次写多个字节
        如果写的第一个字节是正数,那么现实的时候会查询ASCII表
        如果写的第一个字节是负数,那第一个字节会和第二个字节组成一个中文显示
         */
        byte[] bytes={
    
    65,66,67,68,69};
        //fos.write(bytes)  ABCDE
        fos.write(bytes,1,2);   //BC
        //释放资源
        fos.close();
    }
}

续写与换行:
使用两个参数的构造方法:
FileOutputStream(String name,boolean append):创建一个向具有指定name的文件中写入数据的输出文件流
FileOutputStream(File file,boolean):创建一个向指定File对象表示的文件中写入数据的文件输出流
参数:
name,file:写入数据的路径
boolean append:true创建对象不会覆盖原文件,继续在文件末尾追加写数据;false创建一个新文件覆盖原文件

public class Demo02 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        FileOutputStream fos=new FileOutputStream("F:\\JAVA\\File\\text1.txt",true);
        fos.write("Kobe".getBytes());
        fos.close();
    }
}

换行符号:

public class Demo02 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        FileOutputStream fos=new FileOutputStream("F:\\JAVA\\File\\text1.txt",true);
        for (int i=0;i<10;i++){
    
    
            fos.write("Kobe".getBytes());
            fos.write("\r\n".getBytes());
        }
        fos.close();
    }
}

字节输入流
把硬盘中的数据读取到内存中
int read():从输入流中读取数据的下一个字节
int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
构造方法:
FileInputStream(String nmae)
FileInputStream(File file)
作用:
1.创建一个FileInputStream对象
2.会把FileInputStream对象指定的构造方法中要读取的文件

public class Demo03 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //创建FileInputStream对象,构造方法中绑定要读取的数据
        FileInputStream fis=new FileInputStream("F:\\JAVA\\File\\text1.txt");
        //使用FileInputStream对象中的方法read,读取文件
/*       int len=fis.read();
        System.out.println(len);*/
        int len=0;
        while((len=fis.read())!=-1){
    
    
            System.out.println((char)len);
        }
        //释放资源
       fis.close();
    }
}
public class Demo03 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //创建FileInputStream对象,构造方法中绑定要读取的数据
        FileInputStream fis=new FileInputStream("F:\\JAVA\\File\\text2.txt");
        //使用FileInputStream对象中的方法read,读取文件
        byte[] bytes=new byte[1024];
        int len=0;
        while((len=fis.read(bytes))!=-1){
    
    
            System.out.println(new String(bytes,0,len));
            //用len记录长度使读取有效字节数
        }
        //释放资源
       fis.close();
    }
}

3.字符流

字符输入流
public void close():关闭此流并释放与此相关联的任何系统资源
public int read():从输入流读取一个字符
public int read(char[] cbuf):从输入流中读取一些字符,并将他们存储到字符数组cbuf中
构造方法:
FileReader(File file):创建一个新的FileReader,给定要读取的File对象
FileReader(String fileName):创建一个新的FileReader,给定要读取的文件名称
字符输出流
void write(int c):写入单个字符
void write(char[] cbuf):写入字符数组
abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分,off数组的开始索引,len写的字符个数
void write(String str):写入字符串
void write(String ,str,int off.int len):写入字符串的某一部分,off字符串的开始索引,len写的字符个数
void flush():刷新该流的缓冲
void close():关闭此流,但是要先刷新

public class Demo05 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //使用FileWriter对象,构造方法中绑定要写入数据的目的地
        FileWriter fw=new FileWriter("F:\\\\JAVA\\\\File\\\\text2.txt");
        //使用FileWriter中的方法write,把数据写入到内存缓冲区(字符转换为字节的过程)
        fw.write(97);
        //使用FileWriter中的方法flush(),把内存缓冲区中的数据,刷新到文件中
        fw.flush();
        //释放资源
        fw.close();
    }
}

flush():刷新缓冲区,流对象可以继续使用
close():先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了

public class Demo05 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //使用FileWriter对象,构造方法中绑定要写入数据的目的地
        FileWriter fw=new FileWriter("F:\\\\JAVA\\\\File\\\\text2.txt");
        char[] cs={
    
    'h','i','w','o','r','l','d'};
        fw.write(cs);
        fw.write(cs,2,2);
        fw.write("hello,world");
        fw.close();
    }
}

续写与换行:同上

4.IO异常处理

JDK7:在try后面增加一个(),在括号中可以定义流对象,那么这个流对象的作用域就在try中有效,try中的代码执行完毕,会自动把流对象释放
JDK9:try的前面可以定义流对象,在try的后面()中可以引入流对象的名称。在try代码执行完毕周后流对象也可以释放掉,不用写finally

猜你喜欢

转载自blog.csdn.net/qq_44708714/article/details/106944695