Java使用IO类库读取文本

本文提供了一个 Java IO 类库的基本应用示例,包括使用 FileReader 和 BufferedReader 读取文本,以及如何通过 File 类进行文件读写操作。通过控制台输入和命令行参数读取文件,实现文本内容的读取与复制。

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

 Java使用IO类库读取文本

对于初学Java的人来说,IO类库算是比较头疼的部分,在这里就做一个演示供大家参考,在Java中,IO部分是使用装饰器模式来实现的(Java本来想弄个简单粗暴的IO系统。结果却很悲剧),所以这也是初学者感到Java.io很难的部分原因,装饰器模式我用相片和相框来比喻(并不很准确)。在Java.io中FileReader就是相片,而BufferedReader就是相框,然后把相片放进相框里就可以拿来欣赏啦。还有一个愁人的问题就是File类,这个类乍一看就是指的文件本身,但其实这个类指的只是文件名,或者目录名(我当时也搞错了,看了《Java编程思想》才知道)。

现在上代码:
ackage com.baohanbin.io_demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

/**
 * 
 * 1:实现由标准输入设备读入多行数据,写入file1.Txt文件<br>
 * 读出file1.txt的内容,输出到标准设备,验证写入的内容。<br>
 * 2:拷贝一个文件到另个文件<br>
 * 由命令行参数读入输入文件名和输出文件名<br>
 * 
 * @author 包汉彬同学
 * 
 */
public class IODemo {
	// 从控制台输入内容时默认的输出文件名
	public static String DefaultFileName = "F:\\file1.txt";

	/**
	 * 由命令行参数读入输入文件名和输出文件名<br>
	 * 如果没有参数则从屏幕读入文本,将其写入"F:\\file1.txt"中<br>
	 * 
	 * @param srg
	 *            : srg[0]=>输入文件名 <br>
	 *            srg[1]=>输出文件名
	 */
	public static void main(String[] srg) {
		/*
		 * 判断命令行的参数的个数 如果有两个,则将第一个文件的内容拷贝到第二个文件中
		 * 不是,则从屏幕读入文本,将其写入"F:\\file1.txt"中
		 */
		if (srg.length == 2) {
			File file1 = new File(srg[0]);
			File file2 = new File(srg[1]);
			String s = null;
			try {
				// 读取file1的内容到s中
				s = readerFile(file1);
				System.out.println("读取 " + srg[0] + " 文件成功!");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				System.err.println("读取文件失败!请确定文件名是否正确");
				e.printStackTrace();
			}
			try {
				// 将s的内容写入file2中
				writerFile(file2, s);
				System.out.println("写入 " + srg[1] + " 文件成功!");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				System.err.println("写入文件失败!请确定文件名是否正确");
				e.printStackTrace();
			}

		} else {
			try {
				// 从控制台读取内容到DefaultFileName中
				consoleWriterFile(new File(DefaultFileName));
				System.out.println("输入结束:输出文件的内容");
				// 读取DefaultFileName的内容到s中
				String s = readerFile(new File(DefaultFileName));
				// 将s的内容显示到控制台上
				System.out.println(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	/**
	 * 将text中的内容写入file中<br>
	 * 
	 * @param file
	 *            待写入内容的文件名对象
	 * @param text
	 *            需要写入的内容
	 * @throws IOException
	 */
	public static void writerFile(File file, String text) throws IOException {
		BufferedWriter writer = new BufferedWriter(new FileWriter(file));
		writer.write(text);
		writer.close();
	}

	/**
	 * 从一个file对象中读取文本文字,并返回该文本
	 * 
	 * @param file
	 *            需要读取内容的文件名对象
	 * @return 用String返回file的内容
	 * @throws IOException
	 */
	public static String readerFile(File file) throws IOException {
		BufferedReader reader = new BufferedReader(new FileReader(file));
		StringBuilder sBuider = new StringBuilder();
		String line = null;
		while ((line = reader.readLine()) != null) {
			sBuider.append(line);
			// 在reader读取一行时会自动去掉换行符,所以在这里加上
			sBuider.append("\r\n");
		}
		reader.close();
		return sBuider.toString();
	}

	/**
	 * 从控制台读取文本,直到输入“end!”结束读入<br>
	 * 之后将读取的文本储存在file对象中
	 * 
	 * @param file
	 *            要保存屏幕内容的文件名对象
	 * @throws IOException
	 */
	public static void consoleWriterFile(File file) throws IOException {
		System.out.println("默认文件路径为 " + DefaultFileName + "输入文本用end!结束 :开始输入");
		Scanner scanner = new Scanner(System.in);
		StringBuilder sBuilder = new StringBuilder();
		while (!scanner.hasNext("end!")) {
			sBuilder.append(scanner.nextLine());
			// 在scanner读取一行时会自动去掉换行符,所以在这里加上
			sBuilder.append("\r\n");
		}
		/*
		 * 不关闭scanner会出现警告“Resource leak: 'scanner' is never closed” 但程序依然可以运行
		 */
		scanner.close();
		writerFile(file, sBuilder.toString());
	}

}
项目也也可以在这里直接IODemo下载,然后用Eclipse打开。
这里因为只关心面向字符的操作所以用Reader类族来实现,如果关心面向字节的操作就用InputStream来实现。
温馨提示:在Eclipse中想添加命令行参数的话,在Package Explorer右键点击你的工程名然后Run->Run Configurations,然后在弹出的对话框里切换到Arguments页面,在Program arguments:框里添加参数就可以了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值