前语
在咱们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件仿制、恣意方位读写、缓存等技巧都是咱们必须要掌握的。在这篇文章中,我将给你们介绍 10 个实用的文件操作技巧。
- 运用 try-with-resources 句子处理文件 IO 流,确保在运用结束后自动封闭流。
- 运用 java.nio.file.Files 类来读取、写入和操作文件。它供给了许多便当的办法,如 copy、move、delete、create 等。
- 运用 java.io.File 类操作文件和目录,如创立、删去、重命名、判别是否存在等。
- 运用 File.separator 来替代硬编码的文件途径分隔符,以确保在不同的操作系统上文件途径的正确性。
- 运用 FileInputStream 和 FileOutputStream 类来读写二进制文件,运用 BufferedReader 和 BufferedWriter 类来读写文本文件。
- 在读取大型文件时,运用 BufferedReader.readLine()办法逐行读取,而不是一次性读取整个文件到内存中。
- 运用 FileChannel 类进行文件的快速仿制和传输,它能够在不运用缓冲区的情况下直接将数据从一个通道传输到另一个通道。
- 运用 FileReader 和 FileWriter 类读写文本文件时,指定字符编码办法,以防止出现乱码问题。
- 在处理大型文件时,运用 RandomAccessFile 类,能够完成对文件的恣意方位读写操作。
- 关于频频读取的文件,能够运用缓存技能,将文件数据缓存到内存中,以提高读取功率。能够运用 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();
}
}
}
结束
假如觉得对你有帮助,能够多多评论,多多点赞哦,也能够到我的主页看看,说不定有你喜爱的文章,也能够随手点个重视哦,谢谢。
我是不一样的科技宅,每天进步一点点,体会不一样的生活。咱们下期见!