Java-io(输入/输出)

文章目录

  • 绪论
  • 输入流
  • 输出流
  • File类
  • 文件输入 / 输出流
    • 字节输入输出流
    • 字符输入输出流
  • End

绪论

首先如果我们在Java编写的一个程序中获得了想要的某种结果,那么在程序结束后,这个结果还存在嘛?不存在的,因为在Java程序运行时,程序会被加载到内存中在内存中运行,但是,在程序结束后虚拟机会自动释放内存空间,中间程序得到得结果也会消失,但是我们如果想保存这个结果呢?之前因为我们学习过使用JDBC技术链接数据库,这也能达到目的,但是对于某些长文本数据存储到数据库中就有些不便,那么这次我们学习Java的io技术可以将程序结果存储到本地的文件中,随取随存。



知识架构

Java-io(输入/输出)_第1张图片



输入流


Java中的输入流是一种用于从外部设备读取数据的机制。它提供了一组类和接口,用于从不同的数据源读取数据,如文件、网络连接、控制台等。

Java中的输入流主要分为以下几种类型:

  1. 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括InputStream和OutputStream。
  2. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Reader和Writer。
  3. 缓冲流(Buffered Stream):缓冲流可以提高读写效率,减少对外部设备的访问次数。常见的缓冲流类包括BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。
  4. 数据流(Data Stream):数据流用于读写基本数据类型,如int、float、double等。常见的数据流类包括DataInputStream和DataOutputStream。
  5. 转换流(Conversion Stream):转换流可以将一种类型的流转换为另一种类型的流,例如InputStreamReader可以将字节流转换为字符流。

常规常见输入流步骤:

  1. 创建输入流对象:根据需要创建相应的输入流对象,例如使用FileInputStream类创建字节流对象读取文件,使用BufferedReader类创建字符流对象读取文本文件。
  2. 打开连接:打开与外部设备的连接,例如使用open()方法打开文件。
  3. 读取数据:通过输入流对象读取数据。在读取数据时,可以使用输入流提供的方法逐个读取字节或字符,也可以使用输入流的读取方法一次读取多个字节或字符。
  4. 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。


输出流


Java中的输出流是一种用于将数据写入到外部设备的机制。它提供了一组类和接口,用于将数据从Java程序输出到不同的目标,如文件、网络连接、控制台等。


Java中的输出流主要分为以下几种类型:

  1. 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括OutputStream和Writer。
  2. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  3. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  4. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  5. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。


使用输出流进行数据写入的一般步骤如下:

  1. 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
  2. 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
  3. 写入数据:通过输出流对象将数据写入到外部设备。在写入数据时,可以使用输出流提供的方法逐个写入字节或字符,也可以使用输出流的写入方法一次写入多个字节或字符。
  4. 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。

需要注意的是: 在使用输入输出流进行数据读取时,应该遵循“打开-使用-关闭”的原则,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。



File类


Java中的File类是用于文件和目录操作的类。它提供了一种在Java程序中创建、读取、写入和删除文件的方式。
File类主要用于对文件增删查的操作,没有用于对文件内部数据的读写功能。

File类的主要功能包括:

  1. 创建文件或目录:可以使用File类的构造函数创建一个新的文件或目录。例如,File file = new File(“path/to/file.txt”)将创建一个名为file.txt的文件。如果文件已经存在,则不会创建新文件。
  2. 判断文件或目录是否存在:可以使用File类的exists()方法来判断文件或目录是否存在。如果文件或目录存在,则返回true,否则返回false。
  3. 获取文件或目录的属性:可以使用File类的各种方法获取文件或目录的属性,如文件名、文件大小、文件创建时间等。例如,getName()方法返回文件或目录的名称,length()方法返回文件的大小(以字节为单位),lastModified()方法返回文件最后修改的时间。
  4. 删除文件或目录:可以使用File类的delete()方法删除文件或目录。如果删除成功,则返回true,否则返回false。需要注意的是,如果文件或目录不存在,或者由于其他原因无法删除,则删除操作可能会失败。
  5. 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
  6. 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
  7. 获取文件或目录的名称:可以使用File类的getName()方法获取文件或目录的名称。例如,如果文件位于C:\Users\username\Documents\file.txt,则文件名将是file.txt。
  8. 创建文件夹:可以使用 mkdir() 或 mkdirs() 方法创建文件夹。 mkdir() 只创建最后一个不存在的父目录,而 mkdirs() 会创建所有不存在的父目录。
  9. 判断是否是文件:可以使用 isFile() 方法判断路径是否对应一个普通文件。如果是,返回 true;否则返回 false。
  10. 判断是否是目录:可以使用 isDirectory() 方法判断路径是否对应一个目录。如果是,返回 true;否则返回 false。
  11. 其他操作:File类还提供了一些其他的方法,如listFiles()方法返回一个包含指定目录下所有文件的数组,list()方法返回一个包含指定目录下所有文件和子目录的字符串数组等。

示例:输出某一文件夹中所有的文件信息(包括子文件夹):
需要注意的是,如果某个文件夹需要权限才能访问,那么使用File类的listFiles方法返回的是null,为了代码不出现错误,我们需要对此进行判断。

public static void main(String[] args) {
        out_data(new File("E:\\简历"));
    }
public static void out_data(File f){
    //获取文件名或文件夹名
    System.out.println("--------------"+f.getName()+"------------------");
    File[] files = f.listFiles();
    if(files == null) { return; }
    for(File ft : files){
        // 判断是否文件夹,是则继续往下递归
        if(ft.isDirectory()) { out_data(ft); }
        // 不是文件夹,则输出信息
        else{ System.out.println(ft.getName()); }
    }
    System.out.println("--------------"+f.getName()+"------------------");
}

运行结果
Java-io(输入/输出)_第2张图片



文件输入 / 输出流


Java中的文件输入输出流是用于读取和写入文件的类。Java提供了两种类型的文件输入输出流:字节输入输出流和字符输入输出流。
二者的区别在于,字节流是以字节为单位进行读取,随读随取,可以读取除文本外任意文件;字符流也是以字节进行读取,但是不同点在于它遇到中文时会按中文的编码方式进行读取,而带有缓冲区机制。

字节输入输出流

字节输入输出流以字节为单位进行读写操作。Java中提供了以下几种字节输入输出流类:

  1. FileInputStream:用于从文件中读取字节数据。
  2. FileOutputStream:用于向文件中写入字节数据。
  3. BufferedInputStream:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
  4. BufferedOutputStream:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
  5. DataInputStream:用于从文件中读取基本数据类型,如int、float、double等。
  6. DataOutputStream:用于向文件中写入基本数据类型,如int、float、double等。


使用字节输入输出流进行文件读写的一般步骤如下:

  1. 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileInputStream类创建文件输入流对象,使用FileOutputStream类创建文件输出流对象。
  2. 打开连接:使用open()方法打开文件,建立与文件的连接。
  3. 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字节数据,使用write()方法向输出流中写入字节数据。
  4. 关闭连接:使用close()方法关闭文件,断开与文件的连接。


示例:读取文件

import java.io.FileInputStream;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileInputStream fileInputStream = new FileInputStream("path/to/file.txt")) {  
            int data;  
            while ((data = fileInputStream.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

示例:写入文件

import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileOutputStream fileOutputStream = new FileOutputStream("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileOutputStream.write(data.getBytes());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


字符输入输出流

字符输入输出流以字符为单位进行读写操作。

Java中提供了以下几种字符输入输出流类:

  • FileReader:用于从文件中读取字符数据。
  • FileWriter:用于向文件中写入字符数据。
  • BufferedReader:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
  • BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
  • BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。


使用字符输入输出流进行文件读写的一般步骤如下:

  • 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileReader类创建文件输入流对象,使用FileWriter类创建文件输出流对象。
  • 打开连接:使用open()方法打开文件,建立与文件的连接。
  • 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字符数据,使用write()方法向输出流中写入字符数据。
  • 关闭连接:使用close()方法关闭文件,断开与文件的连接。


示例:读取文件

import java.io.FileReader;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileReader fileReader = new FileReader("path/to/file.txt")) {  
            int data;  
            while ((data = fileReader.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


示例:写入文件

import java.io.FileWriter;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileWriter fileWriter = new FileWriter("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileWriter.write(data);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


End

需要注意的是,在进行io读取操作时,应该遵循“打开-使用-关闭”的原则,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。

你可能感兴趣的:(java,开发语言)