`
miaoge
  • 浏览: 107536 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【I/O流】读取控制台数据写入文件中,当文件大小超过50个字符时自动创建一个文件来存放,依次循环

阅读更多

/**
 * 监控控制台,每当控制台输入一行数据时就往磁盘里面写,磁盘有文件专门存放,
 * 文件内容长度不能超过50个字符,超过时自动建立新文件并把超过的内容放到新文件中去
 * (要求程序关闭后再启动输入数据不会覆盖原来的数据)。
 * 问题:①数据长度超过50,就自动建立新的文件,将多余的数据写入,
 * 且写入的数据不得超过50,若超过又重新创建,以此循环。
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 监控控制台,每当控制台输入一行数据时就往磁盘里面写,磁盘有文件专门存放, 
 * 文件内容长度不能超过50个字符,超过时自动建立新文件并把超过的内容放到新文件中去
 * (要求程序关闭后再启动输入数据不会覆盖原来的数据)。
 * 问题:①数据长度超过50,就自动建立新的文件,将多余的数据写入,
 * 且写入的数据部得超过50,若超过又重新创建,以此循环。
 * 
 * @author 小苗
 */
public class CopyOfWriteFile002 {
	private BufferedReader in_br;
	private RandomAccessFile out_r;
	private File file = new File("d:\\20100514zuoye.txt");

	{    //初始化 输出流
		in_br = new BufferedReader(new InputStreamReader(System.in));
		try {
			out_r = new RandomAccessFile(file, "rw");
			out_r.seek(out_r.length()); // 设置从该文件末尾开始写入
		} catch (FileNotFoundException e){
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
    //读取控制台数据
	public void read() {
		System.out.println("请输入数据:");
		String str = null;
		try {
			while ((str = in_br.readLine()) != null) {
				splitFile(str);  
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				out_r.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	//拆分数据循环创建50字节大小的文件
	public void splitFile(String str) throws IOException{
		byte[] byte2 = str.getBytes(); // 解决乱码问题
		long len = str.length();
		/* 如果输入的数据与目标文件的大小和大于50,且目标文件大小大于50 就创建新文件
		 * 若目标文件大小小于50,就写入50-out_r.length()长度的数据
		 */
		if (len+out_r.length() >=50) { 
			if(out_r.length()>=50){   
			   createFile(file);  //创建文件方法
			   splitFile(str); 
			}else{
			   long buff = 50-out_r.length();
			   out_r.seek(out_r.length());
			   out_r.write(byte2,0,(int)buff);
			   if((len-buff)>0){
				   str = str.substring((int)buff);
				   splitFile(str);  //用递归
			   }
			}
		 }else{
		   out_r.write(byte2);
		   return;
		 }
	}

	// 创建新文件以当前时间命名,重新赋值输出流
	public void createFile(File file) throws IOException {
		Date date = new Date(); // 获取当前时间
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); // 定义文件名格式
		String formatDate = sdf.format(date); // 把当前时间以定义的格式 格式化
		String str1 = file.getParent() + "\\";
		String str2 = str1.concat(formatDate);
		String nameDate = str2 + ".txt"; // 定义路径
		out_r = new RandomAccessFile(nameDate, "rw"); // 获得写入目标文件
	}

	public static void main(String[] args) throws ParseException, IOException {
		CopyOfWriteFile002 wf = new CopyOfWriteFile002();
		wf.read();
	}
}

 

分享到:
评论

相关推荐

    编写程序,使用两个线程,一个队列,其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束

    另外一个线程,不断的从队列中读取数据(该队列的字符串数据就是另一个线程存入的)然后显示在控制台。 要求:(a) 必须使用System.in,InputStreamReader, BufferedReader,Thread, (b) 必须使用java.util.concurrent...

    c 文件写入和读取工具类

    首先,使用fopen函数以写入模式("w")打开一个名为example.txt的文件,并使用fprintf函数向文件中写入字符串"Hello, World!\n"。然后,代码再次使用fopen函数以读取模式("r")打开同一个文件,并使用fgets函数从...

    rar压缩软件.rar

    RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...

    c语言文件读写操作代码.zip

    接下来,程序打开output.txt文件用于写入,通过fwrite函数将一个预定义的字符串写入到文件中,然后关闭了写入的文件。整个过程包含了错误处理,确保了文件操作的安全性。这个示例是学习C语言文件I/O的实用入门,适合...

    入门学习Linux常用必会60个命令实例详解doc/txt

    虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程序。 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户。 2.格式 shutdown [-h][-i...

    WinRAR_4.0.exe

    rarfiles.lst 包含一个用户定义的文件列表,告诉 RAR 添加文件到固实压缩文件时的顺 序。它可以包含文件名通配符和指定项目 -$default。默认项目定义了这个文件中与 其他项目不相符时的顺序清单位置。 注释字符是...

    C语言程序设计标准教程

    1. 被写入的文件可以用、写、读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    c语言文件读写操作代码

    这个示例程序首先使用fopen函数打开一个名为test.txt的文件以进行写入。如果文件无法打开,程序会输出一条错误消息并返回1。然后,程序使用fprintf函数将字符串"Hello, world!\n"写入到文件中。最后,程序使用fclose...

    JDK_API_1_6

    ByteArrayInputStream ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。 ByteArrayOutputStream 此类实现了一个输出流,其中的数据被写入一个 byte 数组。 CharArrayReader 此类实现一个...

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    Python Cookbook

    11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步I/O 的结合 417 11.10 在Tkinter中使用IDLE...

    java源码包2

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包3

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包4

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...

    cmd操作命令和linux命令大全收集

    它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. shutdown-------60秒倒计时关机命令 7. lusrmgr.msc----本机...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...

    网管教程 从入门到精通软件篇.txt

    INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...

Global site tag (gtag.js) - Google Analytics