Java文件操作必备技能,10个小技巧让你快速掌握!

1,763 阅读4分钟

前言

  在我们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中,我将给你们介绍 10 个实用的文件操作技巧。

  1. 使用 try-with-resources 语句处理文件 IO 流,确保在使用完毕后自动关闭流。
  2. 使用 java.nio.file.Files 类来读取、写入和操作文件。它提供了许多便利的方法,如 copy、move、delete、create 等。
  3. 使用 java.io.File 类操作文件和目录,如创建、删除、重命名、判断是否存在等。
  4. 使用 File.separator 来代替硬编码的文件路径分隔符,以保证在不同的操作系统上文件路径的正确性。
  5. 使用 FileInputStream 和 FileOutputStream 类来读写二进制文件,使用 BufferedReader 和 BufferedWriter 类来读写文本文件。
  6. 在读取大型文件时,使用 BufferedReader.readLine()方法逐行读取,而不是一次性读取整个文件到内存中。
  7. 使用 FileChannel 类进行文件的快速复制和传输,它可以在不使用缓冲区的情况下直接将数据从一个通道传输到另一个通道。
  8. 使用 FileReader 和 FileWriter 类读写文本文件时,指定字符编码方式,以避免出现乱码问题。
  9. 在处理大型文件时,使用 RandomAccessFile 类,可以实现对文件的任意位置读写操作。
  10. 对于频繁读取的文件,可以使用缓存技术,将文件数据缓存到内存中,以提高读取效率。可以使用 java.io.BufferedInputStream 和 java.io.BufferedOutputStream 类实现缓存操作。

示例

1. 使用 try-with-resources 语句处理文件 IO 流,确保在使用完毕后自动关闭流。

import java.io.*;

public class Example1 {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 使用 java.nio.file.Files 类来读取、写入和操作文件。它提供了许多便利的方法,如 copy、move、delete、create 等。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;

public class Example2 {
    public static void main(String[] args) {
        Path source = Paths.get("file.txt");
        Path target = Paths.get("file_copy.txt");
        try {
            Files.copy(source, target);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 使用 java.io.File 类操作文件和目录,如创建、删除、重命名、判断是否存在等。

import java.io.File;

public class Example3 {
    public static void main(String[] args) {
        File file = new File("file.txt");
        if (file.exists()) {
            System.out.println("File exists!");
        } else {
            System.out.println("File does not exist.");
        }
    }
}

4. 使用 File.separator 来代替硬编码的文件路径分隔符,以保证在不同的操作系统上文件路径的正确性。

import java.io.File;

public class Example4 {
    public static void main(String[] args) {
        String path = "C:" + File.separator + "path" + File.separator + "file.txt";
        File file = new File(path);
        System.out.println(file.getAbsolutePath());
    }
}

5. 使用 FileInputStream 和 FileOutputStream 类来读写二进制文件,使用 BufferedReader 和 BufferedWriter 类来读写文本文件。

import java.io.*;

public class Example5 {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("file.bin");
             FileOutputStream fos = new FileOutputStream("file_copy.bin");
             BufferedInputStream bis = new BufferedInputStream(fis);
             BufferedOutputStream bos = new BufferedOutputStream(fos)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, length);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 在读取大型文件时,使用 BufferedReader.readLine()方法逐行读取,而不是一次性读取整个文件到内存中。

import java.io.*;

public class Example6 {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

7. 使用 FileChannel 类进行文件的快速复制和传输,它可以在不使用缓冲区的情况下直接将数据从一个通道传输到另一个通道。

import java.io.*;
import java.nio.channels.FileChannel;

public class Example7 {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("file.txt");
             FileOutputStream fos = new FileOutputStream("file_copy.txt")) {
            FileChannel inChannel = fis.getChannel();
            FileChannel outChannel = fos.getChannel();
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

8. 使用 FileReader 和 FileWriter 类读写文本文件时,指定字符编码方式,以避免出现乱码问题。

import java.io.*;

public class Example8 {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"));
             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file_copy.txt"), "UTF-8"))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

9. 在处理大型文件时,使用 RandomAccessFile 类,可以实现对文件的任意位置读写操作。

import java.io.*;

public class Example9 {
    public static void main(String[] args) {
        try (RandomAccessFile raf = new RandomAccessFile("file.txt", "rw")) {
            raf.seek(raf.length());
            raf.writeBytes("This is a new line.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

10. 对于频繁读取的文件,可以使用缓存技术,将文件数据缓存到内存中,以提高读取效率。可以使用 java.io.BufferedInputStream 和 java.io.BufferedOutputStream 类实现缓存操作。

import java.io.*;

public class Example10 {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("file.txt");
             BufferedInputStream bis = new BufferedInputStream(fis)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = bis.read(buffer)) != -1) {
                // process the data
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!