九.File与IO流

1.File类型

1.1File的简介

  File 类主要用于表示文件和目录的路径,能新建、删除、移动,重命名文件或文件夹,也能获取或者修改文件或文件夹的信息(如大小,修改时间等), 但File不能访问文件里的内容。如果需要访问文件里的内容,则需要使用输入/输出流。

1.2File常用的构造器

 1.File(String pathname):
         通过将指定字符串转换成抽象路径名来创建一个File实例

 2.File(File parent,String child)
         从父抽象路径名和子路径名字符串创建新的 File实例,
 3.File(String parent, String child)

        从父路径名字符串和子路径名字符串创建新的 File实例 

1.3File常用的方法

  • 检查文件或目录是否存在:通过 exists() 方法。

  • 创建新文件或目录:使用 createNewFile() 方法创建文件,mkdir() 方法创建单个目录,mkdirs() 方法创建多级目录。

  • 获取文件或目录的属性:如文件名(getName() )、路径(getPath() )、父目录路径(getParent() )、文件长度(length() )等。

  • 删除文件或目录:delete() 方法。

  • 列出目录中的文件和子目录:listFiles() 方法。

1.4文件的查询

     file.exist( )文件的查询

1.5文件的创建与删除

     file.creatnewfile( )

     file.delete( )

2.IO流类型 

2.1.IO流的简介

       在 Java 中,IO 流(输入/输出流)是用于处理数据输入和输出的一种机制。IO 流可以实现程序与外部数据源(如文件、网络连接、内存缓冲区等)之间的数据传输。输入流用于从数据源读取数据到程序中,而输出流用于将程序中的数据写入到外部目标。

2.2IO流的分类

  1. 按数据流向分:

    • 输入流(InputStream 和 Reader 及其子类):用于从数据源读取数据到程序中。
    • 输出流(OutputStream 和 Writer 及其子类):用于将程序中的数据写入到外部目标。
  2. 按处理数据的单位分:

    • 字节流:
      • 输入字节流:InputStream 是所有输入字节流的父类,常见的子类如 FileInputStream(用于从文件读取字节)、BufferedInputStream(提供缓冲功能的输入字节流)等。
      • 输出字节流:OutputStream 是所有输出字节流的父类,常见的子类如 FileOutputStream(用于向文件写入字节)、BufferedOutputStream(提供缓冲功能的输出字节流)等。
    • 字符流:
      • 输入字符流:Reader 是所有输入字符流的父类,常见的子类如 FileReader(用于从文件读取字符)、BufferedReader(提供缓冲功能的输入字符流)等。
      • 输出字符流:Writer 是所有输出字符流的父类,常见的子类如 FileWriter(用于向文件写入字符)、BufferedWriter(提供缓冲功能的输出字符流)等。

2.3字节流

2.3.1 字节流的输入与输出

        InputStream:是字节输入流的顶级父类,是抽象类。定义了基本的读取方法。操作本地文件的字节输出流,可以把程序中的数据写到本地文件中,

//创建对象
FileOutputStream fos = new FileOutputStream("D:\\dir1\\01.txt");

//写入一个字母

fos.wirter(97);

//一次性写入多个

byte[] bytes = {10,24,98,99,100};
fos.write(bytes);

//书写字符串
String str="asdasdasd";
byte[] bytes = str.getBytes();
fos.write(bytes);

//关闭字节输出流

fos.close();

        OutputStream:是字节输出流的顶级父类,也是抽象类,定义了基本的写出方法。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来

//创建对象
FileInputStream fis = new FileInputStream("D:\\dir1\\01.txt");

//读取一个数据
System.out.println(fis.read());
//for循环读取
for (int i = 0; i < fis.available(); i++) {
    System.out.print((char) fis.read());
}
//while循环读取
int b;
while ((b = fis.read()) != -1) {
    System.out.print((char) b);
}

//关闭字节输入流
fis.close();

2.3.2字节流的拷贝 

FileOutputStream fos = new FileOutputStream("D:\\dir1\\01.txt");

FileInputStream fis = new FileInputStream("D:\\dir2\\03.txt");
int b=-1;
while ((b = fis.read()) != -1) {
    fos.write(b);
}
fis.close();

2.4字符流

 在 Java 中,字符流(Reader 和 Writer 类及其子类)主要用于处理文本数据的输入和输出

字符流以字符为单位进行数据的读写操作,相较于字节流,它更适合处理人类可读的文本内容,例如文本文件、字符串等。

2.4.1字符流的输入

  Reader 类是输入字符流的抽象基类,常见的子类如 FileReader 用于从文件中读取字符数据。

 FileReader fr =new FileReader("D:/dir1/01.txt");
        int ch;
        while((ch=fr.read())!=-1){
            System.out.print((char)ch);
        }
        一次读取1024个字节,加快效率
        char[] buf = new char[1024];
        int len;
        while((len=fr.read(buf))!=-1){
            System.out.print(new String(buf,0,len));
        }
        fr.close();
    }
2.4.2字符流的输出

  Writer 类是输出字符流的抽象基类,常见的子类如 FileWriter 用于向文件中写入字符数据。

public static void main(String[] args) throws IOException {
    FileWriter fw = new FileWriter("D:/dir1/01.txt");
    fw.write("Hello World");
    fw.close();
}
2.4.3字符缓冲流

  BufferedReader 可以提供缓冲功能,提高读取效率,BufferedWriter 同样提供缓冲功能。

public static void main(String[] args) throws IOException {
    BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:/dir1/01.txt"));
    BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:/dir2/02.txt"));
    int b;
    while((b= bis.read())!=-1){
        bos.write(b);
    }
    bis.close();
    bos.close();
}

2.5 转换流

在 Java 中,转换流主要用于在字节流和字符流之间进行转换。

InputStreamReader 用于将字节输入流转换为字符输入流,OutputStreamWriter 用于将字符输出流转换为字节输出流。

try (InputStream inputStream = new FileInputStream("input.txt");
     InputStreamReader reader = new InputStreamReader(inputStream)) {
    int data;
    while ((data = reader.read())!= -1) {
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 将字符输出流转换为字节输出流
try (OutputStream outputStream = new FileOutputStream("output.txt");
     OutputStreamWriter writer = new OutputStreamWriter(outputStream)) {
    writer.write("Hello, Conversion Stream!");
} catch (IOException e) {
    e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值