共计 4432 个字符,预计需要花费 12 分钟才能阅读完成。
前言
在咱们日常的开发中,文件操作是一个十分重要的主题。文件读写、文件复制、任意地位读写、缓存等技巧都是咱们必须要把握的。在这篇文章中,我将给你们介绍 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(); | |
} | |
} | |
} |
结尾
如果感觉对你有帮忙,能够多多评论,多多点赞哦,也能够到我的主页看看,说不定有你喜爱的文章,也能够顺手点个关注哦,谢谢。
我是不一样的科技宅,每天提高一点点,体验不一样的生存。咱们下期见!
正文完