`
miaoge
  • 浏览: 109341 次
  • 性别: 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();
	}
}

 

分享到:
评论

相关推荐

    关于I/O流读写文件

    FileOutputStream是用于写入文件的输出流,通过文件名或File对象可以创建一个FileOutputStream对象,然后调用write()方法将数据写入文件。 BufferedOutputStream是缓冲输出流,用于提高输出效率,可以和...

    java基础之I/O流

    Java中的I/O流是程序与外部数据交互的重要机制,它允许数据在程序、文件、网络等之间流动。I/O流分为两大类:字符流(Character Stream)和字节流(Byte Stream),每类又分为输入流(Input Stream)和输出流...

    Java I/O流通讯录

    Java I/O流通讯录是一个基于Java编程语言设计的实用程序,它主要用于演示和学习Java的I/O流操作。在这个项目中,开发者通过I/O流实现了对文件的读写功能,从而构建了一个简单的通讯录系统。这个系统允许用户进行添加...

    怎么使用I/O编程???

    Java中的I/O系统不仅涵盖了文件的读写,还包括网络数据交换、内存数据处理及控制台输入输出等多个方面。 Java通过引入流的概念,将各种不同类型的数据源(如文件、网络、内存)统一抽象为流,简化了程序员对不同...

    linux C++ 文本文件创建写入以及读取

    这段代码会创建一个名为`test.txt`的文件,并写入字符串"Hello, World!"。如果文件已经存在,`ofstream`默认会在文件末尾追加内容。如果文件无法打开,`!outfile`会为真,提示错误。 2. **读取文件**: 使用`...

    JAVA文件流控制台程序

    在Java编程语言中,文件流是用来处理输入/输出(I/O)操作的重要工具,尤其是在进行文件读取和写入时。文件流允许我们通过程序与外部文件进行数据交互,实现数据的传输。在这个"JAVA文件流控制台程序"中,我们将深入...

    编程实现先从标准输入中读取字符串,然后将字符串存到文件file1中,最后再将文件file1中的内容读取另存到文件file2中等功能。

    在Java编程中,实现从标准输入流(Standard Input Stream)读取字符串,然后将这些字符串写入文件,以及从文件中读取内容并保存到另一个文件的功能,涉及到多个核心概念和API。以下是对这些知识点的详细说明: 1. *...

    IDL读取数据文件程序整理

    在读取文件时,IDL可以根据文件的格式自动地将数据读入到变量中,并且可以将数据写入到文件中。 IDL是一个功能强大且灵活的科学可视化分析语言,它可以读取各种格式的数据文件,包括ASCII码文本文件,并且提供了...

    文件 输入输出缓冲流

    例如,使用Java,我们可以创建一个`BufferedReader`对象从`System.in`读取用户输入,然后将每个浮点数转换为字符串并存储在一个数组中。 接下来,我们需要将这些数据写入指定的文件。使用`BufferedWriter`,我们...

    R&Wfile_读取文件写入文件_

    这将创建一个名为"output.txt"的文件,写入字符串"Hello, World!"。 3. **fstream类**:结合了ifstream和ofstream的功能,可以同时进行读写操作。不过,需要注意的是,对于同一个文件,通常不推荐在同一时刻既读又...

    java i/o 实例 编程 学习 教程 复习

    本教程通过实际示例介绍了 Java I/O 的多种使用方式,包括文件读取、控制台输入读取、字符串读取、数据读取和写入、随机访问文件等。掌握这些基本操作对于进行文件操作、数据处理等方面的工作至关重要。希望通过对...

    Qt——txt文件选择、读取与写入 - quanwei的博客1

    总的来说,Qt通过`QFileDialog`、`QFile`和`QTextStream`提供了一套完整的工具集,用于在GUI应用程序中方便地处理TXT文件的选择、读取和写入。理解这些基本操作是构建更复杂文件操作功能的基础,比如日志记录、数据...

    java i/0习题

    在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题旨在帮助你深入理解和熟练掌握Java I/O的各种操作。 一、输入流(Input Stream) 1. 字节流:InputStream类是所有字节输入流的...

    IO数据流 全攻略

    在Java编程中,I/O(Input/Output)流是一个至关重要的概念,用于处理程序与外部世界的通信,包括从文件、网络、键盘等源获取数据,以及向显示器、打印机、网络等目标输出数据。本篇文章将深入探讨I/O流的相关知识。...

    java 读取文件 文件读取操作

    当处理包含文本数据的文件时,通常使用`java.io.InputStreamReader`和`java.io.Reader`类按字符读取。这样可以处理字符编码问题,例如UTF-8。以下是如何按字符读取文件的例子: ```java Reader reader = new ...

    以文件流的方式复制文件

    PrintStream是Java中的一个输出流类,用于将数据写入到文件或控制台中。使用PrintStream可以方便地将数据写入到文件中。 七、使用StringBuffer写文件 StringBuffer是一个可变的字符序列类,用于存储和操作字符串。...

    C# 控制台读写txt文件代码

    2. **创建读取器:** 然后通过 `StreamReader` 类创建了一个读取器对象,该对象可以从 `FileStream` 对象中读取数据。 3. **读取内容:** 使用 `StreamReader` 的 `ReadToEnd()` 方法读取整个文件内容到 `strLine` ...

    一个简单的C++示例,它演示了如何进行基本的文件操作,包括打开、读取、写入和关闭文件

    这个程序创建一个新文件(如果它不存在),然后向其中写入一些文本,接着从该文件中读取文本并打印到控制台。 这段代码首先包含了必要的头文件,定义了一个文件路径和一个要写入文件的字符串。之后,它尝试打开文件...

    输入输出流-从words文件中读取单词,输出重复字母对最多的单词(C++)

    通过循环遍历文件中的每个单词,使用`getline()`函数读取一行(一个单词),然后逐字符比较相邻的字符,检查是否有重复字母对。如果找到重复字母对,计数器`k`增加1。完成后,将当前单词的重复字母对数量存储到数组...

Global site tag (gtag.js) - Google Analytics