java文件操作2

news/2024/11/23 8:09:22/

目录

  • 一、FileReader和FileWriter
  • 三、BufferedReader和BufferedWriter
  • 四、LineNumberReader
  • 五、InputStreamReader和OutputStreamWriter
  • 六、SequenceInputStream
  • 总结

一、FileReader和FileWriter

1.FileReader
首先来介绍一下FileReader类。FileReader类可用于读取字符流和文本文件。它提供了多个构造函数,其中最常用的是接受一个文件名或File对象作为参数的构造函数。在使用FileReader类时,需要注意一些异常情况,如文件不存在、文件无法读取等。为此,我们可以使用try-catch块来捕获这些异常,并添加适当的处理逻辑。

简单使用:

public class Demo9_FileReader {public static void main(String[] args) throws IOException {//创建FileWriter对象FileReader fr = new FileReader("src/com/IOSteam/file/a.txt");int b;while ((b=fr.read())!=-1){//通过项目码表一次读取一个字符System.out.print((char)b);}fr.close();}
}

创建了FileReader对象后,就可以使用它来读取文件内容了。FileReader类提供了多个读取字符流的方法,如read()、read(char[])和read(char[], int, int)等。这些方法都会返回读取到的字符数,如果已经到达文件末尾,则返回-1。


2.FileWriter
FileWriter类用于向文本文件中写入数据。它也提供了多个构造函数,其中最常用的是接受一个文件名或File对象作为参数的构造函数。在使用FileWriter类时,同样需要注意异常情况,如文件无法写入、磁盘空间不足等。因此,建议在使用FileWriter类时添加try-catch块来捕获异常并进行相应的处理。

简单使用:

public class Demo10_FileWriter {public static void main(String[] args) throws IOException {//创建FileWriter对象FileWriter fw = new FileWriter("src/com/IOSteam/file/b.txt");fw.write("大家好我是xxx");fw.close();}

下面我们利用FileWriter和FileReader实现一个简单的文件拷贝:

public class Demo11_CharStreamCopy {public static void main(String[] args) throws IOException {FileReader fr= new FileReader("src/com/IOSteam/file/a.txt");FileWriter fw = new FileWriter("src/com/IOSteam/file/b.txt");int b;char[] arr = new char[1024];while ((b=fr.read(arr))!=-1){System.out.println(b);
//fw.write(arr, 0, b) 表示将 arr 数组中从下标为 0 开始的前 b 个元素写入到输出流中。其中,arr 是要写入的字符数组,0 是起始位置,b 是要写入的字符数量。fw.write(arr,0,b);}fr.close();fw.close();}
}

三、BufferedReader和BufferedWriter

BufferedReader和BufferedWriter是Java语言中常用的字符缓冲流类,它们分别用于高效地读取和写入文本数据。


1.BufferedReader类的使用
创建BufferedReader对象
为了使用BufferedReader类读取文件,我们需要先创建一个FileReader对象,然后将其作为参数传递给BufferedReader构造函数。

FileReader fileReader = new FileReader("filename.txt");
BufferedReader reader = new BufferedReader(fileReader);

读取文件内容
创建了BufferedReader对象后,就可以使用它来读取文件内容了。BufferedReader类提供了多个读取字符流的方法,如read()、read(char[])和readLine()等。这些方法都会返回读取到的字符数或字符串,如果已经到达文件末尾,则返回null。
下面是一个简单的例子,演示如何使用BufferedReader类读取文本文件的内容:

try (BufferedReader reader = new BufferedReader(new FileReader("filename.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

2.BufferedWriter类的使用
与BufferedReader类不同,要使用BufferedWriter类写入文件时,我们只需创建一个FileWriter对象,然后将其作为参数传递给BufferedWriter构造函数即可

FileWriter fileWriter = new FileWriter("filename.txt");
BufferedWriter writer = new BufferedWriter(fileWriter);

创建了BufferedWriter对象后,就可以使用它来写入文件内容了。BufferedWriter类提供了多个写入字符流的方法,如write(int)、write(char[])和write(String)等。这些方法都会将字符写入输出流。
写入文件内容:

try (BufferedWriter writer = new BufferedWriter(new FileWriter("filename.txt"))) {String data = "Hello, World!";writer.write(data);
} catch (IOException e) {e.printStackTrace();
}

下面用文件拷贝例子简单使用一下这两个对象:

/*带缓冲区的流中的方法
* readLine()读取一个文本行,遇到\n,\r就结束
* newLine()写入一个换行
* */
public class Demo12_BufferReadWriter {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("src/com/IOSteam/file/a.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("src/com/IOSteam/file/b.txt"));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();//写出回车换行符}br.close();bw.close();}public static void test() throws IOException{BufferedReader br = new BufferedReader(new FileReader("src/com/IOSteam/file/a.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("src/com/IOSteam/file/b.txt"));int b;while ((b=br.read())!=-1){bw.write((char)b);}br.close();bw.close();}
}

四、LineNumberReader

2023/5/23 09:34:32

LineNumberReader是Java中的一个类,它可以在读取文本文件时,自动记录每行的行号。使用LineNumberReader可以方便地获取当前读取到文件的哪一行。

以下是一个示例代码,展示如何使用LineNumberReader来读取一个文本文件,同时输出每行的行号和文本内容:

import java.io.*;public class ReadFileWithLineNumbers {public static void main(String[] args) {try {File file = new File("test.txt");FileReader reader = new FileReader(file);LineNumberReader lineNumberReader = new LineNumberReader(reader);String line;while ((line = lineNumberReader.readLine()) != null) {int lineNumber = lineNumberReader.getLineNumber();System.out.println("Line " + lineNumber + ": " + line);}lineNumberReader.close();reader.close();} catch (IOException e) {e.printStackTrace();}}
}

五、InputStreamReader和OutputStreamWriter

InputStreamReader和OutputStreamWriter是Java中的两个类,它们可以用于将字节流转换为字符流,或者将字符流转换为字节流。这两个类通常用于处理文本文件,或者网络传输中的数据。

下面是一个简单的示例,演示如何使用InputStreamReader读取一个文本文件,并使用OutputStreamWriter将其写入到另一个文件中:

import java.io.*;public class CopyFile {public static void main(String[] args) {try {File inputFile = new File("input.txt");FileInputStream inputStream = new FileInputStream(inputFile);InputStreamReader reader = new InputStreamReader(inputStream);File outputFile = new File("output.txt");FileOutputStream outputStream = new FileOutputStream(outputFile);OutputStreamWriter writer = new OutputStreamWriter(outputStream);int data;while ((data = reader.read()) != -1) {char character = (char) data;writer.write(character);}reader.close();writer.close();inputStream.close();outputStream.close();System.out.println("File copied successfully.");} catch (IOException e) {e.printStackTrace();}}
}

六、SequenceInputStream

SequenceInputStream是Java IO中的一个类,它可以将多个InputStream对象串联在一起,形成一个新的InputStream对象。这样就可以从这个新的InputStream对象中连续读取多个文件或者数据流的内容。

下面是一个简单的示例,演示如何使用SequenceInputStream读取两个文本文件的内容,并输出到控制台:

import java.io.*;public class MergeFiles {public static void main(String[] args) {try {File file1 = new File("file1.txt");FileInputStream inputStream1 = new FileInputStream(file1);File file2 = new File("file2.txt");FileInputStream inputStream2 = new FileInputStream(file2);SequenceInputStream sequenceInputStream = new SequenceInputStream(inputStream1, inputStream2);InputStreamReader reader = new InputStreamReader(sequenceInputStream);int data;while ((data = reader.read()) != -1) {char character = (char) data;System.out.print(character);}reader.close();sequenceInputStream.close();inputStream1.close();inputStream2.close();System.out.println("Files merged successfully.");} catch (IOException e) {e.printStackTrace();}}
}

在上面的代码中,我们首先创建了两个FileInputStream对象分别用于读取"file1.txt"和"file2.txt"两个文件的内容。然后将这两个输入流对象作为参数,创建一个SequenceInputStream对象。

接着我们创建了一个InputStreamReader对象,将SequenceInputStream对象作为参数传递给它,这样我们就可以从这个新的InputStream对象中连续读取两个文件的内容。

在while循环中,我们逐个字符地读取InputStreamReader对象中的数据,并将其输出到控制台。最后,在程序结束时关闭所有打开的资源。

需要注意的是,SequenceInputStream会按照它们被传入的顺序,依次从每个输入流中读取数据。如果一个输入流读取完毕,将自动切换到下一个输入流。此外,SequenceInputStream本身并不缓存任何数据,因此在使用时要保证每个输入流都已经准备好了数据。

总结

除了基本的读取和写入功能外,FileReader和FileWriter还支持其他许多操作,例如读取行、读取指定长度的字符、追加数据等。在使用这些功能时,需要详细阅读API文档并了解其用法。

总之,FileReader和FileWriter是Java语言中非常实用的文件操作类,它们可以帮助我们轻松地读取和写入文本文件。在使用它们时,需要注意异常情况,并适当处理这些异常。此外,还可以利用它们提供的其他函数来实现更多功能。


http://www.ppmy.cn/news/119427.html

相关文章

如何回馈 Elastic 社区

作者:Ully Sampaio 在 Elastic 社区中拥有前排座位最美妙的事情之一就是见证人们互相帮助。 从讨论和 Elastic Community Slack 工作区到 Elastic YouTube 官方频道,无论你走到哪里,你都会看到 Elasticsearch 专家和初学者分享他们的知识。 这…

CIA-SSD的编译

项目:GitHub - Vegeta2020/CIA-SSD: CIA-SSD: Confident IoU-Aware Single Stage Object Detector From Point Cloud, AAAI 2021. 问题1:No CUDA runtime is found, using CUDA_HOME pytorch自带的cuda满足不了c/cuda拓展的编译,需要另外下…

u2 接口 服务器硬盘,U2和M2硬盘接口区别介绍 固态硬盘接口优缺点对比分析

U2和M2硬盘接口区别介绍,固态硬盘接口优缺点对比分析,大家都知道固态硬盘SATA3.0接口是目前主流,但是M.2和U.2两种接口。那么U.2和M.2接口发展很快。下面小编为大家介绍下M.2和U.2接口介绍吧。 M.2接口 M.2接口能够同时支持PCI-E通道以及SATA…

AOC U27U2S评测

4K往往是高端显示器的代名词,而AOC U27U2S便是一款由内而外均散发着高端、奢华气息的显示器产品。它极具时尚、现代风格的外观设计,荣获德国红点设计大奖。放在家中、办公桌上,都是一件赏心悦目的艺术品。 AOC U27U2S背面具有十分浓厚的艺术气…

语音识别(ASR)论文优选:WeNet之U2++

声明:平时看些文章做些笔记分享出来,文章中难免存在错误的地方,还望大家海涵。平时搜集一些资料,方便查阅学习:http://yqli.tech/page/speech.html。如转载,请标明出处。欢迎关注微信公众号:低调…

S函数模板

本文为simulink中s函数模板的翻译版。可直接拷入m文件编辑。 function [sys,x0,str,ts,simStateCompliance] sfuntmpl(t,x,u,flag) %[sys,x0,str,ts,simStateCompliance] sfuntmpl(t,x,u,flag,p1,…pn) % flag result 描述 % —– —— ————————————…

Arduino开发PAJ7620U2手势识别传感器

介绍 中午逛淘宝的时候看到这个传感器,发现它可以识别9种不同方向的手势,上、下左、右、前、后、顺时针、逆时针、摇摆,看起来很棒棒,就买了一个,价格在20-40元不等(销量靠前的店比较贵)。 目…

(2021,FastGAN)用于高保真 few-shot 图像合成的更快、更稳定的 GAN 训练

Towards faster and stabilized gan training for high-fidelity few-shot image synthesis 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 跳跃层通道激励 3.2 自监督判别器 4. 实验 4.1 图像合成性能 4.2 更多分析与应用 5. 结论 参…