字符写入流和输出流

本文介绍了一个Java程序中如何利用字符流将控制台输入的数据读取到内存,并最终写入到文件的过程。通过三个示例演示了不同场景下的读写操作,包括直接使用字符流、字符缓冲流以及结合字符输出流完成文件写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package IO;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

/**
 * 建立一个字符流对象来将控制台当中所输入的数据信息通过字符流来将其读入到内存当中的指定位置
 * 建立一个字符流写入对象用于将内存当中的数据写入到指定的文件当中
 */
public class ReaderAndWriterDemo{
//	使用字符流读操作来将控制台当中的数据读入到内存当中
	public void test1() throws IOException {
//		实例化一个字节输入流对象用于对字节数据进行读取操作
		InputStream inputStream=System.in;
//		实例化一个字符输入流对象,该对象实现了对字节流对象的封装操作
		Reader reader=new InputStreamReader(inputStream);
//		实例化一个字符数组对象用于对字符输入流对象所读取的数据进行存放
		char[] cs=new char[1024];
		int j=0;
//	使用输入流对象来从控制台当中进行数据信息的读取操作,并将所读取到的数据信息存放到内存到当中的字符数组之中
		while(true)
		{
			j=reader.read(cs);
			System.out.println("j="+j);
			String str=new String(cs,0,j).trim();
			/**
			 * 程序在执行之后输入end后会发现无法跳出while循环,是因为用户输入的不是end而是"end"+回车键==="end\r\n"
			 * String str=new String(cs,0,j)
			 * 所以在执行end后面还有多个隐形的空格键,所以str永远无法和end字符串对象进行匹配
			 * 所以要将转换之后的str对象后面的空字符串进行去除
			 */
			if(str.equals("end"))
			{
				System.out.println(str.equals("end"));
				break;
			}
			System.out.println(str);
		}
		reader.close();
		inputStream.close();
	}
//	使用字符缓存流对象来将控制台当中的数据读取到内存当中指定的字符数组当中并将之转变为String来输出
	public void test2() throws IOException
	{
		InputStream inputStream=System.in;
		Reader reader=new InputStreamReader(inputStream);
		BufferedReader bufferedReader=new BufferedReader(reader);
		while(true)
		{
			String str=bufferedReader.readLine();
			if(str.equals("end"))
				break;
			System.out.println(str);
		}
		bufferedReader.close();
		reader.close();
		inputStream.close();
	}
//	使用字符输出流来将内存当中的数据写入到文件对象当中,用于实现将用户输入到控制台当中的数据写入到文件对象当中去
	public void test3() throws IOException
	{
		InputStream inputStream=System.in;
		InputStreamReader reader=new InputStreamReader(inputStream);
		BufferedReader bufferedReader=new BufferedReader(reader);
		File file=new File("C:/Users/Administrator/Desktop/新建文本文档.txt");
//			建立一个字符输出流对象用于将指定的数据信息写入到文件对象当中
		Writer writer=new FileWriter(file);
		BufferedWriter bufferedWriter=new BufferedWriter(writer);
		String temp=null;
		while(true)
		{
			temp=bufferedReader.readLine();
			if(temp.equals("end"))
				break;
			bufferedWriter.write(temp);
//			当将str字符串对象写入到文件当中之后将另起一行继续等待下一行当中的内容的输入
			bufferedWriter.newLine();
			bufferedWriter.flush();
		}
		bufferedReader.close();
		reader.close();
		inputStream.close();
		bufferedWriter.close();
		writer.close();
	}
	public static void main(String[] args) throws IOException
	{
		ReaderAndWriterDemo demo=new ReaderAndWriterDemo();
		
//		demo.test2();
		demo.test3();
	}
}

### Java字符输出流写入字符串示例 以下是基于`java.io.FileWriter`实现的字符输出流写入字符串的具体代码示例: ```java import java.io.FileWriter; import java.io.IOException; public class WriteStringToFile { public static void main(String[] args) { String content = "这是一个测试字符串"; // 要写入的内容 try (FileWriter writer = new FileWriter("output.txt")) { // 创建文件字符输出流对象 char[] chars = content.toCharArray(); // 将字符串转换为字符数组 writer.write(chars); // 写入整个字符数组到文件中 writer.flush(); // 刷新缓冲区,确保数据被完全写入文件 } catch (IOException e) { // 捕获可能发生的IO异常 System.out.println("发生错误:" + e.getMessage()); } } } ``` 上述代码展示了如何利用`FileWriter`将字符写入文件。其中的关键步骤包括实例化`FileWriter`对象、将字符串转为字符数组通过`write()`方法写入文件[^2]。 对于更复杂的场景,比如仅写入字符串的部分内容,则可以通过指定起始偏移量长度来完成。例如: ```java import java.io.FileWriter; import java.io.IOException; public class PartialWriteExample { public static void main(String[] args) { String content = "这是另一个测试字符串"; int offset = 8; // 开始位置索引 int length = 7; // 需要写入字符数量 try (FileWriter writer = new FileWriter("partial_output.txt")) { writer.write(content.toCharArray(), offset, length); writer.flush(); } catch (IOException e) { System.out.println("发生错误:" + e.getMessage()); } } } ``` 此代码片段演示了如何通过`write(char[] cbuf, int off, int len)`方法写入字符串的一部分[^1]。 ### 注意事项 - 使用完毕后务必调用`flush()`刷新缓冲区以及`close()`关闭资源,以防止内存泄漏或数据丢失。 - `try-with-resources`语法能够自动管理资源释放过程,推荐优先采用这种方式处理I/O操作中的资源管理问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值