您好,我正在編寫一個在Java中寫入和讀取文件XML的程序。這是寫入文件
public static void main(String[] args) throws IOException {
File file = new File("C:\\Test\\employee.XML");
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
//int codeEmp = 0;
String nameEmp[] = {"Name A", "Name B", "Name C", "Name D", "Name E"};
String addEmp[] = {"Address A", "Address B",
"Address C", " Address D",
"Address E"};
int saleEmp[] = {2000,1232,7653,1236,3452};
int comEmp[] = {400,100,3000,300,500};
StringBuffer buffer;
StringBuffer buffer1;
for (int i=0;i< nameEmp.length; i++){
randomAccessFile.writeInt(i+1);
buffer = new StringBuffer( nameEmp[i]);
buffer.setLength(10);
randomAccessFile.writeChars(buffer.toString());
buffer1 = new StringBuffer( addEmp[i]);
buffer1.setLength(100);
randomAccessFile.writeChars(buffer1.toString());
randomAccessFile.writeInt(saleEmp[i]);
randomAccessFile.writeInt(comEmp[i]);
}
randomAccessFile.close();
}
讀者是
public static void main(String[] args) throws IOException {
File file = new File("C:\\Test\\employee.XML");
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
int codeEmp, position = 0;
char nameEmp[] = new char[10];
char addEmp[] = new char [100];
int saleEmp , comEmp;
for(;;){
randomAccessFile.seek(position);
codeEmp = randomAccessFile.readInt();
for (int i = 0; i < nameEmp.length; i++) {
nameEmp[i] = randomAccessFile.readChar();
}
String nameEmpS= new String(nameEmp);
for (int i = 0; i < addEmp.length; i++) {
addEmp[i] = randomAccessFile.readChar();
}
String addEmpS= new String(addEmp);
saleEmp =randomAccessFile.readInt();
comEmp=randomAccessFile.readInt();
System.out.println("Cod Emp: " + codeEmp + ", nombre: " +nameEmpS+ ", dirección: "+addEmpS+
", sale: " + saleEmp+ ", comisión: " + comEmp );
position= position + 36;
if (randomAccessFile.getFilePointer()==file.length())break;
}
randomAccessFile.close();
}
問題是,當(dāng)我運(yùn)行閱讀器文件時,它返回了許多行,只有第一行是可以的,但其他行是錯誤的。我怎樣才能修復(fù)它?這是控制臺
Cod Emp:1,nombre:姓名A,dirección:地址A,銷售:2000,comisión:400
Cod Emp:7536672,名稱:A,dirección:Name B廣告,銷售:6553714,商品編號:6619251
Cod Emp:0,nombre:,dirección:?名稱B地址B,銷售:0,comisión:0
您在此處指定“隨機(jī)”下一個讀取位置:
除非每條記錄后面有36個字節(jié)的填充,否則這是沒有意義的。注釋掉行
position= position + 36;
和randomAccessFile.seek(position);
,因?yàn)槿绻鷮⒚看螌懭肱c讀取匹配,則下一個搜索位置將正確移動。Also note:
employee.XML
的文件,它不是XML格式,這對其他人來說是非常誤導(dǎo)的。RandomAccessFile
,因?yàn)槟乃袑懭攵际琼樞虻摹?/li>