`
schy_hqh
  • 浏览: 551819 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(IO)字符文件读写操作---FileReader&FileWriter

 
阅读更多

 

文本文件都是字符数据,因此使用字符流进行操作。

可以通过缓冲区来提高对文件的读写效率。

 

读写文本文件

 

 

package com.gc.stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
	public static void main(String[] args) {
		
		testFileWriter();
		
		testFileReader();
		
		testFileReaderWithBuffer();
	}
	
        //手动设置缓冲区来提高效率
	private static void testFileReaderWithBuffer() {
		FileReader fr = null;
		try {
			fr = new FileReader("temp\\text.txt");
			
			//字符缓冲区
			char[] cbuf = new char[1024];
			
			//记录每次读取到cbuf缓冲区中的字符个数
			int len = 0;
			
			//read(cbuf),一次读取cbuf.length个字符,如果数组满,则阻塞
			//阻塞后,取出数组中的字符
			//再次读取,重新存入数组,从0角标开始覆盖之前的数据
			//最后读取到文件末尾,返回-1,循环结束
			while((len=fr.read(cbuf))!=-1) {
				//从缓冲区中取出本次所读取的字符
				System.out.print(new String(cbuf, 0, len));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fr!=null)
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
		}
	}

	/**
	 * 使用FileReader读取文件中的文本数据,没有使用缓冲区,一次读1个字符就阻塞,效率低!
	 */
	private static void testFileReader() {
		FileReader fr = null;
		try {
			fr = new FileReader("temp\\text.txt");
			int ch = 0;
			//read()方法1次读1个字符,即2个字节。[1个中文字符占2个字节]
			//文件内容的结尾处用-1表示
			while((ch=fr.read())!=-1) {
				System.out.print((char)ch);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fr!=null)
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
		}
	}
	
	/**
	 * 使用FileWriter将字符数据写入到文件
	 */
	private static void testFileWriter() {
		//字符流写文件
		FileWriter fw = null;
		try {
			//如果是相对路径,则自动相对于该项目的根目录
			File parent = new File("temp");
			if(!parent.exists())
				parent.mkdir();
			
			File f = new File(parent,"text.txt");
			if(!f.exists())
				f.createNewFile();
			
			//是否追加写入
			boolean append = false;
			fw = new FileWriter(f,append);
			
			fw.write("你好hello stream!");
			
			//换行
			fw.write(System.lineSeparator());
			
			fw.write("new Line");
			
			//刷新缓冲区
			fw.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fw!=null)
				try {
					//关闭流(关闭动作会自动刷新缓冲区)
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
		}
	}
}

 

复制文本文件

 

package com.gc.file;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//手动设置缓冲区,提高读写效率
public class CopyFile {
	
	private static final int BUFFER_SIZE = 1024;//缓冲区大小

	public static void main(String[] args) {
		FileReader fr = null;
		FileWriter fw = null;
		try {
			fr = new FileReader("temp\\text.txt");
			fw = new FileWriter("temp\\copy_text.txt");
			
			//建立一个临时容器,用来缓存每次读取到的字符
			char[] buf = new char[BUFFER_SIZE];
			
			//记录每次读取到字符缓冲区的字符个数
			int len = 0;
			
			while((len=fr.read(buf))!=-1) {
				//将本次读取到的字符从缓冲区取出,并写入到文件
				fw.write(buf, 0, len);
			}
			
			//fw.flush();//刷新与否都可以,因为close()会自动刷新缓冲区
			
		} catch(IOException e) {
			throw new RuntimeException("文件读写发生错误");
		} finally {
			//最后,关闭流
			try {
				if(fr!=null)
					fr.close();
				if(fw!=null)
					fw.close();
			} catch (IOException e) {
				throw new RuntimeException("关闭流失败");
			}
		}
	}
}

 

 

分享到:
评论

相关推荐

    JAVA IO流文件读写大全下载

    * 字符流文件移动和读取:通过FileReader和FileWriter类可以实现文本文件的移动和读取操作。 6. 文件读取和存盘操作 文件读取和存盘操作可以通过字节流和字符流来实现。使用字节流可以读取和存盘任意类型的文件,...

    2024IO流-字符流-HM

    根据给定的信息,本文将详细解释Java中的字符流概念,特别是`FileReader`和`FileWriter`类的具体应用。字符流在处理包含大量文本数据,尤其是含有中文等多字节字符编码的文件时非常有用。 ### 1. 字符流简介 在...

    Java学习IO流小结--字符流

    `FileReader`和`FileWriter`是最基本的字符流,主要用于读取或写入文本文件。 - **继承关系**: - `java.io.FileReader` → `java.io.Reader` → `java.lang.Object` - `java.io.FileWriter` → `java.io.Writer`...

    IO流------------.docx

    `FileReader`和`FileWriter`是最常见的字符流,用于读写文本文件。字符流通常需要考虑字符编码问题,因为不同编码下字符可能占用不同数量的字节。例如,同一个汉字在GBK编码下占用2字节,UTF-16下也是2字节,但在UTF...

    Android平台的txt文本文件读写操作

    ### Android平台的txt文本文件读写操作 #### 一、引言 在Android应用程序开发过程中,文本文件(如.txt格式)的读写操作是常见需求之一。这些操作可以帮助开发者存储临时数据、配置信息或者实现简单的文件共享功能...

    android的IO流读写文件demo.zip_DEMO_android_android的IO流读写文件操作

    在Android平台上,IO流是进行文件读写操作的基础工具,尤其在处理数据交换、资源保存等方面扮演着重要角色。本文将深入探讨Android中如何利用IO流进行文件的读写操作,以及相关的示例代码。 首先,Android中的IO流...

    java的io流文件读写

    例如, FileReader和FileWriter用于读写文本文件。使用read()方法读取单个字符,write(char)方法写入单个字符。 3. 缓冲流(Buffered Stream):为了提高读写效率,Java提供了带缓冲功能的流,如...

    读写文件操作demo-java

    在Java编程语言中,文件的读写操作是日常开发中不可或缺的部分。本示例"读写文件操作demo-java"旨在教你如何使用Java进行文件的读取和写入,这对于处理数据存储、日志记录或是任何需要与磁盘交互的应用程序至关重要...

    java-IO操作-(读写、追加、删除、移动、复制、修改).doc

    1. 文件操作权限:需要确保程序有足够的权限来操作文件。 2. 文件路径:需要正确指定文件路径。 3. 文件编码:需要正确指定文件编码,以避免乱码问题。 4. 输入/输出流关闭:需要正确关闭输入/输出流,以避免资源...

    java文件读写操作

    在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...

    javaIO字符流文件写入总结共1页.pdf.zip

    Java IO字符流是Java平台中用于处理文本数据的重要部分,特别是在进行文件读写操作时。字符流处理单个字符,适合处理基于字符编码(如UTF-8、GBK等)的文本文件。本篇将深入探讨Java IO中的字符流以及如何进行文件...

    commons-io-2.4 包含了所有commons-io的jar包和源码

    4. **读写操作**:FileWriter、FileReader等类简化了文件读写,而LineIterator则方便逐行读取文件。另外,FastByteArrayOutputStream和FastByteArrayInputStream提供高效的内存内I/O。 5. **字符集和编码**:...

    Java IO 基础操作(文件读写和移动)

    本文将深入探讨Java中的基本文件操作,包括文件的移动、读写以及文本文件的读写。 首先,让我们从文件操作开始。在Java中,我们可以使用`java.io.File`类来创建、删除、重命名或检查文件是否存在。例如,创建一个新...

    Java io 读写文件

    - `FileReader`和`FileWriter`是字符流类,适用于处理文本文件,它们在内部使用了缓冲,但没有`BufferedReader`高效。 - `BufferedInputStream`和`BufferedOutputStream`是字节流的缓冲版本,可以与`...

    Java中IO解读与使用实例-动力节点共17页.pdf

    2. FileReader和FileWriter:用于读写文件的字符流,同样分别是输入和输出。 3. BufferedReader和BufferedWriter:提供缓冲功能,提高读写效率。 4. InputStreamReader和OutputStreamWriter:在字节流和字符流之间...

    j0601IO_chicken_Java-IO_prettyjtt_

    例如,FileReader和FileWriter用于读写文本文件。 5. **BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter**:这些是带缓冲的流,可以提高读写效率,减少磁盘I/O次数。 6. **...

    IO文件流操作

    2. FileReader和FileWriter:处理字符流,适合读写文本文件。例如: ```java FileReader fr = new FileReader("input.txt"); FileWriter fw = new FileWriter("output.txt"); ``` 3. BufferedReader和...

    java IO流读写

    - `FileReader` 和 `FileWriter` 处理文件中的字符数据。 - `PipedReader` 和 `PipedWriter` 创建字符流管道,类似于字节流的管道。 3. **装饰类(Filter)**: - 这些类用于增强基础流的功能,提供更高级别的...

    Java IO学习基础之读写文本文件

    Java IO(Input/Output)是Java中处理输入输出操作的核心包,它主要提供了文件读写、网络通信等基本功能。Java IO操作主要基于流的概念进行,分为字节流和字符流两大类。在实际开发中,为了提高读写效率,经常使用...

    javaIO操作(读写、追加、删除、移动、复制、修改).pdf

    Java IO 操作是Java编程语言中的重要组成部分,它允许程序与外部存储设备进行交互,包括读取、写入、追加、删除、移动和复制文件。以下是对标题和描述中涉及知识点的详细说明: 1. **读取文件内容**: - **按字节...

Global site tag (gtag.js) - Google Analytics