0

我正在用一个数组填充一个 JList,但我的主要问题是应该包含字符的变量总是空的;readChar() 没有得到任何东西,至少这是我的假设。

我正在从直接文件中读取数据库,内容并不重要,除了从每个寄存器读取的前两个数据:1 个 int 和 25 个字符。

如果某些内容被错误地读出,我会通过查看满是难以辨认的字符的显示器来注意到...

public static void WritingInJList (JList x) throws IOException
   {
 try{
   RandomAccessFile file = new RandomAccessFile("database.dat","rw");

long registerSize = 78;
long numberRegisters = file.length()/registerSize;
int num=0;
String description="";

String productlist[] = new String[(int) numberRegisters];

for (int i=0;i<numberRegisters;i++)
{
   file.seek(registerSize*i);
   num = file.readInt();          /* int is read correctly */
   for (int j=0; j<25; j++)
   {description =""+file.readChar();} 
    productList[i] = num+"..."+description; /*variable description is blank!*/
    System.out.println(productList[i]); 
  }
  x.setListData(productList);
   }catch (FileNotFoundException e){System.out.println("File Not Found");}  
}

运行:
1...
2...
3...
4...
5...
6...
7...
8...
9...
10...
11...
12...
13...

当我使用 System.out.print(); 追踪问题时,如果从循环内部打印,则会显示所有字符。这是代码和输出:

public static void WritingInJList (JList x) throws IOException
   {
 try{
   RandomAccessFile file = new RandomAccessFile("database.dat","rw");

long registerSize = 78;
long numberRegisters = file.length()/registerSize;
int num=0;
String description="";

String productlist[] = new String[(int) numberRegisters];

for (int i=0;i<numberRegisters;i++)
{
   file.seek(registerSize*i);
   num = file.readInt();

   System.out.print(num+"...");          
   for (int j=0; j<25; j++)
     {System.out.print(""+file.readChar());} /*All chars are read perfectly*/
   System.out.println("");

   productList[i] = description; 
  }
  x.setListData(productList);
   }catch (FileNotFoundException e){System.out.println("File Not Found");}  
}

跑:

1... product1
2 ...product2
3...product3
4...
product4 5...product5
6...product6
7...product7
8...
product8 9...product9
10... product10
11...产品11
12...产品12
13... 产品13

我究竟做错了什么?为什么变量描述不显示任何内容

4

1 回答 1

0

你有:

for (int j=0; j<25; j++)
   {description =""+file.readChar();} 

description每次循环都会重置为单个字符。实际上,这最终只剩description下最后一个字符。

您的意思可能更像是:

description="";
for (int j=0; j<25; j++)
   {description =description+file.readChar();} 
于 2013-11-06T03:48:33.570 回答