`
wjheye
  • 浏览: 83962 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

用RandomAccessFile往文件中写入三名员工信息,并按照第二名、第一名 、第三名顺序读出员工信息

F# 
阅读更多
此种情况下员工的姓名值可以是英文 且年龄只允许占用一个字节
import java.io.RandomAccessFile;

public class RandomFileTest {

	/*
	 *RandomAccessFile类提供了众多的文件访问方法 支持“随即访问”方法
	 *并且对读写等长记录格式的文件时有很大的优势
	 *但是此类仅限于操作文件,不能访问其他的io设备,如网络,内存映像等
	 *构造函数 new RandomAccessFile(f,“rw”)读写方式
	 *构造函数 new RandomAccessFile(f,“r”)只读方式
	 *本程序目的是往文件中写入三名员工信息,每位员工还有姓名和年龄字段,、
	 *然后按照第二名、第一名 、第三名顺序读出员工信息
	 */
	public static void main(String[] args) throws Exception  {
		Employee e = new Employee("zhangsan",18);//第一名员工信息
		Employee e1 = new Employee("lisi",28);//第二名
		Employee e2 = new Employee("wangwu",23);//第三名
		
		RandomAccessFile raf = new RandomAccessFile("employee.txt","rw");
		//把员工的信息以读写的方式存入到某个文件当中 
		
		raf.write(e.name.getBytes());
		//以字节的形式保存到文件当中
		raf.write(e.age);
		//使用这个方法的时候 当年龄值的范围大于一个字节的话 读取其中的一个字节 剩余的被丢弃
		//raf.writeInt(e.age);
		//使用这个方法的时候 把里面的四个字节全部读出来
		
		raf.write(e1.name.getBytes());
		raf.write(e1.age);
		//raf.writeInt(e1.age);
		
		raf.write(e2.name.getBytes());
		raf.write(e2.age);
		//raf.writeInt(e2.age);
		raf.close();
		
		
		byte buf[] = new byte[8];
		int len = 0;
		String strName = null;
		RandomAccessFile ra = new RandomAccessFile("employee.txt","r");
		//从文件中读出第二个员工的信息 需要跳过9个字节 因为每个员工的信息占9字节
		ra.skipBytes(9);
		//跳过9个字节  员工姓名占8个字节 年龄占1个字节
		//如果上面用raf.writeInt(e.age);的方法存储年龄的话 此处应为ra.skipBytes(12); 因为员工姓名占8个字节 年龄占4个字节 需跳转12字节
		len = ra.read(buf);
		strName = new String(buf,0,len);
		//字节数组转换成字符串 从而取出员工的姓名
		System.out.println(strName.trim()+ ":"+ra.read());
		//去掉字符串中不可见的字符 即空格
		
		//下面读取第一个员工的信息
		ra.seek(0);//绝对定位 让指示器跳到文件的开始处
		len = ra.read(buf);
		strName = new String(buf,0,len);
		System.out.println(strName.trim()+ ":"+ra.read());
		
		//以下读取到第三个员工的信息
		ra.skipBytes(9);
		//由于读取完第一个员工的信息后 指示器指在第二个员工信息处 需跳转9个字节开始取第三个员工信息
		len = ra.read(buf);
		strName = new String(buf,0,len);
		System.out.println(strName.trim()+ ":"+ra.read());
		
		ra.close();
		
	}

}

public class Employee {
	//Employee 类定义员工的基本信息 并对员工的姓名做简单的判断
	public String name = null;
	public int age = 0;
	public static final int LEN = 8;
	// LEN 规定员工的姓名为8个字符
	public Employee(String name,int age) {
		if(name.length()>LEN){
			name = name.substring(0,7);
			//员工的姓名多余8个字符的时候 把后边的给去掉
		}else{
			while(name.length()<LEN){
				name +="\u0000";
			}
			//如果不够8个的话 就用空补足8个字符
		}
		this.name = name ;
		//如果是八个字符的话 直接赋值
		this.age = age;
	}

}



经过改进后 员工的姓名可以是中文或者英文 并且年龄的范围值也可以大于一个字节的范围 并且进一步的优化了代码
import java.io.RandomAccessFile;

public class RandomFileTest {

	/*
	 *RandomAccessFile类提供了众多的文件访问方法 支持“随即访问”方法
	 *并且对读写等长记录格式的文件时有很大的优势
	 *但是此类仅限于操作文件,不能访问其他的io设备,如网络,内存映像等
	 *构造函数 new RandomAccessFile(f,“rw”)读写方式
	 *构造函数 new RandomAccessFile(f,“r”)只读方式
	 *本程序目的是往文件中写入三名员工信息,每位员工还有姓名和年龄字段,、
	 *然后按照第二名、第一名 、第三名顺序读出员工信息
	 *
	 */
	public static void main(String[] args) throws Exception  {
		Employee e = new Employee("first",18);//第一名员工信息
		Employee e1 = new Employee("第二名",28);//第二名
		Employee e2 = new Employee("第三名",24);//第三名
		
		RandomAccessFile raf = new RandomAccessFile("employee.txt","rw");
		//把员工的信息以读写的方式存入到某个文件当中 
		
		//raf.write(e.name.getBytes());
		//以字节的形式保存到文件当中
		//用字节的方式写入的时候 当员工的姓名是汉字的时候会出现错误 因为在java 中不管是中文字符还是英文字符 它们都是一个字符 都占用两个字节 在本地的计算机编码系统中英文字符占用一个字节 而中文字符占用两个字节
		raf.writeChars(e.name);
		//此时我们用writeChars写入8个字符 每个字符采用的都是unicode编码每个字符占用两个字节
		//raf.write(e.age);
		//使用这个方法的时候 当年龄值超过了一个字节的范围的话 只写入一个字节内容 剩余的被丢弃
		raf.writeInt(e.age);
		//使用这个方法的时候 把里面的四个字节数据全部写入文件中
		
		//raf.write(e1.name.getBytes());
		raf.writeChars(e1.name);

		//raf.write(e1.age);
		raf.writeInt(e1.age);
		
		
		//raf.write(e2.name.getBytes());
		raf.writeChars(e2.name);

		//raf.write(e2.age);
		raf.writeInt(e2.age);
		raf.close();
		
		
		//byte buf[] = new byte[8];
		//byte []buf = new byte[Employee.LEN];
		//int len = 0;
		String strName = "";
		//空对象
		RandomAccessFile ra = new RandomAccessFile("employee.txt","r");
		//从文件中读出第二个员工的信息 需要跳过9个字节 因为每个员工的信息占9字节
		//ra.skipBytes(9);
		ra.skipBytes(Employee.LEN*2+4);//所以在此应该跳过的是 8*2+4个字节
		
		//跳过9个字节  员工姓名占8个字节 年龄占1个字节
		//如果上面用raf.writeInt(e.age);的方法存储年龄的话 此处应为ra.skipBytes(12); 因为员工姓名占8个字节 年龄占4个字节 需跳转12字节
		//len = ra.read(buf);
		//strName = new String(buf,0,len);
		for(int i =0;i<Employee.LEN;i++){
			strName += ra.readChar();
		}
		//字节数组转换成字符串 从而取出员工的姓名
		//System.out.println(strName.trim() + ":"+ra.read());
		System.out.println(strName.trim() + ":"+ra.readInt());
		//去掉字符串中不可见的字符 即空格
		
		//下面读取第一个员工的信息
		ra.seek(0);//绝对定位 让指示器跳到文件的开始处
		//len = ra.read(buf);
		//strName = new String(buf,0,len);
		strName = "";
		//读取完之后进行下一次的读取的时候  清空 从而不让strName 相加
		for(int i =0;i<Employee.LEN;i++){
			strName += ra.readChar();
		}
		System.out.println(strName.trim() + ":"+ra.readInt());
		
		//以下读取到第三个员工的信息
		//ra.skipBytes(9);
		ra.skipBytes(Employee.LEN*2+4);
		//由于读取完第一个员工的信息后 指示器指在第二个员工信息处 需跳转9个字节开始取第三个员工信息
		//len = ra.read(buf);
		//strName = new String(buf,0,len);
		strName = "";
		for(int i =0;i<Employee.LEN;i++){
			strName += ra.readChar();
		}
		System.out.println(strName.trim() + ":"+ra.readInt());
		
		ra.close();
		
	}

}

public class Employee {
	//Employee 类定义员工的基本信息 并对员工的姓名做简单的判断
	public String name = null;
	public int age = 0;
	public static final int LEN = 8;
	// LEN 常量 规定员工的姓名为8个字符
	public Employee(String name,int age) {
		if(name.length()>LEN){
			name = name.substring(0,7);
			//员工的姓名多余8个字符的时候 把后边的给去掉
		}else{
			while(name.length()<LEN){
				name +="\u0000";
			}
			//如果不够8个字符的话 就用空补足8个字符
		}
		this.name = name ;
		//如果是八个字符的话 直接赋值
		this.age = age;
	}

}

分享到:
评论

相关推荐

    使用RandomAccessFile流将一个文本文件读出,并导致写入到另一个文件当中。

    ### 使用RandomAccessFile流将一个文本文件读出并写入到另一个文件中的知识点解析 在Java编程语言中,`RandomAccessFile`类提供了一种非常灵活的方式来读取和写入文件。它支持随机访问,意味着我们可以直接跳转到...

    RandomAccessFile向文件中写入中文

    综上所述,使用`RandomAccessFile`向文件中写入中文时,建议采用`write(String.getBytes())`方法,并确保指定了正确的编码方式。这样不仅能避免乱码问题,还能确保文件内容的正确性。此外,还需要注意选择合适的编码...

    java的RandomAccessFile对文件进行读写操作

    Java中的`RandomAccessFile`类是用于处理文件的高级接口,它允许我们对文件进行随机访问,即在文件的任何位置进行读写操作,而不仅仅是从文件头开始顺序读写。这种能力使得`RandomAccessFile`在处理大文件或者需要...

    java使用randomaccessfile在文件任意位置写入数据

    8. 使用while循环从原文件当前位置读取数据到buff中,并通过FileOutputStream实例写入临时文件。 9. 再次使用seek()方法回到插入位置,然后使用write()方法将新的字符串内容写入文件。 10. 最后,再次使用while...

    基于RandomAccessFile文件分类的小程序

    与传统的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`允许程序在文件的任意位置进行读写操作,而不是按照文件的线性顺序。在文件分类场景中,`RandomAccessFile`可能被用来高效地读取文件内容,...

    【IT十八掌徐培成】Java基础第16天-01.RandomAccessFile.zip

    本教程聚焦于Java中的`RandomAccessFile`类,这是Java I/O流体系中的一个重要部分,用于处理可以随机读写的数据文件。在Java基础学习的第16天,我们将深入探讨这个主题。 `RandomAccessFile`类在`java.io`包下,它...

    Java RandomAccessFile 指定位置实现文件读取与写入

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以直接定位到文件的任意位置进行读写操作,这对于处理...

    体会RandomAccessFile

    然后通过`DataOutputStream`将这些信息写入名为`employee.dat`的文件中。这里使用了`DataOutputStream`是因为它可以方便地写出基本类型的数据(如字符串、整型、浮点型等)。 ```java DataOutputStream out = new ...

    itat复赛第3届的第3道题的答案

    *3编写一个Java应用程序,利用RandomAccessFile类,把几个int型整数(1,2,3,4,... * 写入到一个名字为tom.dat文件中,然后按相反顺序读出这些数据并显示在屏幕上。(注意,一个int型数据占4个字节)(本题30分) */

    学习张孝祥的向文件中写入数据和读取数据

    在本教程中,我们将深入探讨如何使用RandomAccessFile来实现向文件中写入数据和从文件中读取数据,以及张孝祥教授在这一领域的教学方法。 首先,让我们了解RandomAccessFile的基本用法。要创建一个RandomAccessFile...

    JAVA随机存储流(RandomAccessFile)的应用

    Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...

    dnzyz.rar_RandomAccessFile_java 文件管理_文件操作

    在Java编程语言中,`RandomAccessFile`是一个强大的类,用于对文件进行随机访问和读写操作。这个类提供了一种高效的方式,让我们能够在文件的任何位置读取或写入数据,而不仅仅是从文件的开头顺序读取。下面将详细...

    使用RandomAccessFile递归修改文件

    因为使用其他文件流修改文件时是整体的替换,导致SVN上传上去后是整个文件都修改了,所以需要增量修改,这个demo是使用RandomAccessFile增量修改,只修改指定的行,很实用

    RandomAccessFile 解决乱码

    给定的示例代码展示了如何使用 `RandomAccessFile` 来写入和读取包含中文字符的对象到文件中,并尝试解决乱码问题。下面将详细分析这段代码: 1. **创建文件对象**: ```java File f = new File("k:\\c.txt"); `...

    RandomAccessFile类的用法.doc

    RandomAccessFile类是Java I/O库中的一个重要组件,它提供了对文件进行随机访问的能力,这意味着你可以直接跳到文件的任意位置进行读写操作,而不仅仅局限于从头到尾的顺序访问。这个类非常适合处理大数据量的文件,...

    randomaccessfile例子

    RandomAccessFile处理文件的案例

    RandomAccessFile的用法

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...

    Java RandomAccessFile基本文件操作示例

    Java RandomAccessFile 是 Java 中的一个文件处理类,提供了随机访问文件的能力,支持读写文件的任意位置。下面是 Java RandomAccessFile 基本文件操作示例的知识点总结: 一、 RandomAccessFile 简介 ...

    RandomAccessFile类

    NULL 博文链接:https://chaoyi.iteye.com/blog/2083498

Global site tag (gtag.js) - Google Analytics