JAVA那些事(九)文件操作

在程序中要对磁盘文件或目录进行操作,首先要对文件或目录建立连接,为此Java提供了File类File类也位于java.io包中,但不是流类,而是专门用来管理磁盘文件和目录

一个File类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,其方法可以完成对文件或目录的常用管理操作,如创建、删除等

建立File对象 

File类提供了3个不同的构造方法

File(String path):String类参数path指定所建对象对应的磁盘文件名或目录名及其路径名。

File(String path, String name):此构造方法中的参数path表示文件或目录的路径,参数name表示文件或目录名

File(File dir, String name):此构造方法中的参数dir表示一个磁盘目录对应的File对象,参数name表示文件名或目录名

 

File类代表了文件或目录路径名,并提供了与系统相关的文件信息查询、创建、删除、重命名等功能。

File类可以代表文件或目录,如:

File x=new File(“D:\\Data");

File y= new File("D:\\Data\\command.txt");

或者:File y = new File(x, “command.txt")

File file = new File("path/to/file.txt");
file.createNewFile(); // 创建新文件
boolean exists = file.exists(); // 检查文件是否存在
file.delete(); // 删除文件
file.renameTo(new File("newPath")); // 重命名文件

字节流

字节流(Byte Stream)是用于处理原始字节数据的一种I/O流。它包括两种类型:输入流(InputStream)和输出流(OutputStream),分别用来从源读取数据以及向目标写入数据。

输入字节流(InputStream)

java.io.InputStream 是所有输入字节流的超类 

  • 常用的子类有:
    • FileInputStream:从文件中读取字节数据。
    • ByteArrayInputStream:从内存中的字节数组读取数据。
    • BufferedInputStream:提供缓冲功能,提高读取效率,它包装在其他InputStream之上。
      FileInputStream fis = new FileInputStream("file.txt");
      byte[] buffer = new byte[1024];
      int bytesRead = fis.read(buffer); // 从文件读取字节到缓冲区
      fis.close();

输出字节流(OutputStream)

java.io.OutputStream 是所有输出字节流的超类。

  • 常用的子类有:
    • FileOutputStream:将数据写入到文件。
    • ByteArrayOutputStream:将数据写入内存中的字节数组。
    • BufferedOutputStream:同样提供缓冲功能,提高写入效率,包装在其他OutputStream之上。
      FileOutputStream fos = new FileOutputStream("file.txt");
      fos.write("Hello, World!".getBytes()); // 将字符串转换为字节并写入文件
      fos.close();

字节流操作方法

  • 字节流的基本操作是对单个字节或一组字节的读取和写入。
  • 输入流常用的方法有:
    • int read():读取一个字节并返回,如果到达流末尾则返回-1。
    • int read(byte[] b):读取一定数量的字节,并存储到提供的字节数组中,返回实际读取的字节数。
  • 输出流常用的方法有:
    • void write(int b):写入一个字节。
    • void write(byte[] b) 或 void write(byte[] b, int off, int len):写入字节数组的部分或全部内容。

注意事项

  • 字节流主要用于处理二进制数据,如图片、音频、视频等非文本文件,也可以用于处理文本文件,但需要开发者自己处理字符编码问题。
  • 使用字节流时,务必记得关闭流资源以释放系统资源,可以使用 try-with-resources 语句自动关闭,或者在 finally 块中手动调用 close() 方法。

字符流 

字符流(Character Stream)是用于处理字符数据的I/O流。与字节流不同,字符流是以16位Unicode编码格式进行读写操作,更便于处理文本文件和字符串等包含字符的数据。

字符输入流(Reader)

  • java.io.Reader 是所有字符输入流的超类。
  • 常用的子类有:
    • FileReader:从文件中读取字符数据。
    • BufferedReader:提供缓冲功能,提高读取效率,通常包装在其他Reader之上以减少系统调用次数。
    • InputStreamReader:将字节流转换为字符流,常用于结合字节输入流一起使用,处理不同的字符编码。
FileReader fr = new FileReader("file.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line); // 逐行读取并打印文本文件内容
}
br.close();

字符输出流(Writer)

java.io.Writer 是所有字符输出流的超类。

  • 常用的子类有:
    • FileWriter:将字符数据写入到文件。
    • PrintWriter:提供了方便的方法来写入各种类型的数据,并可以自动添加换行符等。
    • BufferedWriter:同样提供缓冲功能,提高写入效率,它包装在其他Writer之上。
    • OutputStreamWriter:将字符流转换为字节流,用于处理特定字符编码的输出。
FileWriter fw = new FileWriter("file.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Hello, World!"); // 写入文本
bw.newLine(); // 添加换行符
bw.close();

字符流操作方法

  • 字符流的基本操作是对单个字符、字符串或行的读取和写入。

  • Reader常用的方法有:

    • int read():读取一个字符并返回,如果到达流末尾则返回-1。
    • int read(char[] cbuf):读取一定数量的字符,并存储到提供的字符数组中,返回实际读取的字符数。
    • String readLine():读取一行文本并返回。
  • Writer常用的方法有:

    • void write(int c):写入一个字符。
    • void write(char[] cbuf) 或 void write(char[] cbuf, int off, int len):写入字符数组的部分或全部内容。
    • void write(String str) 或 void write(String str, int off, int len):写入字符串的部分或全部内容。

注意事项

  • 字符流适合处理文本数据,尤其是需要考虑字符集编码的场景。
  • 在打开和关闭流时,务必正确处理资源管理,避免内存泄漏和文件资源占用不释放的问题,可以使用 try-with-resources 结构自动关闭流资源。

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