Java日常开发中读写TXT文本举例详解
前言
在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。
一、读取 TXT 文本
1.1 使用BufferedReader读取
- 原理:BufferedReader是 Java 中用于高效读取字符流的类。它可以从一个字符输入流(如FileReader)读取文本,并提供缓冲功能,减少对底层资源的频繁访问,提高读取效率。
步骤示例:
1.首先,需要导入相关的包java.io.BufferedReader和java.io.FileReader。
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;
2.然后,使用try - catch块来处理可能出现的IOException。在try块中,创建FileReader对象来关联要读取的文本文件,再将其传递给BufferedReader对象。
public class ReadTxtFile { public static void main(String[] args) { try { BufferedReader reader = new BufferedReader(new FileReader("example.txt")); String line; while ((line = reader.readLine())!= null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
在上述代码中,reader.readLine()方法用于逐行读取文本内容,当读取到文件末尾时返回null。这样就可以通过循环将文件内容逐行打印出来。最后,要记得关闭BufferedReader,释放资源。
1.2 使用Scanner读取
原理:Scanner类提供了一种简单的方式来解析各种基本数据类型和字符串。当用于读取文本文件时,它可以根据指定的分隔符(默认是空格)来解析文本内容。
步骤示例:
导入java.util.Scanner和java.io.File包。
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException;
同样在try - catch块中进行操作。创建Scanner对象,将通过File对象打开的文本文件作为参数传递给它。
public class ReadTxtFileWithScanner { public static void main(String[] args) { try { Scanner scanner = new Scanner(new File("example.txt")); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
这里scanner.hasNextLine()用于判断是否还有下一行内容,scanner.nextLine()用于读取下一行内容并返回。最后关闭Scanner对象。
字节流读取(FileInputStream)后转换为字符流(适用于读取非文本编码可能有问题的情况)
原理:FileInputStream用于以字节流的方式读取文件内容。如果要将字节流转换为字符流来处理文本内容,可以将其包装在InputStreamReader中,再使用BufferedReader进行缓冲读取,这样可以处理一些特殊编码的文本文件。
步骤示例:
导入java.io.FileInputStream、java.io.InputStreamReader和java.io.BufferedReader包。
import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException;
在try - catch块中,首先创建FileInputStream对象,然后将其传递给InputStreamReader,再传递给BufferedReader进行读取。
public class ReadTxtFileWithByteStream { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("example.txt"); InputStreamReader isr = new InputStreamReader(fis, "UTF - 8"); BufferedReader reader = new BufferedReader(isr); String line; while ((line = reader.readLine())!= null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
在上述代码中,InputStreamReader构造函数中的第二个参数指定了文件的编码方式(这里是UTF - 8),可以根据实际情况进行修改。
二、写入 TXT 文本
2.1 使用BufferedWriter写入
原理:BufferedWriter是用于将文本写入字符输出流的类,它提供缓冲功能,减少物理写入操作的次数,提高写入效率。
步骤示例:导入java.io.BufferedWriter和java.io.FileWriter包。
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException;
在try - catch块中,创建FileWriter对象来关联要写入的文本文件,再将其传递给BufferedWriter对象。使用write方法写入内容,最后通过flush方法将缓冲区内容写入文件,并关闭BufferedWriter。
public class WriteTxtFile { public static void main(String[] args) { try { BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")); writer.write("这是要写入文本文件的内容"); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
2.2 使用PrintWriter写入
原理:PrintWriter提供了方便的打印方法来写入各种数据类型(如整数、浮点数、字符串等)到文本输出流。它可以自动将数据转换为字符串并写入文件。
步骤示例:
导入java.io.PrintWriter和java.io.File包。
import java.io.PrintWriter; import java.io.File; import java.io.FileNotFoundException;
在try - catch块中,创建PrintWriter对象,将通过File对象打开的文本文件作为参数传递给它。使用println或print方法写入内容,最后关闭PrintWriter。
public class WriteTxtFileWithPrintWriter { public static void main(String[] args) { try { PrintWriter writer = new PrintWriter(new File("output.txt")); writer.println("这是第一行内容"); writer.print("这是第二行内容"); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
2.3 字节流写入(FileOutputStream)后转换为字符流(适用于特殊编码写入等情况)
原理:FileOutputStream用于以字节流的方式将数据写入文件。如果要将字节流转换为字符流来写入文本内容,可以将其包装在OutputStreamReader中,再使用BufferedWriter进行缓冲写入,这种方式在处理特殊编码文件写入时比较有用。
步骤示例:
导入java.io.FileOutputStream、java.io.OutputStreamReader和java.io.BufferedWriter包。
import java.io.FileOutputStream; import java.io.OutputStreamReader; import java.io.BufferedWriter; import java.io.IOException;
在try - catch块中,首先创建FileOutputStream对象,然后将其传递给OutputStreamReader,再传递给BufferedWriter进行写入。
public class WriteTxtFileWithByteStream { public static void main(String[] args) { try { FileOutputStream fos = new FileOutputStream("output.txt"); OutputStreamReader osw = new OutputStreamReader(fos, "UTF - 8"); BufferedWriter writer = new BufferedWriter(osw); writer.write("这是要写入的内容"); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
同样,OutputStreamReader构造函数中的第二个参数指定了文件的编码方式。
三、注意事项
3.1 文件路径问题
读取和写入文件时,文件路径是一个关键因素。相对路径是相对于当前工作目录而言的。在 Java 中,可以通过System.getProperty(“user.dir”)获取当前工作目录。如果文件位于项目的特定目录下,要确保路径的正确性。
例如,如果example.txt文件位于项目的resources目录下,在 Eclipse 等 IDE 中,相对路径可能需要根据项目的结构进行调整,可能是src/main/resources/example.txt等。
3.2 编码问题
文本文件有多种编码方式,如 UTF - 8、GBK 等。在读取和写入时,要确保编码方式的一致性。如果编码方式不一致,可能会导致乱码问题。
例如,在读取一个使用 UTF - 8 编码的文件时,应该使用InputStreamReader或BufferedReader并指定 UTF - 8 编码来正确读取内容。同样,在写入文件时,也要根据需要选择合适的编码方式。
3.3 资源释放问题
无论是读取还是写入文件,都要及时关闭打开的流(如BufferedReader、BufferedWriter等),以释放系统资源。如果不关闭流,可能会导致资源泄漏,特别是在频繁读取或写入文件的情况下。
可以使用try - with - resources语句来自动关闭资源,从 Java 7 开始支持这种方式。例如,在读取文件时:
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = reader.readLine())!= null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
在try - with - resources语句中,当代码块执行结束后,会自动调用资源的close方法,这样可以更加方便和安全地管理资源。
结束语
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
到此这篇关于Java日常开发中读写TXT文本详解的文章就介绍到这了,更多相关JAVA读写TXT文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
BeanUtils.copyProperties()属性名相同但是类型不同问题
这篇文章主要介绍了BeanUtils.copyProperties()属性名相同但是类型不同问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-09-09SpringMVC @RequestBody自动转json Http415错误的解决
这篇文章主要介绍了SpringMVC @RequestBody自动转json Http415错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04spring cloud gateway使用 uri: lb://方式配置时,服务名的特殊要求
这篇文章主要介绍了spring cloud gateway使用 uri: lb://方式配置时,服务名的特殊要求,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12IDEA自动生成TestNG的testng.xml的插件方法
这篇文章主要介绍了IDEA自动生成TestNG的testng.xml的插件方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04
最新评论