java核心技术II:随机访问文件
来源:互联网 发布:ecshop2.7.3源码下载 编辑:程序博客网 时间:2024/06/08 13:32
程序清单1-2 RandomFileTest.java
将三条记录写到一个数据文件中,然后以逆序将他们从文件中读回。为了高效的执行,这里需要使用随机访问,因为我们需要首先读入第三条记录。
import java.io.DataInput;import java.io.DataOutput;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.charset.Charset;import java.util.Calendar;import java.util.Collection;import java.util.Date;import java.util.GregorianCalendar;import java.util.Map;import java.util.Scanner;import java.util.Set;import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;/** * * @author Administrator *新浪微博:ouc大飞 */public class RandomFileTest { public static void main(String[] args) { /*Charset charset=Charset.forName("ISO8859-1"); //System.out.println(charset); Set<String> aliases=charset.aliases(); for(String string:aliases){ System.out.println(string); }*/ /* * 获得所有可用的字符集 */ /*Map<String, Charset> map=Charset.availableCharsets(); Set<String> set=map.keySet(); for(String string:set){ System.out.println(string); }*/ /* * 输出字符集的key和value */ /*Map<String, Charset> map=Charset.availableCharsets(); Collection<Charset> set=map.values(); Set<String> set1=map.keySet(); for(String string1:set1){ System.out.println(string1); } for(Charset string:set){ System.out.println(string); }*/ /* * 对字符集编码解码 */ /*Charset charset=Charset.forName("ISO-8859-1"); String string="hello"; ByteBuffer buffer=charset.encode(string); byte[] bs=buffer.array(); System.out.println(bs); CharBuffer buffer2=charset.decode(buffer); String string2=buffer2.toString(); System.out.println(string2);*/ DEmployee[] staff=new DEmployee[3]; staff[0]=new DEmployee("Carl Cracker", 75000, 1987, 12, 15); staff[1]=new DEmployee("Harry Hacker", 50000, 1989, 10, 1); staff[2]=new DEmployee("Tony Tester", 4000, 1990, 3, 15); try { DataOutputStream out =new DataOutputStream(new FileOutputStream("D:\\demployee.txt")); for(DEmployee e:staff){ e.writeData(out); } out.close(); RandomAccessFile in=new RandomAccessFile("D:\\demployee.txt", "r"); int n=(int)(in.length()/DEmployee.RECORD_SIZE); DEmployee[] newStaff=new DEmployee[n]; System.out.println(n); for(int i=n-1;i>=0;i--){ newStaff[i]=new DEmployee(); in.seek(i*DEmployee.RECORD_SIZE); newStaff[i].readData(in); } in.close(); for(DEmployee e:newStaff) System.out.println(e); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }}class DEmployee { public DEmployee(){ } public DEmployee(String n,double s,int year,int month,int day){ name=n; salary=s; GregorianCalendar calendar=new GregorianCalendar(year,month-1,day); hireDay=calendar.getTime(); } public String getName() { return name; } public double getSalary() { return salary; } public Date getHireDay() { return hireDay; } public void raiseSalary(double byPercent){ double raise=salary*byPercent/100; salary+=raise; } public String toString() { return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay+"]"; } public void writeData(DataOutput out) throws IOException { DataIO .writeFixedString(name,NAME_SIZE,out); out.writeDouble(salary); GregorianCalendar calendar=new GregorianCalendar(); calendar.setTime(hireDay); out.writeInt(calendar.get(Calendar.YEAR)); out.writeInt(calendar.get(Calendar.MONTH)+1); out.writeInt(calendar.get(Calendar.DAY_OF_MONTH)); } public void readData(DataInput in) throws IOException { name=DataIO.readFixedString(NAME_SIZE, in); salary=in.readDouble(); int y=in.readInt(); int m=in.readInt(); int d=in.readInt(); GregorianCalendar calendar=new GregorianCalendar(y,m-1,d); hireDay=calendar.getTime(); } public static final int NAME_SIZE=40; public static final int RECORD_SIZE=2*NAME_SIZE+8+4+4+4; private String name; private double salary; private Date hireDay;}class DataIO{ public static String readFixedString(int size,DataInput in) throws IOException{ StringBuilder builder=new StringBuilder(size); int i=0; boolean more=true; while (more&&i<size) { char ch=in.readChar(); i++; if(ch==0) more=false; else { builder.append(ch); } } in.skipBytes(2*(size-i)); return builder.toString(); } public static void writeFixedString(String s,int size,DataOutput out) throws IOException{ for(int i=0;i<size;i++){ char ch=0; if(i<s.length()){ ch=s.charAt(i); } out.writeChar(ch); } }}
0 0
- java核心技术II:随机访问文件
- java随机访问文件
- Java-文件操作与随机访问文件
- Java 文件随机访问类-RandomAccessFile
- Java之RandomAccessFile(随机访问文件)
- 如何随机访问文件
- 随机访问文件
- RandomAccessFile 随机访问文件
- 读写随机访问文件
- 随机访问文件RandomAccessFil
- Java文件操作-随机访问文件和zip文档
- java 随机访问 RandomAccessFile
- Java I/O 学习笔记(5) 随机访问文件
- [Java核心API]IO流--随机访问文件RandomAccessFile
- Java文件操作-读/写/复制/删除/随机访问
- Java IO详解——随机访问文件流
- 【Java学习笔记】27:文件的随机访问&对象流
- Java核心技术II:ZiP压缩文档
- 【OpenCV3图像处理】图像通道分离、通道合并、图像叠加混合
- kafka安装及测试
- opencv Mat数据的三种标准访问方式
- 数据表的操作
- SparkSQL中DataFrame常用API
- java核心技术II:随机访问文件
- LeetCode5-Longest Palindromic Substring
- java.lang.StackOverflowError
- 两个栈实现一个队列
- mysql运算符
- Linux基本语法4
- 蓝桥杯十进制转十六进制
- mysql备份与恢复
- 如何将多个DataTable添加到指定的DataSet中