黑马程序员技术交流社区
标题:
为什么IO输出就王五是0?
[打印本页]
作者:
韩爽
时间:
2012-7-30 22:46
标题:
为什么IO输出就王五是0?
本帖最后由 韩爽 于 2012-7-31 00:54 编辑
package io_duxie;
import java.io.*;
import java.io.RandomAccessFile;
import javax.swing.Spring;
public class RandomFileTest {
/**
* 利用IO流 读写文件内容
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//写入数据
Employee e1=new Employee("张三",23);
Employee d2=new Employee("李四",24);
Employee f3=new Employee("王五",25);
RandomAccessFile ra = new RandomAccessFile("1.txt", "rw");
ra.writeChars(e1.name);//writeChars 将字符串写入
//写入姓名,转换成字节getBytes遇到英文转换成字节为1,遇到中文转换字节2
ra.writeInt(e1.age);//weite为一个字节,WeiteInt是四个字节
ra.writeChars(d2.name);//writeChars 将字符串写入
ra.writeInt(d2.age);//weite为一个字节,WeiteInt是四个字节
ra.writeChars(f3.name);//writeChars 将字符串写入
ra.writeInt(f3.age);//weite为一个字节,WeiteInt是四个字节
ra.close();//关闭
//读取数据
String strName="";
RandomAccessFile du = new RandomAccessFile("1.txt", "r");
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());
strName="";
du.seek(0);//绝对定位
du.skipBytes(Employee.Len*2+4);
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());
strName="";
du.skipBytes(Employee.Len*2+4);
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());//.trim去掉字符串中不可显示的字符
strName="";
du.close();//关闭
}
}
复制代码
package io_duxie;
public class Employee {
public String name;
public int age;
public static final int Len=10;
public Employee (String name,int age)
{
if(name.length()>Len){
name.substring(0,Len);//当员工姓名超过8个字符自动取8个字符,substring方法
}
else
{
while(name.length()<Len)
{
name+="\u0000";
}
}
this.name=name;
this.age =age;
}
}
复制代码
36340-772335b80f4e1d501861f855f8802881.jpg
(23.9 KB, 下载次数: 23)
下载附件
2012-7-30 22:46 上传
作者:
韩爽
时间:
2012-7-31 00:52
package io_duxie;
import java.io.*;
import java.io.RandomAccessFile;
import javax.swing.Spring;
public class RandomFileTest {
/**
* 利用IO流 读写文件内容
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//写入数据
Employee e1=new Employee("张三",23);
Employee d2=new Employee("李四",24);
Employee f3=new Employee("王五",25);
RandomAccessFile ra = new RandomAccessFile("1.txt", "rw");
ra.writeChars(e1.name);//writeChars 将字符串写入
//写入姓名,转换成字节getBytes遇到英文转换成字节为1,遇到中文转换字节2
ra.writeInt(e1.age);//weite为一个字节,WeiteInt是四个字节
ra.writeChars(d2.name);//writeChars 将字符串写入
ra.writeInt(d2.age);//weite为一个字节,WeiteInt是四个字节
ra.writeChars(f3.name);//writeChars 将字符串写入
ra.writeInt(f3.age);//weite为一个字节,WeiteInt是四个字节
ra.close();//关闭
//读取数据
String strName="";
RandomAccessFile du = new RandomAccessFile("1.txt", "r");
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());
strName="";
du.seek(0);//绝对定位
du.skipBytes(Employee.Len*2+4);
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());
strName="";
<FONT color=red>du.skipBytes(Employee.Len*2+4); 去掉</FONT>
for(int i=0;i<Employee.Len;i++){
strName+=du.readChar();
}
System.out.println(strName.trim()+":"+du.readInt());//.trim去掉字符串中不可显示的字符
strName="";
du.close();//关闭
}
}
复制代码
有位好心的 黑马-小新,虽然没回帖,但是很感谢他,希望以后出现跟我一样问题的人,都注意下、
作者:
王志明
时间:
2012-7-31 01:52
本帖最后由 王志明 于 2012-7-31 01:54 编辑
当局部变量和成员变量同名时,以this.成员变量区分
读取文件时可以使用嵌套循环,省点事
import java.io.IOException;
import java.io.RandomAccessFile;
public class Test2 {
public static void main(String[] args) throws IOException {
// 写入数据
Employee e1 = new Employee("张三", 23);
Employee d2 = new Employee("李四", 24);
Employee f3 = new Employee("王五", 25);
RandomAccessFile ra = new RandomAccessFile("1.txt", "rw");
ra.writeChars(e1.name);// writeChars
// 将字符串写入,写入姓名,转换成字节getBytes遇到英文转换成字节为1,遇到中文转换字节2
ra.writeInt(e1.age);// weite为一个字节,WeiteInt是四个字节
ra.writeChars(d2.name);// writeChars 将字符串写入
ra.writeInt(d2.age);// weite为一个字节,WeiteInt是四个字节
ra.writeChars(f3.name);// writeChars 将字符串写入
ra.writeInt(f3.age);// weite为一个字节,WeiteInt是四个字节
ra.close();// 关闭
// 读取数据
String strName = "";
RandomAccessFile du = new RandomAccessFile("1.txt", "r");
// 这里使用嵌套循环可以省点事
for (int i = 0; i < 3; i++) {
for (int j = 0; j < Employee.Len; j++) {
strName += du.readChar();
}
System.out.println(strName.trim() + ":" + du.readInt());// .trim去掉字符串中不可显示的字符
strName = "";
}
du.close();// 关闭
}
}
class Employee {
public String name;
public int age;
public static final int Len = 10;
public Employee(String name, int age) {
// 要先将name的值赋给this.name,再对this.name进行操作
// 当局部变量和成员变量同名时,以this.成员变量区分
this.name = name;
this.age = age;
if (this.name.length() > Len) {
this.name.substring(0, Len);// 当员工姓名超过8个字符自动取8个字符,substring方法
} else {
while (this.name.length() < Len) {
this.name += "\u0000";
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2