文件操作: File 类的用法和 InputStream, OutputStream 的用法

目录

1. File 概述

1.1 File的属性 

1.2 File的构造方法 

1.3 File的方法

2. 文件的基本操作

2.1 InputStream

2.2 OutputStream 

2.3.字符流读取(Reader)

2.4 字符流写(Writer)


1. File 概述

Java 中通过 java.io.File 类来对⼀个文件(包括目录)进行抽象的描述。注意,有 File 对象, 并不代表真实存在该文件。 

1.1 File的属性 

1.2 File的构造方法 

1.3 File的方法

使用示例 

getParent(),getName(),getPath(),getAbsolutePath(),getCanonicalPath() 

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

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("D:/Java/test.txt");
        System.out.println(file.getName()); //获取文件名字
        System.out.println(file.getParent());  //获取文件的父目录
        System.out.println(file.getPath());   //获取文件路径
        System.out.println(file.getAbsolutePath()); //获取文件的绝对路径
        System.out.println(file.getCanonicalPath());  //获取文件的规范路径
    }
}

exists(),isDirectory(),isFile(),createNewFile() 

createNewFile(): 根据 File 对象,自动创建⼀个空文件。成功创建后返回 true

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

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:/Java/test.txt");
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());

        boolean ret = file.createNewFile();
        System.out.println("ret = " + ret);

        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
    }
}

delete(),deleteOnExit()

delete():根据 File 对象,删除该文件。成功删除后返回 true 

import java.io.File;

public class Demo3 {
    public static void main(String[] args) throws InterruptedException {
        File file = new File("D:/Java/test.txt");
        boolean ret = file.delete();
        System.out.println("ret = " + ret);
    }
}

deleteOnExit():根据 File 对象,标注文件将被删除,删除动作会到 JVM 运⾏结束时才会进行 。

public static void main(String[] args) throws InterruptedException {
        File file = new File("D:/Java/test.txt");      
        //等程序结束后再删除文件
        file.deleteOnExit();
        Thread.sleep(3000);
    }

list(),listFiles()

list():返回 File 对象代表的目录下的所有文件名 

public class Demo4 {
    public static void main(String[] args) {
        File file = new File("D:/Java/");
        String[] files = file.list();
        System.out.println(Arrays.toString(files));
    }
}

listFiles():返回 File 对象代表的目录下的所有件,以 File 对象表示 。

public class Demo4 {
    public static void main(String[] args) {
        File file = new File("D:/Java/");
        File[] files = file.listFiles();
        System.out.println(Arrays.toString(files));
    }
}

 mkdir(),mkdirs()

mkdir():创建 File 对象代表的目录 

public class Demo5 {
    public static void main(String[] args) {
        File file = new File("D:/Java/aaa");
        boolean ret = file.mkdir();
        System.out.println(ret);
    }
}

mkdirs():创建 File 对象代表的目录,如果必要,会创建中间目

public class Demo5 {
    public static void main(String[] args) {
        File file = new File("D:/Java/aaa/bbb/ccc/ddd");
        boolean ret = file.mkdirs();
        System.out.println(ret);
    }
}

 renameTo(File dest):进行文件改名,也可以视为我们平时的剪切、粘贴操作

修改文件名:

public class Demo5 {
    public static void main(String[] args) {
        File src = new File("./test.txt");
        File dest = new File("./test2.txt");
        boolean ret = src.renameTo(dest);//重命名和移动目录
        System.out.println(ret);
    }
}

修改路径: 

public static void main(String[] args) {
        File src = new File("./test2.txt");
        File dest = new File("./aaa/test2.txt");
        boolean ret = src.renameTo(dest);//重命名和移动目录
        System.out.println(ret);
    }

2. 文件的基本操作

文件的读写,针对文本文件JAVA提供了一组类,称为字符流(典型代表 Reader(输入流),Writer (输出流)) 读写的基本单位是字符~

针对二进制文件 提供了一组类 称为字节流(典型代表 inputStream,(输入流)OutputStream( 输出流))  读写的基本单位是字节~

2.1 InputStream

基本方法: read() :读取一个字节的数据,返回-1代表读取完毕
read(byte[] b)  :最多读取b.lenth的字节的数据到b,返回实际读到的数量,-1代表读取完毕
read(byte[] b, int off, int len)  :最多读取,len-off 字节的数据到b 中,放在从off开始的下标 -1代表读取完毕
由于inputStream是个抽象类,不能直接实例化,里面的类有很多,这里我们只用文件操作,使用 FileInputStream 来实例化~

public class IODemo6 {
    //事先在目录中准备了文件,内容为abc
    public static void main(String[] args) throws IOException {   //使当前对象和硬盘上的文件关联起来
        try(InputStream inputStream=new FileInputStream("d:/test.txt")) {  //相当于打开文件,如果不存在就抛出异常
            while (true) {                              //try代码块的作用可以在代码块结束的时候自动执行close操作
                int ret = inputStream.read();  //读取文件,一次读取一个字节,一直到文件读取结束返回-1  这里使用int接收
                if (ret == -1) {                 // (需要-1来确定是否读取完)
                    break;
                }
 
                System.out.printf("%s\n",ret);
            }
        }
//        inputStream.close();  //有打开就要有关闭操作~  如果不关闭,文件描述符如果超出上限就会发生严重BUG
    }
}

2.2 OutputStream 

为字节流写操作~
方法:
wirte(int b):写入要给字节的数据
write(byte[] b) :将字节数组b的所有内容全部写入
write(byte[] b, int off, int len):将b这个数组从off开始写,一共写入len个
flush() :刷新操作,将数据刷入到设备中
写入abc~ 

import java.io.*;

public class Demo6 {
    public static void main(String[] args) {
        try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){
            outputStream.write(97);   //一个字节一个字节的写入文件
            outputStream.write(98);
            outputStream.write(99);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.3.字符流读取(Reader)

使用方法和上面的方法一样~ 这里就直接写入代码~

import java.io.*;

public class Demo6 {
    public static void main(String[] args) {
        try(Reader reader=new FileReader("d:/test.txt")){  //try可以自动close
            while (true){
                int ret=reader.read();
                if(ret==-1){
                    break;
                }
                char ch=(char)ret;
                System.out.println(ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码基本是一样的,就是读取的单位变成了一次读取一个字符~

2.4 字符流写(Writer)

import java.io.*;

public class Demo6 {
        public static void main(String[] args) {
            try(Writer writer=new FileWriter("d:/text.txt")){
                writer.write("abdc");  //字符流输入
                writer.write("efg");
                writer.write("hig");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
}

 这样就可以实现字符流写入了~。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值